主要内容

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

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

本例需要MATLAB Coder许可证。

代码生成

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

重构MATLAB代码生成C代码

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

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

该重构代码为的主要算法基于立体声视频的深度估计示例驻留在名为depthEstimationFromStereoVideo_kernel.m.请注意,depthEstimationFromStereoVideo_kernel函数是否接受从对象创建的结构stereoParameters对象。还请注意,它不显示重建的3-D点云,因为showPointCloudFunction不支持代码生成。金宝app

加载立体摄像机的参数

加载stereoParameters对象,这是使用任意一种方法校准相机的结果stereoCameraCalibratorApp或estimateCameraParameters函数。

加载stereparameters对象。负载(“handshakeStereoParams.mat”);视觉化相机外观。showExtrinsics (stereoParams);将对象转换为struct,该struct可以传递给generated%的代码。stereoParams = toStruct(stereoParams);

解压缩视频文件

在Macintosh上,videereader不支持用于读取压缩视频的金宝app代码生成。解压缩视频文件,并将其存储在临时目录中。

如果比较字符串(计算机(),“MACI64”解压缩左边的视频。videoFileLeft =“handshake_left.avi”;reader = videereader (videofilleft);writer = vision.VideoFileWriter(videoFileLeft);hasFrame(reader) = readFrame(reader);步骤(作家,框架);结束释放(读者);释放(作家);解压缩正确的视频。videoFileRight =“handshake_right.avi”;reader = videereader (videoFileRight);writer = vision.VideoFileWriter(videoFileRight);hasFrame(reader) = readFrame(reader);步骤(作家,框架);结束释放(读者);释放(作家);结束

将MATLAB函数编译成MEX文件

使用代码原函数编译depthEstimationFromStereoVideo_kernel函数转换为mex文件。您可以指定'-report'选项来生成一个编译报告,其中显示原始MATLAB代码和在C代码生成期间创建的相关文件。您可能想要创建一个临时目录,其中MATLAB Coder可以存储生成的文件。注意,生成的mex -文件与原始MATLAB文件具有相同的名称,附加了_mex,除非使用-o选项指定可执行文件的名称。

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

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

运行生成的代码

玩家=视野。放像机(“位置”, [100 200 750 560]);eofReached = false;~eofReached [eofReached, disframe] = depthEstimationFromStereoVideo_kernel_mex(stereoParamsStruct);保持最后一帧。如果~eofReached step(player, disframe);结束结束

清理

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

总结

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