Main Content

为目标检测生成代码

此示例说明如何使用 MATLAB® Coder™ 从使用 Image Processing Toolbox™ 函数的 MATLAB 应用程序中生成 C 代码。此示例说明如何设置您的 MATLAB 环境,并准备您的 MATLAB 代码以用于代码生成。

此示例还说明如何解决在 MATLAB 代码中可能遇到的阻止代码生成的问题。为了说明此过程,此示例使用的代码存在一些就绪问题和编译问题,您必须解决这些问题才能生成代码。

设置编译器

通过使用带 -setup 选项的 mex 函数,指定要与 MATLAB Coder 结合使用的 C/C++ 编译器来生成代码。

mex -setup

定义入口函数

入口函数是一个 MATLAB 函数,用作代码生成的源代码。首先,在不支持代码生成的情况下建立图像处理工作流原型。此示例定义名为 detectCells.m 的函数,该函数使用分割和形态学方法来执行细胞检测。此函数作为支持文件包含在本示例中。

使用示例图像 cell.tif 测试示例代码。

I = imread('cell.tif');
Iseg = detectCells(I);

通过在原始图像上叠加分割图像来确认分割的准确度。

imshow(labeloverlay(I,Iseg))

由于您要修改此代码以进行代码生成,因此最好使用代码的副本。此示例包含名为 detectCellsCodeGen.m 的辅助函数 detectCells.m 的副本。用于代码生成的函数版本包含位于函数签名末尾的 MATLAB Coder 编译指令 %#codegen。此指令指示 MATLAB 代码分析器诊断会阻止成功生成代码的问题。

使用 coder 函数打开 MATLAB Coder。(或者,在 MATLAB 中,选择 App 选项卡,导航到“代码生成”,然后点击 MATLAB Coder。)

coder

将您的入口函数的名称指定为 detectCellsCodeGen,然后按 Enter 键。

coder_1_specifyFunction.png

确定代码就绪情况以进行代码生成

点击 Next。MATLAB Coder 会标识任何可能阻止代码生成的问题。示例代码包含五个不受支持的函数调用。

coder_2_readinessReport.png

检查就绪问题。点击 Review Issues。在报告中,MATLAB Coder 在编辑窗口中显示您的代码,并在下方列出就绪问题,标记使用了不支持代码生成的 imshow 函数。

coder_3_readinessSpecifics.png

更正就绪问题

解决就绪问题。从您的示例中删除对 imshow 和相关显示代码的调用。分段操作不需要显示语句。您可以直接在 MATLAB Coder 中编辑示例代码。删除相关代码后,点击 Save 保存您的编辑并重新运行就绪检查。重新运行就绪检查后,MATLAB Coder 显示 No issues found 消息。

coder_4_updatedCode.png

定义函数输入的大小和数据类型

代码的每项输入都必须指定为具有固定大小、可变大小或常量。有几种方法可以指定输入参数的大小,但最简单的方法是为 MATLAB Coder 提供调用函数的示例。在文本输入字段中输入调用您的函数的脚本。对于此示例,请在 MATLAB 提示符下输入以下代码,然后按 Autodefine Input Types

I = imread('cell.tif');
Iseg = detectCellsCodeGen(I);

有关定义输入的详细信息,请参阅 MATLAB Coder 文档。在 MATLAB Coder 返回输入类型定义后,点击 Next

coder_6_inputDataTypesAutodefined.png

检查并解决运行时问题

即使您执行了 MATLAB Coder 就绪检查,在编译过程中仍可能出现阻止代码生成的其他问题。当就绪检查查看函数依存关系以确定就绪情况时,编译过程会检查编码模式。您可以使用您输入的相同代码来定义输入类型(已预加载到对话框中)。点击 Check for Issues

coder_7_checkForRunTimeIssues.png

此示例包含一个编译问题:它将 strel 对象数组传递给 imdilate,而代码生成不支持对象数组。

coder_8_specificRunTimeIssue.png

解决标识的编译问题。对于此示例,请修改对 imdilate 的调用,以避免传递 strel 对象数组。将对 imdilate 的单次调用替换为对 imdilate 的两次单独调用,每次调用传递一个 strel 对象。

coder_9_fixedRunTimeIssue.png

重新运行测试编译,以确保您的更改解决了该问题。点击 Check for Issues。MATLAB Coder 显示一条消息,声明没有检测到问题。

coder_10_noIssuesFound.png

生成代码

您现在已准备好生成代码。点击 Next

选择要生成的代码的类型,并选择目标平台。MATLAB Coder 可以生成 C 或 C++ 源代码、MEX 文件、静态库、共享库或独立的可执行文件。对于生产硬件,您可以从许多选项中进行选择,包括 ARM 和 Intel 处理器。

此示例使用默认选项。编译类型为 Source Code,语言为 C。对于设备选项,请指定某设备供应商的一个通用设备,并对设备类型指定一台 MATLAB 主机。当您选择 MATLAB 主机时,MATLAB Coder 会生成依赖于预编译的共享库的代码。Image Processing Toolbox 函数使用共享库来保持性能优化。

点击 Generate

coder_11_specifyCodeGenPlatform.png

MATLAB Coder 会显示生成的代码。

点击 Next 完成该过程。MATLAB Coder 显示关于它所生成代码的信息。默认情况下,MATLAB Coder 在您的工作文件夹中创建一个 codegen 子文件夹,其中包含生成的输出。

另请参阅

(MATLAB Coder) | (MATLAB Coder)

相关主题