基于OpenCV的图像处理系统设计与实现

2014-04-08 00:59马新明赵晓莉
河南农业大学学报 2014年1期
关键词:形态学图像处理函数

马新明,赵晓莉,时 雷,钱 诚

(1.河南农业大学信息与管理科学学院,河南 郑州 450002; 2.河南省粮食作物生理生态与遗传改良省部共建国家重点实验室培育基地,河南 郑州 450002)

数字图像是人们对客观景象、事物及人的思维、想象的一种描述和记录,是人类用以表达和传递信息的一种重要手段.人对外界信息的感知大约有70%是通过视觉系统,即以图像的形式获得的,且图像具有信息量大、直观等优点.随着科学技术的不断发展,图像处理技术已受到许多学科的重视,被广泛应用于机器视觉、生物医学、军事、卫星遥感、农业生产等众多领域.数字图像技术具有快速、可靠、无损坏、信息量大等优势,便于计算机处理和分析.目前国内外有很多关于图像处理的系统软件,如张红梅等[1]在Matlab环境下开发的图像处理系统,具有图像显示、图形绘制以及图像的处理等功能;张秀荣等[2]采用Win32环境程序,设计了一个可视化图像处理程序,实现了对图像的基本处理;朱明等[3]采用DSP+FPGA线性流水阵列结构,并结合大规模可编程逻辑阵列,实现了视频图像的采集和目标提取的视频数字图像处理系统;DAVID等[4]利用DSP并行处理方法,设计并开发了一个低成本的可伸缩并行图像处理系统,实现了数据本地和共享内存之间的传递.然而,由于各系统的应用目的和侧重点不同,其通用性存在一定的局限性,如系统界面交互性差,用户无法自主选取算法及参数的设定;对图像的像素、格式具有严格的要求;系统可扩展性、可移植性较差,等等.因此,在实际应用中,仍需根据客观需求开发适合某一领域的图像处理系统,不仅加大了工作量,也极大的浪费了人力、物力、时间及资金等资源.本研究在Visual C++编译环境下,采用MFC多文档结构,借助OpenCV计算机视觉库进行混合编程,旨在开发一个界面友好、方便用户自主选择图像处理方法、可移植的图像处理系统,并以冬小麦白粉病为例,利用该系统处理病害图像信息,进而为快速诊断作物病害种类,为用户提供辅助决策提供帮助,以降低病害对作物生产的影响.

1 系统总体设计

1.1系统框架结构

该系统由2大基本模块组成:主控模块和显示模块.主控模块负责系统整体的功能实现,接收用户命令、进行图像的处理计算[5,6]等,是整个系统的核心;显示模块即用户界面,负责用户与系统的交互、显示处理后的图像等.系统采用多文档结构,通过对话框操作实现用户的交互处理,用户在使用时不用考虑系统的内部设计及图像处理的原理,只需在用户界面选择所需要的菜单选项,或确定某些算法的参数,从而简化了系统操作的复杂性.

1.2系统功能

系统的基本功能包含文件的处理、图像点的处理、邻域处理、二值图像处理、形态学处理等.

1.2.1 文件处理 文件的处理包括打开、恢复图像,关闭、保存当前窗口及位图,将处理后的图像恢复为原始图像等功能.该系统支持读取多种格式的图像,包括DIB位图,JPEG,GIF,TIFF等.

1.2.2 点的处理 在对图像点的处理过程中,有几种常见的图像几何变换操作,如30°旋转、180°旋转、水平镜像、垂直镜像.此外,还可对图像进行灰阶变换、图像反相、图像直方图、直方图均衡化等基础的图像增强操作.

1.2.3 领域处理 领域处理是对图像空间域处理的总称,包含邻域平均法、Gauss滤波、中值滤波、Sobel算法、Laplace算法等,可对图像进行锐化和平滑处理,减小噪声,增强图像.

1.2.4 二值图像处理 用户选择某一阈值T,或取自适应阈值T,若像素灰度值小于T,则该像素值设为0,反之,像素值设为255,即将灰度图像转化为了2值(黑白)图像.外接矩形、最小面积矩形、轮廓跟踪、距离变换等实现了图像的形态检测、图像分割等功能.

1.2.5 形态学处理 形态学处理的基本思想是用具有一定形态的结构元素,来量度和提取图像中的对应形状,达到对图像分析和识别的目的.它主要包括4个基本运算(腐蚀、膨胀、开启和闭合),其不同的组合可以实现滤除噪声、目标检测、边界提取、区域填充等功能.

1.2.6 彩色图像处理 系统可以满足对不同颜色效果处理的需求,获取RGB,HSV,Lab颜色分量,同时还可以直接对彩色图像进行增强、边缘检测、分割等处理.

1.2.7 综合图像处理 系统可根据需要调整图像的大小.此外,该系统也添加了一些结合特定理论的图像处理方法,如分水岭算法、金字塔图像分割、形态学梯度等.

2 系统涉及的关键技术

2.1面向对象的设计方法

面向对象的设计和开发方法在软件领域是比较成熟的技术,其核心内容是以对象为主要研究内容,对象间通过消息相互作用,具有封装、继承等特性.面向对象的方法大大提高了代码的可重用性、可维护性和可扩展性.本系统以Microsoft Visual C++6.0为编译环境,采用MFC多文档结构设计,以方便图像的存放与处理.

2.2OpenCV计算机视觉库

OpenCV是一个开源的跨平台计算机视觉库[7,8],为图像处理、模式识别、物体跟踪、机器学习等提供了各种算法.OpenCV提供的高层函数可高效地解决计算机视觉中一些很复杂的问题,若没有高层函数,它提供的基本函数也足够为大多数计算机视觉问题创建一个完整的解决方案.

OpenCV主体分5个模块,其中4个模块如图1所示.CV模块包含基本的图像处理函数和高级计算机视觉算法;MLL模块是机器学习库,包含统计相关的分类和聚类工具;HighGUI模块包含图像和视频的输入/输出函数;CXCORE模块包含了OpenCV的基本数据结构和相关函数.此外,CvAux模块中存放一些即将被淘汰的和新出现的实验性的算法及函数.

图1 OpenCV模块示意图

3 系统实现

图像处理系统实现了对图像信息的快速、无损坏性提取,为后期需要的辅助决策提供了支持.以河南农业大学科教园区2013年采集的冬小麦白粉病叶片为例,对系统进行检测.系统框架采用Microsoft Visual C++中的MFC多文档结构,对图像的存放和处理则采用OpenCV函数,图像的显示采用位图信息实现.

3.1图像显示

为了提高该系统的普适性,采用设备无关位图DIB实现MFC模式下图像的显示.OpenCV中的IplImage结构与DIB像素具有相同的存储结构(如表1),因此,构造一个DIB位图信息就可以调用Windows API(应用程序编程接口)中的StretchDIBits函数,实现图像的显示.

表1 DIB位图参数与IplImage结构参数

StretchDIBits函数[9]将DIB矩形区域内像素使用的颜色数据拷贝到指定的目标矩形中,函数原型为:int StretchDIBits(HDC hdc,int XDest,int YDest,int nDestWidth,int nDestHeight,int XSrc,int Ysrc,int nSrcWidth,int nSrcHeight,CONST VOID*lpBits,CONST BITMAPINFO*lpBitsInfo,UINT iUsage,DWORD dwRop);若函数执行成功,那么返回值是拷贝的扫描线数目,反之是GDI_ERROR.

3.2图像输入输出

图像获取及图像处理后结果的显示可以采用OpenCV中的cvLoadImage、cvShowImage、cvSaveImage函数[7].函数cvLoadImage可以载入指定的图像文件,并返回指向该文件的指针,函数原型为:IplImage*cvLoadImage ( const char*filename, int iscolor);函数cvShowImage是在指定的窗口显示图像,函数原型为:void cvShowImage( const char*name, const CvArr*image );cvSaveImage函数用来保存IplImage类型的指针变量,其原型为:int cvSaveImage( const char*filename, const CvArr*image );其中cvShowImage和cvSaveImage函数中的image变量均为IplImage指针变量.当然,在图像保存结束后,需要销毁已创建的变量,以释放其占用的内存空间,而函数cvReleaseImage便可以起到这个作用,销毁已定义的IplImage指针变量.

根据该图像处理系统打开的冬小麦白粉病图像如图2所示.

3.3图像处理

图像处理涉及多种处理算法,根据处理的目的不同,分为增强、平滑、边缘检测、分割等,这些操作同样需要借助OpenCV函数.在此仅以形态学梯度算法为例,显示图像分割后的效果,如图3.

图2 图像处理系统展示

图3 形态学梯度算法分割效果图

void CVMFCView::OnErosion() //腐蚀

{

cvErode(workImg,workImg,0,1);

Invalidate();

}

void CVMFCView::OnDilation() //膨胀

{

cvDilate(workImg,workImg,0,1);

Invalidate();

}

void CVMFCView::OnGrads() //形态学梯度算法

{

IplImage*in;

IplImage*temp=NULL;

IplImage*out=NULL;

in=workImg;

temp=cvCreateImage(cvGetSize(in),

IPL_DEPTH_8U,workImg->nChannels);

out = cvCreateImage(cvGetSize(in),

IPL_DEPTH_8U,workImg->nChannels);

cvMorphologyEx(in,out,temp,0,CV_MOP_GRADIENT,1);

m_dibFlag=imageReplace(out,&workImg);

cvReleaseImage(&temp);

Invalidate();

}

4 结语与讨论

本研究开发的图像处理系统是基于VC++和OpenCV进行的设计与实现,在此过程中主要针对冬小麦白粉病图像进行了探索研究,发现构建的图像处理系统不仅有效地提高了作物图像处理的效率,而且为以后的图像识别创造了前提条件,同时也为专家决策提供了支持.此外,对于该系统的普适性发现,它不仅仅局限于作物图像处理,也可以延伸到其他图像类型,只要图像格式属于该系统可读取范围,就可以进行处理.系统操作简单,界面友好,交互性强,涵盖了图像处理的大量算法,可以满足对图像的基本处理要求,具有较强的可移植性与可扩展性.

参考文献:

[1]张红梅,张智高,华志强.基于MATLAB的图像处理系统的设计与实现[J].内蒙古民族大学学报:自然科学版,2009, 24(2) :151-153.

[2]张秀荣,孟和达来.数字图像处理系统的开发与研究[J].湖南师范大学:自然科学学报,2011, 34(6):35-39.

[3]朱 明,鲁剑锋.基于DSP+FPGA结构图像处理系统设计与实现[J].计算机测量与控制,2004, 12(9) :866-869.

[4]DAVID M H, SHIRISH P K, C ALLAN H. Low cost scaleable parallel image processing system [J]. Microprocessors and Microsystems, 2001, 25(3) :143-157.

[5]余松煜,周源华,张 瑞.数字图像处理[M].上海:上海交通大学出版社,2007.

[6]章毓晋.图像工程.上册图像处理 [M].北京:清华大学出版社,2006.

[7]BRADSKI G,KAEHLER A.学习OpenCV[M].于仕琪,刘瑞祯,译.北京:清华大学出版社, 2009.

[8]陈胜勇,刘 盛.基于OpenCV的计算机视觉技术实现[M].北京:科学出版社,2008.

[9]陈小平.DraWDib函数组在图形图象处理方面的应用[J].沈阳化工学院学报,2002, 16(1) :65-70.

猜你喜欢
形态学图像处理函数
二次函数
第3讲 “函数”复习精讲
二次函数
函数备考精讲
基于ARM嵌入式的关于图像处理的交通信号灯识别
基于图像处理的机器人精确抓取的设计与实现
机器学习在图像处理中的应用
基于图像处理的定位器坡度计算
医学微观形态学在教学改革中的应用分析
数学形态学滤波器在转子失衡识别中的应用