用于立体视频深度估计的代码生成
这个例子展示了如何使用MATLAB®Coder™为MATLAB函数生成C代码,该函数使用stereoParameters
对象生成的立体相机校准器应用程序或estimateCameraParameters
函数。实例说明了如何修改MATLAB代码基于立体视频的深度估计示例支持代码生成。
这个例子需要MATLAB Coder许可证。
代码生成
您可以学习使用MATLAB®Coder™代码生成的基础知识介绍带有特征匹配和注册的代码生成的例子。
重构MATLAB代码以生成C代码
MATLAB Coder要求MATLAB代码以函数的形式生成C代码。此外,函数的参数不能是MATLAB对象。
这就提出了一个从MATLAB代码生成代码的问题,它使用cameraParameters
或stereoParameters
对象,这些对象通常在相机校准期间提前创建。要解决此问题,请使用toStruct ()
方法将cameraParameters
或者是stereoParameters
对象转换为结构体。然后可以将结构传递到生成的代码中。
的主算法的重构代码基于立体视频的深度估计示例驻留在一个函数中depthEstimationFromStereoVideo_kernel.m.请注意,depthEstimationFromStereoVideo_kernel
是否接受从对象创建的结构的函数stereoParameters
对象。还要注意,它没有显示重建的3-D点云,因为showPointCloudFunction
不支持代码生成。
加载立体声摄像机参数
加载stereoParameters
对象,该对象是使用stereoCameraCalibrator
应用程序或estimateCameraParameters
函数。
加载立体参数对象。负载(“handshakeStereoParams.mat”);可视化相机外观。showExtrinsics (stereoParams);将对象转换为可以传递到generated的结构%的代码。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);步骤(作家,框架);结束释放(读者);释放(作家);结束
编译MATLAB函数到MEX文件
使用codegen函数编译depthEstimationFromStereoVideo_kernel
函数转换为墨西哥文件。您可以指定'-report'选项来生成一个编译报告,其中显示了在C代码生成期间创建的原始MATLAB代码和相关文件。您可能想要创建一个临时目录,在那里MATLAB Coder可以存储生成的文件。注意,生成的mex文件与附加了_mex的原始MATLAB文件具有相同的名称,除非您使用-o选项指定可执行文件的名称。
MATLAB Coder要求您指定所有输入参数的属性。一种简单的方法是在命令行使用-args选项通过示例定义输入属性。有关更多信息,请参见在命令行通过示例定义输入属性(MATLAB编码器).
compileTimeInputs = {coder.typeof (stereoParamsStruct)};%生成代码。codegendepthEstimationFromStereoVideo_kernelarg游戏compileTimeInputs;
运行生成的代码
球员=愿景。放像机(“位置”, [100 200 750 560]);eofReached = false;而~eofReached [eofReached, disframe] = depthEstimationFromStereoVideo_kernel_mex(stereooparamsstruct);保持最后一帧。如果~ eofReached步骤(球员,dispFrame);结束结束
清理
清晰的depthEstimationFromStereoVideo_kernel_mex;释放(球员);
总结
这个例子展示了如何从MATLAB代码生成C代码cameraParameters
或者一个stereoParameters
对象作为输入。