- 背景介绍
- Matlab脚本生成
- 测试代码
- Image Region Analyzer
- 函数封装
- Matlab Coder
- 总结
本次使用Matlab工具Matlab coder 将Matlab下开发的代码转化为C++环境下代码,用于后续项目的开发,本次只是做一个简单的过程记录,内容仅供参考,有错误之处还望指出。
Matlab脚本生成在图像处理的过程中,我们需要对识别对象的一些特征进行分析与处理,本次使用Matlab工具集中的Image Region Analyzer用于特征的分析与处理:
在这里我们使用一个测试图片
首先我们需要对这张图片进行一些处理,虽然这张图看上去只有黑白两色,但其本质是三通道的彩图需要将其转化为灰度图进行后续的处理。在Matlab中处理过程如下:
- 图片信息读取 ;
- rgb2gray 彩图转灰度(如是灰度图该步可省略);
- imbinarize 二值化;
- imshow 显示;
%获取原始图片
Im_Input = imread('Test_Fig.jpg');
%彩图转灰度图
Im_Input_Gray = rgb2gray(Im_Input);
%二值化
BW = ~imbinarize(Im_Input_Gray);
%显示二值化之后的图片
imshow(BW);
运行完之后得到结果图
在二值化过程中,我们将我们关注的区域设置为白色,其他区域设置为黑色,此处根据需求自主进行调整即可。
我们得到三组变量,其中BW为我们本次主要处理的对象,其在Matlab中类型属于逻辑变量即非0则1。
在得到二值化图像之后,我们利用Matlab中Image Region Analyzer对区域的特征进行进一步的分析。
点击Load Image From Workspace 选择BW进行下一步分析;
点击OK
我们会得到四个区域,鼠标点击表格对应参数左边图片区域即可高亮,我们也可以选择更多的区域特征进行后续分析
在Filter中我们可以设置特征范围进行对应筛选,可以是面积、欧拉角等特征。
在Choose Properties模块中我们可以选择更多的特征,点击此处可以查看这些特征的具体的物理含义,本文中不过多赘述。
设置完成后,我们可以通过导出函数的方式,将目前的筛选过程生成脚本文件。
以最基础版的函数为例,我们用于生成C++代码。
function [properties] = CSDN_Code()
%获取原始图片
Im_Input = imread('Test_Fig.jpg');
%彩图转灰度图
Im_Input_Gray = rgb2gray(Im_Input);
%二值化
BW = ~imbinarize(Im_Input_Gray);
%显示二值化之后的图片
imshow(BW);
%调用特征提取函数
properties = regionprops(BW_out,'Area','Eccentricity','EquivDiameter', 'EulerNumber', 'MajorAxisLength', 'MinorAxisLength', 'Orientation', 'Perimeter');
简单的封装成函数形式即可。
Matlab Coder
进入界面后点击三个小点选择对应的函数文件,切记一定是函数脚本,完成后选择项目存放路径,点击Next即可
可能会出现不支持的警告,这是由于一些函数在Matlab中不支持Matlab Coder转化所导致的,一般通过Help 查看函数手册,其最后都会说明是否支持Matlab Coder。
本次使用过程中imshow()函数不支持转化,注释即可,不影响功能。
修改无误后点击Next选择函数的输入信息,可手动选择也可自动匹配,本次无输入信息,直接跳过该步骤即可,
选择需要转换的代码进行测试即可
运行无法通过会进行提示,本次在修改代码过程中,未对变量名称进行统一导致编译失败,修改名称即可。
如上图所示则编译无误,可以进行代码生成工作。
可根据个人需求进行设置的调整,本次由于功能简单,涉及内容相对较少,我将所有的功能函数放在一个文件内,可根据需求独立生成C++文件。设置完成后点击Next即可。
对输出语言与编译环境进行简单配置,根据需求自行修改即可,本次使用VS2017为例,点击Generate等待完成即可。
等待片刻后即可生成完成。
将对应的.cpp文件与.h文件可以单独拎出来,在VS中新建空项目补充即可,在运行过程中可能会出现部分头文件缺失,该类头文件属于Matlab自带的一些.h文件,在Matlab安装目录下查找对应文件,并将其复制到工程目录下即可完成编译。
至此完成Matlab代码到C++代码的转换,如有需求,在Matlab代码设计之初,我们需要尽可能多的去考虑那些函数支持转换,那些函数不支持转换,以及编程风格,最好提前为各个变量类型与大小进行定义,避免一些未知的错误。测试代码点击自取



