Main Content

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

オブジェクト検出用コードの生成

この例では、Image Processing Toolbox™ の関数を使用する MATLAB アプリケーションから MATLAB® Coder™ を使用して C コードを生成する方法を説明します。この例では、MATLAB 環境を設定し、コード生成用の MATLAB コードを準備する方法を説明します。

また、MATLAB コードで発生する可能性のある、コード生成の妨げとなる問題の解決方法も説明します。プロセスを説明するため、この例で使用するコードには、コードの生成前に解決しなければならない準備の問題とビルドの問題が含まれています。

コンパイラの設定

MATLAB Coder で使用する C/C++ コンパイラを指定し、関数 mex-setup オプション付きで使用してコードを生成します。

mex -setup

エントリポイント関数の定義

エントリポイント関数は、コード生成のソース コードとして使用する MATLAB 関数です。まず、コード生成のサポートなしでイメージ処理ワークフローのプロトタイプを作成します。この例では、セグメンテーションおよびモルフォロジー技術を使用して細胞検出を実行する、detectCells.m という関数を定義します。この関数は、この例にサポート ファイルとして添付されています。

サンプル イメージ cell.tif を使用してコード例をテストします。

I = imread('cell.tif');
Iseg = detectCells(I);

元のイメージにセグメント化されたイメージを重ね合わせ、セグメンテーションの精度を確認します。

imshow(labeloverlay(I,Iseg))

コード生成用にこのコードを変更するため、コードのコピーを使用して作業をすることをお勧めします。この例には、detectCellsCodeGen.m という名前の、補助関数 detectCells.m のコピーが含まれています。コード生成に使用するバージョンの関数には、関数シグネチャの最後に MATLAB Coder コンパイル命令 %#codegen が含まれています。この命令は、MATLAB コード アナライザーに対して、コード生成の妨げとなる問題を診断するように指示します。

関数 coder を使用して MATLAB Coder アプリを開きます (あるいは、MATLAB で [アプリ] タブを選択し、[コード生成] に移動して MATLAB Coder アプリをクリックします)。

coder

エントリポイント関数の名前 detectCellsCodeGen を指定し、Enter を押します。

coder_1_specifyFunction.png

コード生成のためのコード準備状態の特定

[次へ] をクリックします。MATLAB Coder により、コード生成の妨げとなる可能性のある問題が特定されます。このコードの例には 5 つのサポートされていない関数呼び出しがあります。

coder_2_readinessReport.png

準備状態の問題を確認します。[問題の確認] をクリックします。レポートでは、MATLAB Coder の編集ウィンドウにコードが表示され、その下側にコード生成をサポートしていない関数 imshow の使用を警告する準備状態の問題のリストが示されます。

coder_3_readinessSpecifics.png

準備状態の問題の修正

準備状態の問題を解決します。この例から imshow の呼び出しと関連する表示コードを削除します。表示のステートメントはセグメンテーションの演算には必要ありません。MATLAB Coder でこのコード例を直接編集できます。コードを削除したら、[保存] をクリックして編集を保存し、準備状態のチェックを再実行します。準備状態のチェックを再実行すると、MATLAB Coder が「問題は見つかりません」というメッセージを表示します。

coder_4_updatedCode.png

関数入力のサイズとデータ型の定義

コードへの入力はすべて、固定サイズ、可変サイズまたは定数になるように指定しなければなりません。入力引数のサイズの指定方法は複数ありますが、最も簡単な方法は関数呼び出しの例を MATLAB Coder に指定することです。関数を呼び出すスクリプトをテキスト入力フィールドに入力します。この例では、MATLAB プロンプトで次のコードを入力して [入力の型の自動定義] を押します。

I = imread('cell.tif');
Iseg = detectCellsCodeGen(I);

入力の定義の詳細については、MATLAB Coder のドキュメンテーションを参照してください。MATLAB Coder が入力タイプの定義を返したら、[次へ] をクリックします。

coder_6_inputDataTypesAutodefined.png

実行時の問題のチェックと解決

MATLAB Coder の準備状態チェックを実行していても、コード生成の妨げとなるその他の問題がビルド処理の際に発生する場合があります。準備状態チェックでは関数の依存関係によって準備状態が特定されますが、ビルド処理ではコーディング パターンが検証されます。入力タイプの定義で入力したのと同じコードを使用できます (ダイアログ ボックスに事前に読み込まれています)。[問題の確認] をクリックします。

coder_7_checkForRunTimeIssues.png

この例には次のビルドの問題が含まれています。すなわち、strel オブジェクトの配列を imdilate に渡していますが、オブジェクトの配列はコード生成でサポートされていないのです。

coder_8_specificRunTimeIssue.png

特定されたビルドの問題を解決します。この例では、strel オブジェクトの配列を渡さないように、imdilate の呼び出しを変更します。imdilate に対する 1 つの呼び出しを、imdilate に対する 2 つの別々の呼び出しに置き換えます。この場合、それぞれの呼び出しで 1 つの strel オブジェクトを渡します。

coder_9_fixedRunTimeIssue.png

テスト用のビルドを再実行し、変更によって問題が解決したことを確認します。[問題の確認] をクリックします。MATLAB Coder は問題が検出されないことを示すメッセージを表示します。

coder_10_noIssuesFound.png

コードの生成

これでコード生成の準備ができました。[次へ] をクリックします。

生成するコードの種類を選択し、ターゲット プラットフォームを選択します。MATLAB Coder は C または C++ ソース コード、MEX ファイル、スタティック ライブラリ、共有ライブラリまたはスタンドアロンの実行可能ファイルを生成できます。[製品ハードウェア] は、ARM や Intel プロセッサを含む多くの選択肢から選択できます。

この例では、既定のオプションを使用します。ビルド タイプは [ソース コード]、言語は [C] です。デバイス オプションについては、デバイス ベンダーの一般デバイス、デバイス タイプには [MATLAB Host Computer] を指定します。[MATLAB Host Computer] を選択した場合、MATLAB Coder はプリコンパイルされた共有ライブラリに依存するコードを生成します。Image Processing Toolbox 関数は、共有ライブラリを使用して最適なパフォーマンスを維持しています。

[生成] をクリックします。

coder_11_specifyCodeGenPlatform.png

MATLAB Coder により、生成されたコードが表示されます。

[次へ] をクリックして処理を完了します。MATLAB Coder は生成内容についての情報を表示します。MATLAB Coder の既定の設定では、生成された出力を格納する codegen サブフォルダーが作業フォルダーに作成されます。

参考

(MATLAB Coder) | (MATLAB Coder)

関連するトピック