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

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

这个示例需要MATLAB编码器许可证。

代码生成

您可以了解基本的代码生成使用MATLAB®编码器™从介绍代码生成与特征匹配和注册例。

重构MATLAB代码,用于C代码生成

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

这就提出了一个从MATLAB代码生成代码的问题cameraParameters要么stereoParameters对象,在照相机校准过程中提前通常创建。为了解决这个问题,可以使用toStruct()方法来转换cameraParameters或者stereoParameters对象转换为结构体。然后可以将结构传递到生成的代码中。

重构代码为主要算法立体视频的深度估计例如驻留在一个函数调用depthEstimationFromStereoVideo_kernel.m。注意depthEstimationFromStereoVideo_kernel函数是否采用从stereoParameters宾语。另请注意,它不显示重建的3 d点云,因为showPointCloudFunction不支持代码生成。金宝app

加载立体声摄像机的参数

加载stereoParameters对象,它是使用stereoCameraCalibrator应用程序或estimateCameraParameters函数。

加载stereoParameters对象。负载('handshakeStereoParams.mat');%可视化相机外部参数。showExtrinsics (stereoParams);将对象转换为可以传递给生成的结构体%的代码。stereoParamsStruct = toStruct (stereoParams);

解压缩视频文件

在麦金塔电脑上,VideoReader不支持读取压缩视频的代码生成。金宝app解压视频文件,并将其存储在临时目录中。

如果的strcmp(计算机(),“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”选项来生成一个编译报告,该报告显示原始的MATLAB代码和在C代码生成期间创建的相关文件。您可能希望创建一个临时目录,MATLAB编码器可以在其中存储生成的文件。注意,生成的mex -文件与原始的MATLAB文件具有相同的名称,并附加了_mex,除非您使用-o选项来指定可执行文件的名称。

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

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

运行生成的代码

球员= vision.VideoPlayer ('位置', [100 200 750 560]);eofReached = false;~ eof[eof, disframe] = depthEstimationFromStereoVideo_kernel_mex(stereoParamsStruct);保持最后一帧。如果~ eofReached步骤(球员,dispFrame);结束结束

清理

明确depthEstimationFromStereoVideo_kernel_mex;释放(球员);

摘要

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