Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

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

この例では、イメージのバッチ処理アプリを使用して同じフォルダーにあるイメージのグループを処理する方法を説明します。

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

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

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

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

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

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

バッチ処理関数の指定

フォルダー内のイメージの処理に使用する関数の名前を指定します。既存の関数を指定するには、アプリのツールストリップの [バッチ関数] セクションにある [関数名] ボックスに名前を入力します。このボックスの隣にあるフォルダー アイコンをクリックして参照し、関数を選択することもできます。新しいバッチ処理関数を作成するには、アプリのツールストリップの [バッチ関数] セクションにある [新規] をクリックします。これを行うと、MATLAB® エディターでバッチ処理関数テンプレートが開きます。この例では、[新規] をクリックして新しい関数を作成します。

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

function results = myimfcn(im)
%Image Processing Function
%
% IM      - Input image.
% RESULTS - A scalar structure with the processing results.
%

%--------------------------------------------------------------------------
% Auto-generated by imageBatchProcessor App. 
%
% When used by the App, this function will be called for every input image
% file automatically. IM contains the input image as a matrix. RESULTS is a
% scalar structure containing the results of this processing function.
%
%--------------------------------------------------------------------------

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

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

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

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

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

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

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

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

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

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

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

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