为目标检测生成代码
此示例说明如何使用 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 键。
确定代码就绪情况以进行代码生成
点击 Next。MATLAB Coder 会标识任何可能阻止代码生成的问题。示例代码包含五个不受支持的函数调用。
检查就绪问题。点击 Review Issues。在报告中,MATLAB Coder 在编辑窗口中显示您的代码,并在下方列出就绪问题,标记使用了不支持代码生成的 imshow
函数。
更正就绪问题
解决就绪问题。从您的示例中删除对 imshow
和相关显示代码的调用。分段操作不需要显示语句。您可以直接在 MATLAB Coder 中编辑示例代码。删除相关代码后,点击 Save 保存您的编辑并重新运行就绪检查。重新运行就绪检查后,MATLAB Coder 显示 No issues found 消息。
定义函数输入的大小和数据类型
代码的每项输入都必须指定为具有固定大小、可变大小或常量。有几种方法可以指定输入参量的大小,但最简单的方法是为 MATLAB Coder 提供调用函数的示例。在文本输入字段中输入调用您的函数的脚本。对于此示例,请在 MATLAB 提示符下输入以下代码,然后按 Autodefine Input Types。
I = imread('cell.tif');
Iseg = detectCellsCodeGen(I);
有关定义输入的详细信息,请参阅 MATLAB Coder 文档。在 MATLAB Coder 返回输入类型定义后,点击 Next。
检查并解决运行时问题
即使您执行了 MATLAB Coder 就绪检查,在编译过程中仍可能出现阻止代码生成的其他问题。当就绪检查查看函数依存关系以确定就绪情况时,编译过程会检查编码模式。您可以使用您输入的相同代码来定义输入类型(已预加载到对话框中)。点击 Check for Issues。
此示例包含一个编译问题:它将 strel
对象数组传递给 imdilate
,而代码生成不支持对象数组。
解决标识的编译问题。对于此示例,请修改对 imdilate
的调用,以避免传递 strel
对象数组。将对 imdilate
的单次调用替换为对 imdilate
的两次单独调用,每次调用传递一个 strel 对象。
重新运行测试编译,以确保您的更改解决了该问题。点击 Check for Issues。MATLAB Coder 显示一条消息,声明没有检测到问题。
生成代码
您现在已准备好生成代码。点击 Next。
选择要生成的代码的类型,并选择目标平台。MATLAB Coder 可以生成 C 或 C++ 源代码、MEX 文件、静态库、共享库或独立的可执行文件。对于生产硬件,您可以从许多选项中进行选择,包括 ARM 和 Intel 处理器。
此示例使用默认选项。编译类型为 Source Code,语言为 C。对于设备选项,请指定某设备供应商的一个通用设备,并对设备类型指定一台 MATLAB 主机。当您选择 MATLAB 主机时,MATLAB Coder 会生成依赖于预编译的共享库的代码。Image Processing Toolbox 函数使用共享库来保持性能优化。
点击 Generate。
MATLAB Coder 会显示生成的代码。
点击 Next 完成该过程。MATLAB Coder 显示关于它所生成代码的信息。默认情况下,MATLAB Coder 在您的工作文件夹中创建一个 codegen
子文件夹,其中包含生成的输出。
另请参阅
codegen
(MATLAB Coder) | MATLAB Coder (MATLAB Coder)
相关主题
- 图像处理的代码生成
- 代码生成工作流 (MATLAB Coder)
- 使用 MATLAB Coder 生成 C 代码 (MATLAB Coder)
- 代码生成的输入类型设定 (MATLAB Coder)
- 支持代码生成的函数