玉米病害图像分割系统开发
2014-10-22吴昂李艳玲何玉静王永田朱娟花
吴昂+李艳玲+何玉静+王永田+朱娟花
摘要:为了提高玉米病害叶片图像分割的准确性和设计相应的图像分割系统,采用迭代阈值分割算法和形态学中的开闭运算相结合的方法对玉米病害图像进行分割,使用VB和MATLAB的混合编程设计开发玉米病害图像分割系统。运行结果表明,该分割方法对玉米病害图像有很好的分割效果。
关键词:玉米病害;图像分割;阈值;图像识别
中图分类号:TP391.41;S435.13 文献标识码:A 文章编号:0439-8114(2014)17-4178-04
Developing Image Segmentation System of Maize Leaf Disease
WU Anga, LI Yan-lingb,HE Yu-jinga,WANG Yong-tiana,ZHU Juan-huaa
(a.Mechanical and Electrical Engineering College;
b.School of Information and Management Science,Henan Agricultural University,Zhengzhou 450002, China)
Abstract: In order to improve the accuracy of image segmentation of maize leaf disease and the method of iterative threshold segmentation and morphological opening and closing was proposed to develop the image segmentation system. The image segmentation system of maize disease was designed with mixed program of VB and MATLAB. The results showed that the segmentation method of maize disease image developed was good.
Key Words: maize leaf disease;image segmentation;threshold;image recognition
玉米病害是影响玉米产量的一个重要因素,区分玉米病害能帮助人们准确地识别玉米病害的种类,从而对症下药,保证玉米产量。为此,迫切需要开发一套玉米病害自动识别系统,对玉米病害的病种快速做出准确的判别,并给出科学的治疗措施,使农业生产者能够最大限度地减少病害造成的损失,并在一定程度上减少对消费者和环境的损害。玉米病害图像分割系统是玉米病害自动识别系统中的关键问题[1-7],为此,先提出一种迭代阈值分割算法和形态学上的闭开运算相结合的方法对玉米病害图像进行分割,取得了较好的分割效果,然后使用VB和MATLAB的混合编程进行玉米病害图像分割系统的设计与实现。
由于VB提供的计算机和绘图函数有限,MATLAB创建图像用户界面的能力相对较弱,因此用VB编写界面,用MATLAB作为后台运行程序,使两者相得益彰[4,5,8]。通过这种方法,可使VB的可视化界面和MATLAB强大的计算及绘图功能得以实现,从而提高编程的效率,缩短软件开发的周期。VB与MATLAB的接口,有一般动态链接库、DDE、OLE、ActiveX和COM组件等多种方法,由于COM组件在访问时,不用进行环境切换,可以完全脱离MATLAB环境,节省了运算时间和内存要求,因此使用COM组件技术作为VB和MATLAB的接口。
1 玉米病害图像分割算法
图像分割可分为基于阈值分割和基于区域的分割。基于阈值分割可分为全局阈值分割、局部阈值分割和动态阈值/自适应阈值分割。全局阈值分割选取的阈值仅与各个像素的灰度有关。有极小点阈值法、迭代阈值法、最优阈值法、Otsu阈值法、最大熵法、p参数法等。局部阈值选取的阈值与像素本身及其局部性质(如邻域的平均灰度)有关。动态阈值/自适应阈值选取的阈值不仅与局部性质有关,还与像素的位置有关[9,10]。
玉米病害图像由于病害种类多,而且病害种类不同,病害的大小、多少、深浅、发病部位差别很大,即使同一种病害,发病时间、发病程度不同,病害图像也有所不同。所以采用同一种分割方法分割所有的玉米病害图像效果不是很理想,需要再处理分割的二值图像,去除误分割。经过比较,采用迭代阈值法分割玉米病害图像,然后采用形态学的方法优化分割效果。
1.1 迭代阈值分割算法
迭代阈值算法如下:
1)求出图像的最大灰度值和最小灰度值,分别记为Max和Min,令初始阈值为T1=(Max+Min)/2;
2)根据阈值T1将图像分割为G1和G2两部分。分别求出G1和G2的平均灰度μ1和μ2:
μ1=■ini/■ni μ2=■ini /■ni,其中ni是灰度为i的像素个数;
3)计算新的阈值T1=(μ1+μ2)/2;
4)如果|T2-T1|≤T0(T0为事先给定的极小正数,此次取0.01),说明迭代前后两次的阈值相差不大,则迭代终止;否则令T1=T2,重复步骤(2)和(3)。最后的T2就是所求的阈值。
1.2 开运算和闭运算
开运算是指使用同一个结构元素对图像进行先腐蚀后膨胀的过程,它通常在需要消除小颗粒噪声和断开目标物之间粘连时使用。开运算的主要作用和腐蚀操作相比,具有消除噪声、在纤细点处分离物体和平滑较大物体的边界的同时并不会明显改变其面积的优点。
闭运算是指使用同一个结构元素对图像进行先膨胀后腐蚀的过程。主要用来填充物体内的细小空洞、连接邻近物体、平滑其边界的同时并不明显改变其面积。endprint
对分割得到的玉米病害二值图像采用线形结构元素进行闭合操作,填充空洞并连接断开的边界,再采用线性结构元素进行开运算去除噪声;然后采用方形结构元素进行闭和开操作,优化分割图像,产生较好的效果。
2 Matlab的COM Builder接口
Matlab COM Builder是Matlab提供的一个COM生成器,是一项比较复杂的技术。COM生成器为实现MATLAB独立应用程序提供了一个新的途径。它提供了简单、易用的图形化界面,把MATLAB的M函数文件自动、快速地转变为独立的进程内COM组件,这些组件作为独立使用的COM对象,以DLL(ActiveX DLL)形式被装入到客户的进程空间中,可以在任何支持COM的语言中直接引用这些组件对象。其工作原理是使用Matlab编译器把Matlab程序转换成C/C++程序,同时产生和COM有关的包装代码,之后调用外部编译器来产生COM对象[1]。
由于Matlab COM Builder是Matlab Compiler的扩展,因此在创建COM组件之前,应该先安装Matlab Compiler和Matlab COM Builder等模块,同时需要对Matlab Compiler进行必要的配置。配置方法为:首先打开Matlab,在Matlab的命令窗口中输入“mbuild –setup”,然后会出现选择编译器的对话框,对话框中列出所有计算机中已安装的各种C/C++编译器,用户根据需要自行选择一种并确认。之后就可以利用Maltab COM Builder来生成需要的组件了。
使用Matlab COM Builder编译COM组件一般包括以下4个步骤:
1)打开一个已经存在的工程,或者创建一个新的工程;
2)把需要的M程序加入工程;
3)对工程进行编译;
4)对产生的COM组件进行打包和发布。
3 玉米病害图像分割软件设计
首先利用Matlab COM Builder工具将所编写的图像分割算法的M函数文件转换为COM组件,生成的COM组件是以DLL的形式存在的,然后在VB语言中直接调用该组件。具体步骤包括编写M文件、生成COM组件、调用.DLL文件、设计窗体和编写代码。
3.1 M文件的编写
在MATLAB中编写玉米病害图像分割的M文件,主要包括迭代阈值分割算法的M文件和形态学上开运算和闭运算的M文件。篇幅有限仅给出迭代阈值分割算法的M文件程序如下:
Function result=iteration(filename)
Global result;
f=imread(filename);
f=rgb2gray(f);
f= double(medfilt2(f));
T=(min(f(:))+max(f(:)))/2;
done=false;
i=0;
while ~done
R1=find(f<=T);
R2=find(f>T);
Tnew=(mean(f(R1))+mean(f(R2)))/2
%为求2个灰度均值的平均值
done=abs(Tnew-T)<0.01
% abs为求绝对值
T=Tnew;
i=i+1;
end
f(R1)=0;
f(R2)=1;
result=f;
figure(1);
set(gcf,'Visible','off');
imshow(f);
title('迭代阈值二值化图像');
3.2 生成COM组件
运行Matlab,在命令行输入COMTOOL命令,打开COM生成器窗口。在“File”菜单下选择“New Project Settings”对话框,在“Component name”文本框中输入组件名称,组件以DLL文件存放。输入组件名之后,COM生成器自动在“class name”中输入与组件名相同的类名,用户也可以输入其他的组件名。对话框中的“Project version”文本框用来设置组件的版本号,默认值为1.0版本。对话框中的“Project directory”文本框用以在生成组件、编译和打包时,工程和相关文件的存放位置,默认位置在Matlab的work文件夹下。对话框中的“Compile code in”文本框用以设置最后编译时,生成C或C++代码。如果在M文件中包含Matlab句柄图形调用,则在“Compile options”中选择“Use Handle Graphics library”,使工程组件包含Matlab C/C++图像库。以上各项完成后,单击“OK”,用户建立的工程文件将以
创建工程之后,生成器主窗口的“Project”、“Build”、“Component”等3个菜单就变为可用。点击“Add File”按钮向工程中添加M文件,由于每次只能添加一个,所以多次操作将所用的M文件添加进去。添加完M文件后,点击“Build”下的“COM Object”选项来调用Matlab编译器进行编译,生成对象文件及输出文件.DLL,并将.DLL自动注册到系统中。当出现“Standalone DLL build complete”时,表明已经注册成功。用户在VB主界面上,由“工程”菜单项打开“引用”窗体,将发现已经有新生成的组件,用户选中该组件,单击“OK”按钮,将在Matlab中产生的组件.DLL引入VB。
3.3 VB中界面设计及代码编写
窗体菜单设计采用下拉式,共包括文件、图像预处理、图像分割和帮助4个主菜单,文件中包括打开、保存和退出子菜单,图像预处理包括灰度化和中值滤波子菜单;图像分割中包括迭代阈值分割和形态学处理子菜单;帮助菜单中是简单操作的说明。窗体中包括4个image对象,分别用来显示原图像、中值滤波图像、迭代阈值分割图像和形态学操作图像。一个通用对话框CommonDialog1用于文件的打开及保存。相关代码如下:
Public Filename As String
Private imag As process.processclass '定义类实例
'窗体装载时,创建新的类变量
Private Sub Form_Load()
Set imag = New process.processclass
End Sub
‘打开图像显示在Image1图像框中
Private Sub openfile_Click()
CommonDialog1.Filter = “(*.*)|*.*”
CommonDialog1.ShowOpen
Filename = CommonDialog1.Filename
Image1.Picture = LoadPicture(Filename)
End Sub
‘调用迭代阈值分割算法并显示分割图像在Image3中
Private Sub iteration_Click()
Call imag.iteration(1, result, Filename)
Image3.Picture = Clipboard.GetData()
End Sub
3.4 运行结果及分析
图1为以灰斑病图像为例的处理结果,包括原图像、中值滤波后的图像、迭代阈值分割后的图像和形态学处理图像。从图1中第3幅图像可以看出迭代阈值法分割出了二值图像,叶片病变部位和健康部位基本分开,但图像中有小的噪声,病变部位内部有小的空洞,还有一些误分割(边缘不连续)。图1中第4幅图像是采用形态学运算中的开运算和闭运算去噪、填充空洞和边缘连接后得到的图像,可以看出图像的噪声、空洞和断开的边缘基本去除。
4 小结
采用迭代阈值分割法对玉米病斑图像进行分割得到二值图像,然后使用形态学上的闭运算和开运算去除噪声、填充空洞和边缘连接;利用VB的可视化界面和Matlab强大的计算及绘图功能设计玉米病斑图像分割软件,大大提高了图像处理的操作性,且可脱离Matlab环境运行。运行结果表明,采用的迭代阈值分割算法和形态学上的闭开运算相结合的方法对玉米病害图像有很好的分割效果。该系统的开发对玉米病害图像自动识别系统的开发具有重要意义。
参考文献:
[1] 陈月华,胡晓光,张长利.基于机器视觉的小表害虫分割算法研究[J].农业工程学报,2007,23(12):187-19.
[2] 马 旭,齐 龙,张小超,等.基于模糊聚类的玉米大斑病害图像的分割技术[J].农机化研究,2008(12):24-26.
[3] 马晓丹,关海鸥,黄 燕.基于图像处理的玉米叶部染病程度的研究[J].农机化研究,2009,31(11):102-104.
[4] 刘新铭,项 伍,孟维娟.用VB实现MATLAB的图像处理功能[J].上海电机技术高等专科学校学报,2004,7(4):250-253.
[5] 胡江萍,谭跃刚.用VB与Matlab开发动态图像处理软件的方法[J].武汉理工大学学报(信息与管理工程版),2003,25(1):32-34.
[6] 马 骏,王建华.一种基于数学形态学的植物病虫识别方法[J].深圳大学学报理工版,2004,21(1):72-75.
[7] 毛罕平,张艳诚,胡 波.基于模糊C均值聚类的作物病害叶片图像分割方法研究[J].农业工程学报,2008,24(9):136-140.
[8] 崔彬彬,王汝霖,李春梅,等.基于VB与MATLAB的图像处理软件设计[J].微计算机信息,2006,22(30):260-262.
[9] 陈慧楠.玉米、黄瓜叶部病害的图像处理技术研究[D].沈阳:沈阳理工大学,2008.
[10] 赵玉霞,王克如,白中英,等.基于图像识别的玉米叶部病害诊断研究[J].中国农业科学,2007,40(4):698-703.endprint
3.3 VB中界面设计及代码编写
窗体菜单设计采用下拉式,共包括文件、图像预处理、图像分割和帮助4个主菜单,文件中包括打开、保存和退出子菜单,图像预处理包括灰度化和中值滤波子菜单;图像分割中包括迭代阈值分割和形态学处理子菜单;帮助菜单中是简单操作的说明。窗体中包括4个image对象,分别用来显示原图像、中值滤波图像、迭代阈值分割图像和形态学操作图像。一个通用对话框CommonDialog1用于文件的打开及保存。相关代码如下:
Public Filename As String
Private imag As process.processclass '定义类实例
'窗体装载时,创建新的类变量
Private Sub Form_Load()
Set imag = New process.processclass
End Sub
‘打开图像显示在Image1图像框中
Private Sub openfile_Click()
CommonDialog1.Filter = “(*.*)|*.*”
CommonDialog1.ShowOpen
Filename = CommonDialog1.Filename
Image1.Picture = LoadPicture(Filename)
End Sub
‘调用迭代阈值分割算法并显示分割图像在Image3中
Private Sub iteration_Click()
Call imag.iteration(1, result, Filename)
Image3.Picture = Clipboard.GetData()
End Sub
3.4 运行结果及分析
图1为以灰斑病图像为例的处理结果,包括原图像、中值滤波后的图像、迭代阈值分割后的图像和形态学处理图像。从图1中第3幅图像可以看出迭代阈值法分割出了二值图像,叶片病变部位和健康部位基本分开,但图像中有小的噪声,病变部位内部有小的空洞,还有一些误分割(边缘不连续)。图1中第4幅图像是采用形态学运算中的开运算和闭运算去噪、填充空洞和边缘连接后得到的图像,可以看出图像的噪声、空洞和断开的边缘基本去除。
4 小结
采用迭代阈值分割法对玉米病斑图像进行分割得到二值图像,然后使用形态学上的闭运算和开运算去除噪声、填充空洞和边缘连接;利用VB的可视化界面和Matlab强大的计算及绘图功能设计玉米病斑图像分割软件,大大提高了图像处理的操作性,且可脱离Matlab环境运行。运行结果表明,采用的迭代阈值分割算法和形态学上的闭开运算相结合的方法对玉米病害图像有很好的分割效果。该系统的开发对玉米病害图像自动识别系统的开发具有重要意义。
参考文献:
[1] 陈月华,胡晓光,张长利.基于机器视觉的小表害虫分割算法研究[J].农业工程学报,2007,23(12):187-19.
[2] 马 旭,齐 龙,张小超,等.基于模糊聚类的玉米大斑病害图像的分割技术[J].农机化研究,2008(12):24-26.
[3] 马晓丹,关海鸥,黄 燕.基于图像处理的玉米叶部染病程度的研究[J].农机化研究,2009,31(11):102-104.
[4] 刘新铭,项 伍,孟维娟.用VB实现MATLAB的图像处理功能[J].上海电机技术高等专科学校学报,2004,7(4):250-253.
[5] 胡江萍,谭跃刚.用VB与Matlab开发动态图像处理软件的方法[J].武汉理工大学学报(信息与管理工程版),2003,25(1):32-34.
[6] 马 骏,王建华.一种基于数学形态学的植物病虫识别方法[J].深圳大学学报理工版,2004,21(1):72-75.
[7] 毛罕平,张艳诚,胡 波.基于模糊C均值聚类的作物病害叶片图像分割方法研究[J].农业工程学报,2008,24(9):136-140.
[8] 崔彬彬,王汝霖,李春梅,等.基于VB与MATLAB的图像处理软件设计[J].微计算机信息,2006,22(30):260-262.
[9] 陈慧楠.玉米、黄瓜叶部病害的图像处理技术研究[D].沈阳:沈阳理工大学,2008.
[10] 赵玉霞,王克如,白中英,等.基于图像识别的玉米叶部病害诊断研究[J].中国农业科学,2007,40(4):698-703.endprint
3.3 VB中界面设计及代码编写
窗体菜单设计采用下拉式,共包括文件、图像预处理、图像分割和帮助4个主菜单,文件中包括打开、保存和退出子菜单,图像预处理包括灰度化和中值滤波子菜单;图像分割中包括迭代阈值分割和形态学处理子菜单;帮助菜单中是简单操作的说明。窗体中包括4个image对象,分别用来显示原图像、中值滤波图像、迭代阈值分割图像和形态学操作图像。一个通用对话框CommonDialog1用于文件的打开及保存。相关代码如下:
Public Filename As String
Private imag As process.processclass '定义类实例
'窗体装载时,创建新的类变量
Private Sub Form_Load()
Set imag = New process.processclass
End Sub
‘打开图像显示在Image1图像框中
Private Sub openfile_Click()
CommonDialog1.Filter = “(*.*)|*.*”
CommonDialog1.ShowOpen
Filename = CommonDialog1.Filename
Image1.Picture = LoadPicture(Filename)
End Sub
‘调用迭代阈值分割算法并显示分割图像在Image3中
Private Sub iteration_Click()
Call imag.iteration(1, result, Filename)
Image3.Picture = Clipboard.GetData()
End Sub
3.4 运行结果及分析
图1为以灰斑病图像为例的处理结果,包括原图像、中值滤波后的图像、迭代阈值分割后的图像和形态学处理图像。从图1中第3幅图像可以看出迭代阈值法分割出了二值图像,叶片病变部位和健康部位基本分开,但图像中有小的噪声,病变部位内部有小的空洞,还有一些误分割(边缘不连续)。图1中第4幅图像是采用形态学运算中的开运算和闭运算去噪、填充空洞和边缘连接后得到的图像,可以看出图像的噪声、空洞和断开的边缘基本去除。
4 小结
采用迭代阈值分割法对玉米病斑图像进行分割得到二值图像,然后使用形态学上的闭运算和开运算去除噪声、填充空洞和边缘连接;利用VB的可视化界面和Matlab强大的计算及绘图功能设计玉米病斑图像分割软件,大大提高了图像处理的操作性,且可脱离Matlab环境运行。运行结果表明,采用的迭代阈值分割算法和形态学上的闭开运算相结合的方法对玉米病害图像有很好的分割效果。该系统的开发对玉米病害图像自动识别系统的开发具有重要意义。
参考文献:
[1] 陈月华,胡晓光,张长利.基于机器视觉的小表害虫分割算法研究[J].农业工程学报,2007,23(12):187-19.
[2] 马 旭,齐 龙,张小超,等.基于模糊聚类的玉米大斑病害图像的分割技术[J].农机化研究,2008(12):24-26.
[3] 马晓丹,关海鸥,黄 燕.基于图像处理的玉米叶部染病程度的研究[J].农机化研究,2009,31(11):102-104.
[4] 刘新铭,项 伍,孟维娟.用VB实现MATLAB的图像处理功能[J].上海电机技术高等专科学校学报,2004,7(4):250-253.
[5] 胡江萍,谭跃刚.用VB与Matlab开发动态图像处理软件的方法[J].武汉理工大学学报(信息与管理工程版),2003,25(1):32-34.
[6] 马 骏,王建华.一种基于数学形态学的植物病虫识别方法[J].深圳大学学报理工版,2004,21(1):72-75.
[7] 毛罕平,张艳诚,胡 波.基于模糊C均值聚类的作物病害叶片图像分割方法研究[J].农业工程学报,2008,24(9):136-140.
[8] 崔彬彬,王汝霖,李春梅,等.基于VB与MATLAB的图像处理软件设计[J].微计算机信息,2006,22(30):260-262.
[9] 陈慧楠.玉米、黄瓜叶部病害的图像处理技术研究[D].沈阳:沈阳理工大学,2008.
[10] 赵玉霞,王克如,白中英,等.基于图像识别的玉米叶部病害诊断研究[J].中国农业科学,2007,40(4):698-703.endprint