摘要:在对粮虫图像处理过程中,介绍了Matlab图像处理工具箱中的函数,给出了图像处理 与分析的技术实现, 边缘检测及轮廓提取,
通过形态学方法进行图像特征抽取与分析,达到了比较好的效果.
关键词:粮虫图像 边缘处理 形态学变换 特征抽取
我国是农业大国,粮食产后储藏期间,储粮害虫造成的危害十分严重。并且,近年来储粮害虫的种类和密度呈上升趋势,致使储粮损失更加严重。为了有效防治害
虫,就要预测它们发生趋势﹑数量﹑种群动态及潜在为害,而且也要评估各项防治措施和策略所得到的不同预期结果。
我们以MATLAB
6.5为开发工具,总体框图如下,具体工作流程如下:CCD获取原始图像后,经阈值(由概率统计得到或者是经验阈值)使图像二值化快速判断该桢图像是否有
粮虫。若有粮虫,运用图像的边缘检测和轮廓提取及跟踪,得到粮虫的轮廓,进一步提取粮虫的各种参数,如面积,周长,复杂度等特征,并由系统本身的专家系统进行判断。检测完
毕后,给出仓内各种粮虫种类及密度,并提示相应的防治措施。
1 MATLAB的 图像处理工具概述
Matlab提供了20类图像处理函数,涵盖了图像处理的包括近期研究成果在内的几乎所有的技术方法,有图像处理工具箱函数在有噪和退化图像的恢复、图形
绘制、图形几何变换、图像增强、二值分析、小波分析和分形几何用于图像处理,灰度与二值图像的形态学运算;结构元素创建与处理;基于边缘的处理;色彩映射
表操作;色彩空间变换;图像类型与类型转换;以及图形用户界面设计等方面的工程实际应用。
2 应用MATLAB工具箱进行储粮害虫图像分析处理
2.1 用直方图均衡实现图像增强
当图像对比度较低,即灰度直方图分布区间较窄时,可用直方图均衡实现灰度分布区间展宽而达到图像增强的效果。
下面是实现的源程序及相关功能的注解:
%源程序:image1.m
clear,close
all %清除所有内存变量,图形窗口
A =
imread('rice.tif'); %将图像文件rice.tif的图像像素数据读人矩阵I
imshow(A) %显示图像A,图像对比度低,如图a
figure,
imhist(A) %在新图形窗口中显示图像A的直方图如图b。可以注意到图像亮度范围相当狭窄
A2=histeq(A); %对图像A做直方图均衡补偿
figure,
imshow(A2) %在新图形窗口中显示新图像A2,图c
figure,
imhist(A2) %在新图形窗口中显示图像A2直方图,如图d
图1 用直方图均衡实现图像增强
程序运行后,可得如图的对比图像。达到比较好的效果
2.2 图像的边缘检测及特征提取
图像的边缘是图像基本的特征之一。所谓边缘是指其周围像素灰度有阶跃性变化或屋顶变化的像素的集合。物体的边缘是由灰度的不连续性所致,因此考察图像每个
像素在某个邻域内灰度的变化,利用边缘邻近一阶或二阶方向导数变化规律即可检测图像边缘。特征在一定程度上可以反映昆虫的体型结构,如面积、周长、偏心
率、形状参数、孔洞数、欧拉数、圆形性、似圆度、球状性、叶状性等,特征的选择是图像识别的关键,对判别特征的选择采用特征值直接比较的方法,得到判别特
征为面积、偏心率和孔洞数。二叉分类法类似于传统的昆虫检索表的形式,即找出判别特征后,对不同的特征根据分类阈值按二分的方法进行分类;相似距离分类方
法是把待判图像与一个标准图像相比,看他们是否相同或相似,标准图像用样本图像特征向量的均值来表示。通过计算待判图像与标准图像之间的相似距离来对待判
图像进行分类。从而能更好的对储粮害虫图像进行处理和分析。下面是实现的源程序及相关功能的注解:
%源程序:image2.m
i=imread('rice.tif');BW1=edge(i,'log');imagesc(BW1,[0
1]); %如图1
i=imread('rice.tif');BW1=edge(i,'sobel');imagesc(BW1,[0
1]); %如图2
i=imread('rice.tif');BW1=edge(i,'roberts');imagesc(BW1,[0 1]);
%如图3
i=imread('rice.tif');BW1=edge(i,'canny');imagesc(BW1,[0
1]); %如图4
i=imread('rice.tif');BW1=edge(i,'prewitt');imagesc(BW1,[0
1]); %如图5
i=imread('rice.tif');BW1=edge(i,'zerocross');imagesc(BW1,[0 1]);
%如图6
i=imread('rice.tif');a=im2bw(i);total=bwarea(a); total
%计算粮虫图像的面积
i=imread('rice.tif');a=im2bw(i);total=bwperim(a) %计算粮虫图像的周长
i=imread('rice.tif');
a=im2bw(i);image(a);bweuler(a) %计算粮虫图像的欧拉数
i=imread('rice.tif');
a=im2bw(i);s=std2(a) %计算粮虫图像的方差
i=imread('rice.tif');
a=im2bw(i);m=mean2(a) %计算粮虫图像的均值
图2 图像的边缘检测方法比较
3 用形态学方法进行图像处理与分析
用形态学方法对灰度图像进行处理与分析的技术要点,即对灰度图像进行如下操作:去除图像的不均匀背景;用设置阈值的方法(thresholding)将结
果图像转换成二值图像;通过成分标记(components
labeling)返回图像中的目标对像属性,并计算目标对像的统计数字特征。
下面是实现的源程序及相关功能的注解:
%源程序:image3.m
a=imread('rice.tif');figure,imshow(a); %读取和显示灰度图rice.tif,图a
background=imopen(a,strel('disk',15));%
取半径为15的圆盘结构元素对图像用开运算估计背景
figure,imshow(
background); %显示背景图,图b
figure,surf(double(background(1:16:end,1:16:end))),zlim([0
255]); %显示背景的彩色表面,对16×16格取样,图c
b=imsubtract(a,background);figure,imshow(b) %从原图像中减去背景图像,并显示结果图d
d=imadjust(b,stretchlim(b),[0
1]);figure,imshow(d);%调节对比度,并显示结果图e
level=graythresh(d);bw=im2bw(d,level);figure,imshow(bw)
%转换成二值图像,图f
[labeled,numObjects]=bwlabel(bw,4); %成分标记
grain=imcrop(labeled)
%用鼠标选取实现交互式剪裁标成分的一部分
RGB_label=label2rgb(labeled,@spring,'c','shuffle');%
一个标记矩阵转换成一个RGB图像
figure,imshow(RGB_label); %显示RGB图像,图g
graindata=regionprops(labeled,'basic')
%为rice的每一经阈值处理
allgrains=[graindata.Area]
%点号存取graindata的所有元素的面积域并将该数据存入
max(allgrains) %找最大谷粒的大小
biggrain=find(allgrains==ans)
%使用find指令找出最大谷粒的成分标记
mean(allgrains) %求平均粒径
hist(allgrains,15)
%作包含15个方柱的显示谷粒大小分布的直方图,图h
图3 形态学方法
3 结束语
MATLAB具有强大的图像处理能力,有许多经典的图像处理方法,我们在粮虫图像增强处理过程中,在边缘的检测,以及特征的提取中,都取得了比较好的效
果,同时,我们用
形态学方法对图像处理,能很好的提取粮虫图像的特征参数,为我们
的判断、识别粮虫作了很好的准备,成效显著。
参考文献:
[1]张兆礼,
现代图像处理技术及MATLAB实现[M],人民邮电出版社,2001年
[2]章 毓晋,图像处理和分析[M],清华大学出版社,1999年
[3]崔屹.图像处理与
分析——数学形态学方法及其应用[M].北京:科学出版社,2000
[4]潘峰,
刘文予,朱光喜.MATLAB在图像处理与研究中的应用[J],计算机应用研究,1999,16(12):73-75.