VC++matlab混合编程快速提取数字图像特征值资料讲解_第1页
VC++matlab混合编程快速提取数字图像特征值资料讲解_第2页
VC++matlab混合编程快速提取数字图像特征值资料讲解_第3页
VC++matlab混合编程快速提取数字图像特征值资料讲解_第4页
VC++matlab混合编程快速提取数字图像特征值资料讲解_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Good is good, but better carries it.精益求精,善益求善。VC+matlab混合编程快速提取数字图像特征值-VC+/matlab混合编程快速提取数字图像特征值1、引言VC+是流行的通用程序设计语言,灵活高效,使用其MFC进行面向对象编程,可以快捷地完成windows风格的人机交互界面设计。matlab是一种数值计算能力很强的面向科学应用的软件,以矩阵为基本数据结构进行运算,语法简洁。matlab针对科学研究工作的实际需要,由各领域专家开发了若干工具箱(函数库),极大地方便了科研工作。在数字图像处理领域,其图像处理工具箱中现有200多个工具,可以实现大部分处理算

2、法。如果将VC与matlab优势结合,进行混合编程,可以大幅度提高编程效率而不失灵活性、可靠性。特征值的选择和提取是由图像分析过程中的一个主要环节,是实现图像理解的前提。matlab以矩阵为基本数据结构,对处理图像这种二维数据具有编程效率上的先天优势。在很多预处理算法日渐成熟的今天,我们希望用更简便的方法来实现图像特征值的提取,从而将研究重点放到图像分析和理解上。2、接口实现及相关函数介绍鉴于VC程序界面友好,通用性好,VC/matlab混合编程一般都采用从VC中调用matlab函数的方式。实现二者的结合有多种方法。本文采用matlab引擎的方法,这种方法的特点是操作简便,不需要进行过多的设置

3、和转换,也不需要对matlab的程序结构有较深研究,只要熟悉matlab工具箱中相关函数即可。缺点是工作环境内必须安装matlab环境,另外程序运行时会启动matlab进程,影响了速度。VC中调用matlab语言实现图像处理的示例程序如下(运行环境VC+6.0,matlat6.5):Engine*ep;/定义引掣指针if(!(ep=engOpen(NULL)exit(1);/打开引掣mxArray*input=NULL,*num=NULL;/mxArray是专用数据结构,必须用此结构与引掣区传递数据,这里定义二个数据input用来传递图像数据,num用来传递参数值constintdims2=G

4、etWidth(),GetHeight();/定义二维数组大小,即VC中像素区大小input=mxCreateNumericArray(2,dims,mxUINT8_CLASS,mxREAL);/建立相应大小数据区num=mxCreateDoubleMatrix(1,1,mxREAL);/单值参数也要定义成矩阵形式memcpy(mxGetPr(input),m_pData,high*wide*sizeof(byte);/将VC中数据赋值给matlab可识别的变量engPutVariable(ep,input,input);/放入引掣,准备调用matlab函数进行计算,并命以别名engPutVa

5、riable(ep,num,num);engEvalString(ep,input=im2bw(input,graythresh(input);/在引掣中执行matlab命令进行二值化engEvalString(ep,num=bwarea(input););/matlab函数计算面积大小input=engGetVariable(ep,input);num=engGetVariable(ep,num);/处理后结果出引掣double*result=mxGetPr(num);doublereal=result0;/得到面积值mxDestroyArray(input);mxDestroyArray(

6、num);/释放内存engClose(ep);/关闭引掣通过以上几句程序就实现了VC与matlab的交互。本方法的基本思想是:对于图像的读取、显示、储存等基本输入输出操作采用VC实现,完全采用VC界面,matlab完全在后台运行。在需要调用matlab函数进行图像处理时,将VC中的图像数据转换为matlab可识别的格式并装入引掣区,调用matlab的图像处理函数进行运算,并将结果转换后复制回VC。在进行下一步图像分析时,可利用VC的ODBC功能,将特征数据直接转入access等数据库中。以下介绍几个与特征提取密切相关的matlab函数,为简便起见,省略输入输出参数。带星号的函数为参考文献1所自

7、带,其非商业版本可以在该书网站免费下载。regionprops(),imfeature(),区域的特征度量.输出区域的若干特征值;mean2(),std2(),corr2()二维数组的摘要统计值:均值,标准差,相关系数;bwlabel()将二值化图像作区域标记,同时返回标记区域块数;fft2(),dct2(),快速傅立叶变换和离散余弦变换,可以求频域特征*statxture();纹理特征计算,返回平均值,标准差,平滑度,直方图偏斜度,均匀性,纹理熵;*invmoments()可计算出七个不变矩;*specxture()频谱特征,计算S(r)和S()*polyangles()计算多边形区域各顶点

8、内角值上述函数可以直接计算二十个左右特征值,另外通过这些值之间的运算,可以求出更多的值。3、实例介绍/input为灰度图像数据engEvalString(ep,num=statxture(input););/调用statxture计算灰度差分纹理值num=engGetVariable(ep,num);/提取计算结果,是包含七个值的数据结构double*result=mxGetPr(num);m_mean1=result0;/第一项,平均灰度m_std1=result1;/第二项,标准差(对比度m_smooth=result2;/第三项,平滑度m_tm=result3;/第四项,三阶矩m_asm

9、1=result4;/第五项,惯性矩(均衡度)m_ent1=result5;/第六项,熵/下面二值化计算形状特征engEvalString(ep,input=im2bw(input,graythresh(input);”);自动计算阈值进行二值化engEvalString(ep,input=bwareaopen(output,1500););形态学处理去除小面积区域engEvalString(ep,output=imfill(output,holes););填补最大面积区域内的空洞engEvalString(ep,output=bwlabel(output););/区域标记后再调用props/

10、以下调用matlab的regionprops求几何形状特征engEvalString(ep,a=regionprops(output,all);num=a.Area;);num=engGetVariable(ep,num);/获得面积值result=mxGetPr(num);m_area=result0;/面积值存入VC数据engEvalString(ep,num=a.Eccentricity;);num=engGetVariable(ep,num);/获得偏心率值result=mxGetPr(num);m_ecc=result0;/同理可求出长度,宽度值,质心坐标值,矩形度等若干特征值4、小结及讨论提取特征值前,要进行图像预处理,如图像增强及分割等,可以使用matlab的图像处理工具,快速实现相关功能。用matlab进行图像预处理,通常在1个子函数内就可全部完成,与VC相比大大节省了编程量,节约了时间,减少了出错的可能。matlab的工具箱是开放的系统,随版本升级也在不断扩充。使用者,完全可以根据需要自己开发相应的matlab不函数,加入自己的工具箱使用。对于指纹、车牌、人脸等特征的提取,均可根据各自不同的需要使用matlab技术进行图像预处理。使用混编要选择matlab中语法简单而功能强大的函数,对于涉及到人机交互及某些像素级的操

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论