Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

イメージのバッチ処理アプリを使用したイメージ フォルダーの処理

この例では、"イメージのバッチ処理" アプリを使用して、フォルダーまたはデータストアにある複数のイメージを処理する方法を説明します。

書き込み権限のある領域で新しいフォルダーを作成し、Image Processing Toolboximdata フォルダーから作成したフォルダーに 10 個 1 組のイメージをコピーします。

mkdir("cellprocessing");
copyfile(fullfile(matlabroot,"toolbox","images","imdata","AT3*.tif"),"cellprocessing","f");

イメージのバッチ処理アプリへのイメージの読み込み

MATLAB® ツールストリップから、イメージのバッチ処理アプリを開きます。[アプリ] タブの [イメージ処理とコンピューター ビジョン] セクションで [イメージのバッチ処理] をクリックします。

Image Batch Processor app window

イメージをアプリに読み込みます。アプリのツールストリップで、[追加] の上にある をクリックします。[フォルダーからのイメージの読み込み] ダイアログ ボックスで、読み込みたいイメージを含むフォルダーを指定します。この例では、最初のステップで作成したフォルダー cellprocessing を指定します。既定の設定では、サブフォルダーにあるイメージも含まれます。次に [読み込み] をクリックします。

サブフォルダーを含むフォルダーからイメージを読み込むには、アプリのツールストリップの [追加] の下で [サブフォルダーを含むフォルダー] を選択します。MATLAB ワークスペース内の imageDatastore オブジェクトからイメージを読み込むには、[追加] の下で [ワークスペースのイメージ データストア] を選択します。

イメージのバッチ処理アプリではフォルダーにあるイメージのサムネイルが作成され、左のペインのスクロール可能なタブに表示されます。最初に選択されたイメージ (青色で強調表示) が右のペインの [入力イメージ] タブに高解像度で表示されます。

Image Batch Processor app window with cell images loaded in the browser

バッチ処理関数の指定

フォルダー内のイメージの処理に使用する関数の名前を指定します。既存の関数を指定するには、アプリのツールストリップの [バッチ関数] セクションにある [関数名] ボックスに名前を入力します。この関数は、imbinarize などの MATLAB 関数か、事前に作成したカスタム バッチ関数にすることができます。MATLAB 関数を使用する場合は、シグネチャ out = fcn(in) をもつ必要があります。このボックスの隣にあるフォルダー アイコンをクリックして参照し、関数を選択することもできます。新しいバッチ処理関数を作成するには、アプリのツールストリップの [バッチ関数] セクションにある [作成] をクリックします。これを行うと、MATLAB® エディターでバッチ処理関数テンプレートが開きます。この例では、[作成] をクリックして新しい関数を作成します。

Click Create to open the batch processing function template

バッチ処理関数テンプレートで、テンプレート ファイル内の予備の領域に新しい関数のコードを入力し、[保存] をクリックします。この例では、バッチ処理関数の既定の名前である myimfcn を使用しますが、任意の名前を指定することもできます。この例のコードでは、マスク イメージを作成し、イメージ内にある細胞の総数を計算します。また、元のイメージをしきい値処理したものを作成します。

function results = myimfcn(varargin)
%Image Processing Function
%
% VARARGIN - Can contain up to two inputs: 
%   IM - First input is a numeric array containing the image data. 
%   INFO - Second input is a scalar structure containing information about 
%          the input image source.
%
%   INFO can be used to obtain metadata about the image read. 
%   To apply a batch function using the INFO argument, you must select the 
%   Include Image Info check box in the app toolstrip.
%   
% RESULTS - A scalar struct with the processing results.
%
% 
%
%--------------------------------------------------------------------------
% Auto-generated by imageBatchProcessor App. 
%
% When used by the App, this function will be called for each input image
% file automatically.
%
%--------------------------------------------------------------------------

% Input parsing------------------------------------------------------------
im = varargin{1};

if nargin == 2
    % Obtain information about the input image source
    info = varargin{2};
end

% Replace the sample below with your code----------------------------------

imstd = stdfilt(im,ones(27));
bw    = imstd>30;

thresholdMask = imfuse(im, bw);
[~, n] = bwlabel(bw);

results.bw = bw;
results.thresholdMask = thresholdMask;
results.numCells = n;

%--------------------------------------------------------------------------
end

ファイルを保存します。保存後、この新しい関数の名前がアプリのツールストリップの [関数名] ボックスに表示されます。

App toolstrip showing the name of the newly saved function in the Function Name box.

バッチ処理関数を使用したイメージの処理

イメージのいずれかに対してバッチ処理を実行し、新しい関数をテストします。イメージが 1 つ選択された状態 (青色で強調表示) で [選択対象を処理] をクリックして選択したイメージを処理します。処理の結果は [結果] と呼ばれる新しいパネルに表示されます。この例では、バイナリ マスク、イメージ内にあるオブジェクト (細胞) のカウント数およびこのイメージをしきい値処理したものを表示しています。

Image Batch Processor window showing the result of processing one selected image

イメージの結果のクローズアップ ビューを表示するために、[結果] パネルで特定の結果について [表示] をクリックします。中央下部のペインで、このイメージの高解像度バージョンが新しいタブで開きます。この例では、[結果] パネルで bw[表示] をクリックし、バイナリ マスクの結果を表示します。結果を確認するために、イメージの上にカーソルを移動させ、移動とズームのコントロールにアクセスします。ズームやパニングでは結果のイメージが元のイメージにリンクされます。つまり、一方のイメージをパンまたはズームすると、他のイメージも移動します。この動作が望ましくない場合は、アプリのツールストリップで [座標軸のリンク] をオフにします。

Click Show to view the binary mask in the Results Panel

いずれかのイメージでテストの実行結果に問題がなければ、フォルダー内のすべてのイメージに対して関数を実行します。すべてのイメージを一度に処理するには、アプリのツールストリップで [選択対象を処理] をクリックし、[すべて処理] を選択します。イメージの一部のみを処理する場合は、[選択対象を処理] をクリックします。処理するイメージを選択するには、Ctrl を押して目的のイメージをクリックするか、または先頭とするイメージを 1 つクリックして Shift を押し、別のイメージをクリックすることで、先頭イメージと最終イメージの間にあるイメージをすべて選択します。Parallel Computing Toolbox™ がある場合、アプリのツールストリップで [並列の使用] をクリックしてローカルの並列プールでイメージを処理できます。この例の場合、すべてのイメージを処理します。

フォルダー内またはデータストア内のすべてのイメージが処理されます。サムネイルの横には塗りつぶし表示された緑色の正方形がありますが、これはそのイメージの処理に成功したことを示しています。[結果] パネルに選択したイメージの結果が表示されます (青色で強調表示)。アプリの右下にあるステータス バーには、処理されたイメージの数が報告されます。

処理されたイメージのエクスポートと処理パイプライン

結果を保存するには、[エクスポート] をクリックして、使用可能なオプションを表示します。結果はワークスペースかファイルにエクスポートできます。または、結果の生成に使用したアプリの MATLAB® コードを取得することもできます。

ワークスペース変数に結果を保存します。アプリのツールストリップで、[エクスポート] をクリックして [すべての処理されたイメージの結果をワークスペースにエクスポート] オプションを選択します。ダイアログ ボックスが開いたら、エクスポートしたい結果を選択します。イメージ以外の結果はワークスペースにエクスポートし、処理から生成されたイメージはファイルに保存するのが一般的な方法です。この例では、細胞数を入力ファイルの名前と共にワークスペース変数 numCells に保存します。

Export result dialog box

既定の設定では、選択した結果が allresults というテーブルに返されます。結果をテーブルではなく構造体に格納するには、ダイアログ ボックスで [構造配列] を選択します。結果変数に別の名前を指定するには、ダイアログ ボックスで [変数名] を変更します。[入力イメージのファイル名を含める] をオンにすると、構造体またはテーブルの結果と関連付けられたイメージの名前が含まれます。エクスポートの詳細を指定したら、[OK] をクリックします。

アプリがファイルの処理に使用した MATLAB® コードを取得するには、アプリのツールストリップで、[エクスポート] をクリックして [関数の生成] を選択します。入力引数として、入力フォルダー名または imageDatastore オブジェクトと、出力フォルダー名を受け入れる関数が生成されます。既定で、生成された関数は結果を含むテーブルを返しますが、代わりに構造体を返すように選択することもできます。イメージの結果の場合、ファイル形式と、その関数が指定した出力フォルダーにイメージを書き込むかどうかを指定することができます。

参考

|

関連するトピック