このページの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。
この例では,MATLAB®编码器™を使用してMATLAB関数のCコードを生成する方法を説明します。このコードは,ステレオカメラキャリブレーターアプリまたは関数estimateCameraParameters
で作成されたstereoParameters
オブジェクトを使用します。ここではステレオビデオからの深度推定の例にあるMATLABコードを変更して,コード生成がサポートされるようにする方法を説明します。
この例にはMATLAB编码器のライセンスが必要です。
MATLAB®编码器™を使用したコード生成の基礎については,特徴のマッチングとレジストレーションを使ったコード生成の紹介の例を参照してください。
MATLAB编码器でCコードを生成するには,MATLABコードが関数の形式を取っていなければなりません。また,関数の引数がMATLABオブジェクトであってはなりません。
これはMATLABコードからコードを生成する際に問題となります。MATLABコードではcameraParameters
オブジェクトまたはstereoParameters
オブジェクトが使用され,これは通常,カメラのキャリブレーション時にあらかじめ作成されます。この問題を解決するには,toStruct ()
メソッドを使用してcameraParameters
オブジェクトまたはstereoParameters
オブジェクトを構造体に変換します。この構造体は,その後,生成されたコードに渡すことができます。
ステレオビデオからの深度推定の例のメインアルゴリズムを再構成したコードは,depthEstimationFromStereoVideo_kernel.mという関数内にあります。depthEstimationFromStereoVideo_kernel
は,stereoParameters
オブジェクトから作成された構造体を受け取る関数であることに注意してください。また,showPointCloudFunction
はコード生成をサポートしないため,再構成された3次元点群は表示されません。
stereoParameters
オブジェクトを読み込みます。このオブジェクトはstereoCameraCalibrator
アプリまたは関数estimateCameraParameters
を使用してカメラのキャリブレーションを行った結果です。
加载stereparameters对象。负载(“handshakeStereoParams.mat”);视觉化摄像机外物。showExtrinsics (stereoParams);%将对象转换为结构体,该结构体可以传递给生成的对象%的代码。stereoParamsStruct = toStruct (stereoParams);
Macintoshでは,圧縮されたビデオを読み取るためのコード生成がVideoReaderでサポートされていません。ビデオファイルを非圧縮化して,一時ディレクトリに保存します。
如果比较字符串(计算机(),“MACI64”)解压缩左边视频。videoFileLeft =“handshake_left.avi”;读者= VideoReader (videoFileLeft);作家= vision.VideoFileWriter (videoFileLeft);而hasFrame(reader) frame = readFrame(reader);步骤(作家,框架);结束释放(读者);释放(作家);解压正确的视频。videoFileRight =“handshake_right.avi”;读者= VideoReader (videoFileRight);作家= vision.VideoFileWriter (videoFileRight);而hasFrame(reader) frame = readFrame(reader);步骤(作家,框架);结束释放(读者);释放(作家);结束
関数codegenを使用して,関数depthEstimationFromStereoVideo_kernel
を墨西哥人ファイルにコンパイルします。コンパイルレポートを生成するには‘报告’オプションを指定します。このレポートには元のMATLABコードと,Cコードの生成時に作成された関連ファイルが含まれています。必要に応じて,生成されたファイルをMATLAB编码器が保存できる一時ディレクトリを作成します。生成される墨西哥人ファイルの名前は,- oオプションを使って実行可能ファイルの名前を指定した場合を除き,元のMATLABファイルに_mexを追加したものになることに注意してください。
MATLAB编码器では,すべての入力パラメーターのプロパティを指定しなければなりません。これを簡単に行うには,コマンドラインでargsオプションを使用して,入力パラメーターを例で定義します。詳細については,コマンドラインでの例による入力プロパティの定義(MATLAB编码器)を参照してください。
compileTimeInputs = {coder.typeof (stereoParamsStruct)};%生成代码。codegendepthEstimationFromStereoVideo_kernelarg游戏compileTimeInputs;
球员=愿景。放像机(“位置”, [100 200 750 560]);eofReached = false;而~eofReached [eofReached, disframe] = depthestimationfromsterevideo_kernel_mex (stereoParamsStruct);%保留最后一帧。如果~ eofReached步骤(球员,dispFrame);结束结束
清晰的depthEstimationFromStereoVideo_kernel_mex;释放(球员);
この例では,cameraParameters
オブジェクトまたはstereoParameters
オブジェクトを入力として受け取るMATLABコードからCコードを生成する方法を説明しました。