主要内容

介绍代码生成功能匹配和登记

这个例子展示了如何使用MATLAB®编码器™为MATLAB生成C代码文件。这个例子解释了如何使用的MATLAB代码修改找到图像旋转和尺度使用自动化特性匹配例子,支持代码生成。万博1manbetx突出的例子代码生成的一般要求,以及一些你必须采取具体的行动准备MATLAB代码。一旦准备好代码生成的MATLAB代码,您可以使用codegen(MATLAB编码器)命令来生成一个C-MEX函数。最后,验证结果,示例向您展示如何在MATLAB运行生成的C-MEX函数和比较其输出与MATLAB代码的输出。

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

设置您的C编译器

要运行这个示例,您必须访问一个C编译器,您必须配置使用的墨西哥人设置的命令。有关更多信息,请参见开始使用MATLAB编码器(MATLAB编码器)

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

在MATLAB环境中生成的代码可以运行作为一个C-MEX文件,或在MATLAB环境中作为一个独立的可执行文件或共享效用与另一个独立的可执行文件。有关设置代码生成选项的更多细节,看到的配置选项codegen(MATLAB编码器)命令。

墨西哥人可执行文件

这个示例中生成一个墨西哥人可执行在MATLAB环境中运行。

生成C-MEX可执行在MATLAB运行也可以成为一个伟大的第一步一个工作流,最终导致独立的代码。MEX-file的输入和输出可用于检查在MATLAB环境中,可视化和其他类型的验证和分析工具是现成的。你也可以选择运行单个命令生成的C代码,或通过MATLAB引擎。通过MATLAB运行,申报相关的命令coder.extrinsic(MATLAB编码器),这意味着所生成的代码将进入MATLAB环境时,它需要运行这个命令。这是有用的在一个孤立的命令的情况下还没有代码生成的支持,或者如果你想嵌入特定的命令,不生成代码(如绘图命令)。万博1manbetx

独立的可执行文件

如果代码部署到另一个应用程序的目标,然后需要一个独立的可执行文件。第一步是配置适当的MATLAB编码器。例如,告诉它你想要一个独立的可执行文件的一种方法是创建一个MATLAB编码器使用MATLAB编码器IDE和配置项目生成一个模块或一个可执行的。你可以使用C / c++静态库或C / c++执行选项从构建类型生成页面上的小部件。这个IDE可以通过导航如下:

单击应用程序选项卡,向下滚动到MATLAB编码器,在MATLAB编码器项目对话框中,单击OK

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

一个= coder.config (exe)

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

打破算法的计算部分到一个单独的MATLAB函数

MATLAB编码器需要MATLAB代码是一个函数的形式,以生成C代码。注意,通常没有必要为所有的MATLAB代码生成C代码。通常需要单独的代码主要计算部分,从C代码生成,和利用或驱动程序,不需要生成C代码,代码将在MATLAB中运行。利用可能包含可视化和其他验证艾滋病不是被测系统的一部分。这个例子的主要算法的代码驻留在一个函数调用visionRecovertformCodeGeneration_kernel

一旦代码重构如上所述,您必须检查其余的代码使用功能由MATLAB编码器。万博1manbetx支持命令的列表,请参阅MAT万博1manbetxLAB编码器函数和对象支持C / c++代码生成万博1manbetx(MATLAB编码器)。支持的语言结构列表,看看万博1manbetxMATLAB语言特性支持C / c++代码生成万博1manbetx(MATLAB编码器)

我们可以方便的可视化有限或其他一些功能,不支持包含主要的编码器出现在MATLAB函数算法,我们希望编译。万博1manbetx在这些情况下,您可以声明这些项目“外在”(使用coder.extrinsic)。这种能力只能当你生成C代码到一个MATLAB MEX-file,这些功能会在解释MATLAB模式下运行。如果独立使用生成代码,非本征函数忽略或者生成一个错误,根据代码生成引擎决定了他们是否会影响结果。因此,代码必须得到适当的架构,这样外在功能不明显影响问题如果一个独立的可执行文件中的代码最终想要的。

原始的例子使用showMatchedFeatures和imshowpair例程的可视化结果。这些例程被提取到一个新函数featureMatchingVisualization_extrinsic。这个函数是宣布外在。

运行仿真

内核文件visionRecovertformCodeGeneration_kernel.m有两个输入参数。首先输入原始图像和第二输入图像扭曲旋转和规模。

%定义原始图像原始= imread (“cameraman.tif”);%定义扭曲图像的原始图像的放大缩小,然后旋转规模= 0.7;J = imresize(原始、规模);θ= 30;%注意imrotate在逆时针方向旋转图像%你指定一个积极的旋转角。顺时针旋转图像,%指定-θ。扭曲= imrotate (J,θ);%调用生成的墨西哥人文件[matchedOriginalLoc, matchedDistortedLoc thetaRecovered scaleRecovered,恢复]= visionRecovertformCodeGeneration_kernel(原始的、扭曲的);
scaleRecovered thetaRecovered = 29.761583 = 0.702550

编译成一个墨西哥人文件的MATLAB函数

现在使用的codegen(MATLAB编码器)函数编译成MEX-file visionRecovertformCodeGeneration_kernel函数。您可以指定“报告”选项来生成一个编译报告显示原始的MATLAB代码和相关的文件中创建C代码生成。您可能想要创建一个临时目录,MATLAB编码器可以创建新文件。注意,生成MEX-file具有相同的名称作为原始MATLAB与_mex附加文件,除非您使用- o选项来指定可执行文件的名称。

MATLAB编码器要求您指定属性的所有输入参数。一个简单的方法是定义输入属性的例子使用参数的命令行选项。更多信息见在命令行定义输入属性的例子(MATLAB编码器)。因为输入%visionRecovertformCodeGeneration_kernel是一对的图像,我们定义两个输入以下属性:

  • 可变大小与上限(1000 1000)在运行时

  • 数据类型uint8

%定义输入图像的属性imageTypeAndSize = coder.typeof (uint8(0)(1000 1000),[真真正]);compileTimeInputs = {imageTypeAndSize, imageTypeAndSize};codegenvisionRecovertformCodeGeneration_kernel.m报告arg游戏compileTimeInputs;
代码生成成功:查看报告,打开(“codegen /墨西哥人/ visionRecovertformCodeGeneration_kernel / html / report.mldatx”)

运行生成的代码

[matchedOriginalLocCG, matchedDistortedLocCG,thetaRecoveredCG、scaleRecoveredCG recoveredCG] =visionRecovertformCodeGeneration_kernel_mex(原始的、扭曲的);
scaleRecovered thetaRecovered = 29.908159 = 0.702448

清理

清晰的visionRecovertformCodeGeneration_kernel_mex;

用MATLAB代码比较Codegen

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

isequal (matchedOriginalLocCG matchedOriginalLoc) isequal (matchedDistortedLocCG matchedDistortedLoc)
ans =逻辑1 ans =逻辑1

附录

本例中使用以下辅助函数。