主要内容

立体视频深度估计的代码生成

这个例子展示了如何使用MATLAB®Coder™为MATLAB函数生成C代码,它使用stereoParameters对象产生的立体声相机校准应用程序或estimateCameraParameters函数。这个例子说明了如何修改MATLAB中的代码立体声视频的深度估计支持代码生成的示例。金宝app

这个示例需要MATLAB Coder许可证。

代码生成

您可以学习使用MATLAB®Coder™代码生成的基础知识介绍代码生成与特征匹配和注册的例子。

重构MATLAB代码的C代码生成

MATLAB编码器要求MATLAB代码以函数的形式来生成C代码。此外,函数的参数不能是MATLAB对象。

这提出了从MATLAB代码生成代码的问题,它使用cameraParametersstereoParameters对象,这通常是在相机校准期间预先创建的。要解决这个问题,使用toStruct ()方法转换cameraParameters或者是stereoParameters对象转换为结构。然后可以将结构传递到生成的代码中。

重构后的代码主要为算法立体声视频的深度估计示例驻留在调用的函数中depthEstimationFromStereoVideo_kernel.m.请注意,depthEstimationFromStereoVideo_kernel是一个函数,接受一个结构创建从stereoParameters对象。还请注意,它不显示重建的三维点云,因为showPointCloudFunction不支持代码生成。金宝app

加载立体相机参数

加载stereoParameters对象,该对象是使用或校准相机的结果stereoCameraCalibrator应用程序或estimateCameraParameters函数。

加载stereparameters对象。负载(“handshakeStereoParams.mat”);%视觉化相机的外观。showExtrinsics (stereoParams);%将对象转换为一个结构体,它可以被传递到生成的%的代码。stereoParamsStruct = toStruct (stereoParams);

解压缩的视频文件

在Macintosh上,VideoReader不支持代码生成来读取压缩金宝app视频。将视频文件解压后存放在临时目录中。

如果比较字符串(计算机(),“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函数到mex文件中。您可以指定'-report'选项来生成一个编译报告,该报告显示了在C代码生成过程中创建的原始MATLAB代码和相关文件。您可能需要创建一个临时目录,MATLAB Coder可以在其中存储生成的文件。注意,生成的mex -文件的名称与原始MATLAB文件的名称相同,但添加了_mex,除非使用-o选项指定可执行文件的名称。

MATLAB编码器要求您指定所有输入参数的属性。一种简单的方法是通过示例在命令行使用-args选项定义输入属性。有关更多信息,请参阅在命令行通过示例定义输入属性(MATLAB编码器)

compileTimeInputs = {coder.typeof (stereoParamsStruct)};%生成代码。codegendepthEstimationFromStereoVideo_kernelarg游戏compileTimeInputs

运行生成的代码

球员=愿景。放像机(“位置”, [100 200 750 560]);eofReached = false;~eofReached [eofReached, disframe] = depthestimationfromstervideo_kernel_mex (stereoParamsStruct);保持最后一帧。如果~ eofReached步骤(球员,dispFrame);结束结束

清理

清晰的depthEstimationFromStereoVideo_kernel_mex;释放(球员);

总结

这个例子展示了如何从带有a的MATLAB代码中生成C代码cameraParameters或者一个stereoParameters对象作为输入。