介绍代码生成与特征匹配和注册

这个例子说明了如何使用MATLAB®编码器™生成C代码的MATLAB文件。这个例子说明如何修改由使用MATLAB代码自动特征匹配例如使得其被支撑用于码生成。万博1manbetx这个例子突出了一些代码生成的总体要求,以及一些你必须准备MATLAB代码的具体行动。一旦MATLAB代码准备代码生成,您使用代码生成命令生成相应的C-MEX功能。最后,为了验证效果,例如向您展示如何运行MATLAB生成的C-MEX功能,其输出与MATLAB代码的输出比较。

这个例子需要一个MATLAB编码器的许可证。

设置您的C编译器

要运行这个例子,你必须能够访问一个C编译器,您必须使用“MEX -setup”命令进行配置。欲了解更多信息,请参阅设置你的C编译器

决定是否在MATLAB运行或作为独立应用程序

生成的代码可以在MATLAB环境内为C-MEX文件运行,或MATLAB环境作为一个独立的可执行文件或共享公用外面与另一独立的可执行文件被链接。有关设置代码生成选项的详细信息,请参阅的-config选项代码生成命令。

MEX可执行文件

这个例子生成一个可执行MEX MATLAB环境内部运行。

生成C-MEX可执行里面MATLAB的运行,也可以在工作流程中重要的第一步,最终导致独立的代码。输入和MEX-文件的输出可用于在MATLAB环境,其中可视化和其他种核查和分析工具是容易得到检查。你也有无论是作为生成的C代码,或者通过MATLAB引擎运行的各个命令的选择。要通过MATLAB运行,申报相关命令,外在的,这意味着当需要运行该特定命令生成的代码将重新进入MATLAB环境。这是在案件有用的任一个孤立的命令还没有代码生成支持,或者如果你想不生成代码中嵌入特定的命令(如绘图命令)。万博1manbetx

独立可执行文件

如果代码到另一个应用程序部署的目标,那么一个独立的可执行文件将是必需的。所述第一步骤是适当地配置MATLAB编码器。例如,一种方式告诉它你想要一个独立的可执行文件是创建使用MATLAB编码器IDE和配置项目生成一个模块或可执行文件的MATLAB编码器项目。你可以这样做,使用C / C ++静态库或C / C ++从Build型插件的生成页面上的可执行方案。该IDE可通过导航如下:

- 点击Google Apps选项卡 - 向下滚动到MATLAB编码器 - 在MATLAB编码器项目对话框中,单击确定

您还可以使用定义配置对象

一个= coder.config( 'EXE')

以及对象传递到MATLAB命令行上的译码器命令。当你创建一个独立的可执行文件,你必须写自己的main.c(或main.cpp中)。请注意,当你创建一个独立的可执行文件,也有导入或导出的可执行文件和MATLAB环境之间的数据没有现成的工具。其中一个选项是使用“负载-ascii”与您的文件用printf / fprintf中的文件(在你的手写main.c中),然后将数据导入到MATLAB。

打出来的算法的计算部分到一个单独的功能的MATLAB

MATLAB编码器需要MATLAB代码是在一个函数的形式,以产生C语言代码。请注意,它通常是没有必要生成C代码对所有问题的MATLAB代码。通常希望将代码分离成主计算部,从该C代码生成是所需的,和一个线束或驱动程序,它不需要生成C代码 - 代码将在MATLAB运行。线束可以含有可视化和其他核查助剂是不实际被测系统的一部分。对于本实施例的主算法的代码驻留在一个调用的函数visionRecovertformCodeGeneration_kernel.m

一旦代码被如上所述重新设计的,你必须检查的由MATLAB编码器支持的代码使用功能的其余部分。万博1manbetx对于支持的命令的列表,请参阅万博1manbetxMATLAB编码器文件。有关支持的语言结构的列表,请万博1manbetx参阅MATLAB语言功能支持C / C ++代码生成万博1manbetx

这可能是方便的可视化有限或不被MATLAB编码器存在于含有主要的算法,我们希望编译功能支持的其他一些功能。万博1manbetx在这些情况下,您可以申报这些项目“外在”(使用coder.extrinsic)。这种能力,才可能当您生成C代码到MATLAB MEX文件,这些功能将在解释MATLAB模式实际运行。如果产生用于独立使用的代码,非本征函数忽略或它们产生一个错误,这取决于代码生成引擎是否确定它们所影响的结果。因此,必须对代码进行正确设计,这样的外在功能没有实质性的问题,如果一个独立的可执行最终期望影响的代码。

最初的例子使用showMatchedFeatures和imshowpair程序对结果的可视化。这些程序提取到一个新的功能featureMatchingVisualization_extrinsic.m。这个函数声明外在的。

运行仿真

内核文件visionRecovertformCodeGeneration_kernel.m有两个输入参数。第一输入是原始图像和所述第二输入是通过旋转和缩放失真图像。

%定义原始图像原始= imread('cameraman.tif');%通过调整大小和然后旋转原始图像定义失真图像标度= 0.7;J = imresize(原始的,尺度);THETA = 30;扭曲= imrotate(J,THETA);%调用生成的MEX文件[matchedOriginalLoc,matchedDistortedLoc,...thetaRecovered,...scaleRecovered,回收] =...visionRecovertformCodeGeneration_kernel(原始,扭曲);
scaleRecovered = 0.701003 thetaRecovered = 30.235065

编译MATLAB函数转换成一个MEX文件

现在使用的代码生成功能编译visionRecovertformCodeGeneration_kernel功能成MEX文件。你可以指定“-report”选项生成编译报告显示原始MATLAB代码并进行了C代码生成过程中产生的相关的文件。您可能希望创建一个临时目录,MATLAB编码器可以创建新的文件。注意,生成的MEX文件具有相同的名称与_mex原来的MATLAB文件附加,除非你使用-o选项来指定可执行文件的名称。

MATLAB编码器需要您指定的所有输入参数的属性。一个简单的方法做,这是在使用-args选项命令行,以限定通过例子中的输入特性。更多信息请参见输入规格。由于输入visionRecovertformCodeGeneration_kernel.m是一对图像,我们具有以下属性定义两个输入:

  • 可变大小在运行时与上界[1000 1000]

  • 数据类型UINT8

%定义的输入图像的属性imageTypeAndSize = coder.typeof(UINT8(0),[1000 1000],[真真]);compileTimeInputs = {imageTypeAndSize,imageTypeAndSize};代码生成visionRecovertformCodeGeneration_kernel.m-报告-argscompileTimeInputs;
代码生成成功:要查看报告,打开( '代码生成\墨西哥\ visionRecovertformCodeGeneration_kernel \ HTML \ report.mldatx')。

运行生成的代码

[matchedOriginalLocCG,matchedDistortedLocCG,...thetaRecoveredCG,scaleRecoveredCG,recoveredCG] =...visionRecovertformCodeGeneration_kernel_mex(原始,扭曲);
scaleRecovered = 0.701003 thetaRecovered = 30.235065

清理

明确visionRecovertformCodeGeneration_kernel_mex;

比较代码生成的MATLAB代码

回收规模和θ都为MATLAB和CODEGEN,如上所示,是合理的公差内。此外,匹配点是相同的,如下所示:

ISEQUAL(matchedOriginalLocCG,matchedOriginalLoc)ISEQUAL(matchedDistortedLocCG,matchedDistortedLoc)
ANS =逻辑1 ANS =逻辑1

附录

以下的辅助函数被用于本实施例。