硕士文致谢模板并非原文

点赞:4793 浏览:16916 近期更新时间:2024-03-15 作者:网友分享原创网站原创

学士学位论文

题目基于机器视觉的次蛋无损检测研究姓名干能强学号20021103014专业机械设计制造及其自动化指导教师王巧华职称副教授

中国·武汉

二○○六年五月

目录

摘 要III

关 键 词III

AbstractIII

KeywordsIV

1前言1

1.1研究意义1

1.2国内外研究概况1

1.2.1灯光鉴别1

1.2.2打开鉴别2

1.2.2.1颜色鉴别2

1.2.2.2性状鉴别2

1.2.2.3气味鉴别2

1.2.3利用声学特性的无损检测2

1.2.4基于机器视觉的无损检测2

1.2.5其他新检测技术3

1.3研究的内容和目标3

1.4研究的总体方案3

2鸡蛋无损检测研究3

2.1实验材料3

2.2实验装置3

2.3实验步骤4

2.4试验结果4

3图像的前期处理5

3.1图像的输入,输出5

3.1.1图像的输入5

3.1.2图像的输出5

3.2图像的剪切6

3.3图像类型及其相互转换6

3.3.1真彩像7

3.3.2索引像7

3.3.3灰度图像7

3.3.4二值图像8

3.3.5图像类型之间的转换8

3.3.5.1真彩像到灰度图像的转换8

3.3.5.2真彩像与灰度图像到二值图像的转换8

3.4图像的灰度直方图9

4图像的进一步处理10

4.1平滑滤波10

4.1.1线性滤波10

4.1.2中值滤波10

4.1.3自适应滤波11

4.2强度调整12

4.2.1灰度调整12

4.2.2直方均衡化13

4.3去除背景的影响13

4.4图像边缘检测14

4.4.1边缘检测算子14

4.4.1.1Robert算子14

4.4.1.2Sobel算子和Prewitt算子14

4.4.1.3Krisch算子15

4.4.1.4Laplacian算子15

4.4.1.5Canny算子15

4.4.1.6LoG(LaplacianofGaussian)算子15

4.4.2边缘检测的MATLAB实现16

5新鲜蛋和散黄蛋或贴壳蛋检测模型的建立17

5.1图像的灰度直方图17

5.1.1直方图的性质17

5.1.2MATLAB的直方图技术17

5.1.3对比新鲜蛋和散黄蛋或贴壳蛋的灰度直方图17

5.2确定图像R分量灰度图特征区域像素点与鸡蛋总像素点的比例19

5.2.1流程控制语句20

5.2.1.1for循环20

5.2.1.2If-Else-End结构20

5.2.2MATLAB的程序实现20

5.3建立检测模型23

5.3.1检测结果对话框的创建23

5.3.2模型建立基本思路23

5.3.3检测程序23

6模型可靠性检验25

7检测模型GUI界面的设计25

8对鸡蛋检测模型的建立的进一步思考26

8.1指定区域26

8.2计算气室面积与鸡蛋总面积的比例27

9结论与分析28

9.1结论分析28

9.2存在的不足28

9.3展望29

黄面积的二分之一以上,有圆形黑影(胚胎).

将鲜蛋打开,将其内容物置于玻璃平皿或瓷碟上,观察蛋黄与蛋清的颜色,稠度,性状蛋黄,蛋清色泽分明,无异常颜色蛋黄颜色变浅,色泽分布不均匀,有较大的环状或网状血红色,蛋壳内壁有黄中带黑的粘痕或霉点,蛋清与蛋黄混杂蛋黄呈圆形凸起而完整,并带有韧性,蛋清浓厚,稀稠分明,系带粗白而有韧性,并紧贴蛋黄的两端.蛋黄扩大,扁平,蛋黄膜增厚发白,蛋清变得稀薄,蛋壳内壁有蛋黄的粘连痕迹,蛋清与蛋黄相混杂(蛋无异味).具有鲜蛋的正常气味,无异味有臭味,霉变味或其他不良气味Cho利用声学响应系统,进行检测蛋壳裂纹试验,测量蛋壳反应信号,使用多线回归分析研制了5变量模型用来鉴别破损蛋,破损蛋误检率为6%,蛋壳为4%,检测系统速率为5个/s,通过研究鸭蛋破损蛋壳和未破损蛋壳的声学特性,设计的鸭蛋破损系统,在500—6500Hz的频率为400—5500Hz的条件下,其蛋壳检测准确率为85%,损蛋壳检测准确率为90%.

1.2.4基于机器视觉的无损检测

机器视觉技术是计算机,光学,数学,信息论,模式识别,数学形态学,人工智能,CCD技术,数字图象处理等众多学科交叉综合的一门学科.

国内外很多学者对机器视觉在农产品检测中的应用进行了大量研究.刘燕德,乔振先(2002)利用数理统计与回归处理,深入研究了透射率与波长的相互关系,并进行了透射率与波长的光谱特性曲线分析,同时对透射率与储存时间的变化进行分析,再对透射率与鸡蛋新鲜度进行分析,得出在波长463nm处鸡蛋新鲜度具有良好分辨率,准确度达87.4%.孙明(2002)等人采用MATLAB软件开发平台来构造基于计算机视觉的大米垩白检测算法.在对不同的大米图象处理基础上,完成了对大米垩白粒率和垩白参数垩白度的测定.实验中,对CCD摄象机所拍摄的真彩象进行灰度化处理,再对其滤波,通过灰度直方图统计,找出用法阈值化处理的阈值,把大米区域从背景中分离出来,然后计算垩白度和垩白粒率.此方法利用MATLAB的图象处理算法函数,算法可靠,实现方便.谢立,王永强等人(2005)利用图象的灰度特征,对灰度直方图进行平滑,平滑方法包括曲线拟合法和插值法,以对半透明产品进行识别.他们通过在灰度曲线两个波谷间找到目标波峰,并与设定的阈值比较,即可完成目标的识别.

Shearen(1990)提出利用机器视觉对新鲜市售圆椒进行颜色分级的新方法.首先将圆椒置于透明管中,用彩色CCD摄象机从六个角度拍摄其彩色数字图象,然后读取图象的RGB值,通过与标准的RGB之间的运算关系得出图象的RGB值,再在色度坐标中与色调H相匹配,根据H值及其频率分布判断圆椒的颜色类别,正确率达96%.

1.2.5其他新检测技术

经过研究表明:超弱发光与生命活动过程密切相关,它是普遍存在于生物有机体内的一种极其微弱的光辐射,与否与发光强度有很大关系.

赵红霞等人(2004)使用超弱发光图象探测系统研究了鸡蛋在储藏期中的发光情况,发现不同鸡蛋的发光强度在第三天达到最大,随后出现振荡衰减,说明第三天鸡蛋活性最强,对鸡蛋延迟发光进行研究,发现普遍服从双曲衰减规律,这一点与生物光子的相干理论相一致.不同鸡蛋的超弱发光强度是不同的,这与鸡蛋生命活动的强弱有关,生命力越旺盛的鸡蛋发光也就越强.

1.3研究的内容和目标

每天对鸡蛋进行图形拍摄,观察拍摄到的图像发现,鸡蛋随着存放时间的增长,鸡蛋图形的红色部分与白色部分的比例减小,并且偏向一边,如前所述,鸡蛋随存放时间的增长,气室会逐渐变大,这和得到的图象是一致的,说明实验的准确性.因此,可以用其作为鉴别新鲜蛋与散黄蛋或贴壳蛋的指标.但是,直接算出气室面积与整个鸡蛋面积并不容易.为此,需要换种思路去思考.可将鸡蛋是否新鲜与颜色特征值联系起来,常见的颜色模型有RGB模型和HIS模型.但是思考鸡蛋气室之外的红色区域,可以想到RGB模型中的R分量.在鸡蛋中,红色区域面积越大,则R分量越大.因此,本研究可以采用RGB模型中的R分量作为图形特征.

此类研究的目标是探索用机器视觉检测技术来建立检测模型新方法.利用RGB模型中的R分量作为特征参数,虽然依据不是很充分,是一种试探性的做法,但对无损检测具有指导意义.鉴于软件利用MATLAB进行图像处理,在图像处理,分析与统计上的强大功能,但其用在鸡蛋无损检测上还不多见,因此本课题提出以MATLAB为工具,对进行检测的鸡蛋图像进行相关的图像处理,去处图像中不利的噪声,背景,再进行颜色特征值的提取,建立相关的检测模型,从而完成以下研究内容:

(1)实验拍摄鸡蛋图像,

(2)利用MATLAB软件进行图像处理,

(3)建立鸡蛋新鲜与否与所得特征值数据的联系,

(4)建立自动检测新鲜蛋与散黄蛋或贴壳蛋的识别模式.

1.4研究的总体方案

本试验的目标是对鸡蛋进行基于MATLAB的无损检测,所以本研究的方案如下:

(1)用CCD拍摄鸡蛋的图像,

(2)对鸡蛋图像进行预处理,以便建立鸡蛋的检测模型,

(3)提取鸡蛋的颜色特征值,即R,G,B值,并观察新鲜蛋和散黄蛋或贴壳蛋的差别,

(4)根据差别建立检测模型,并对鸡蛋进行检测.

2鸡蛋无损检测研究

2.1实验材料

湖北省武汉市九峰乡新跃养鸡场刚产下的190枚新鲜鸡蛋.为了使实验所得图像不受鸡蛋外壳颜色的影响,鸡蛋都为青壳蛋,而且鸡蛋的大小基本一致.

2.2实验装置

根据图像采集系统的原理建立简易的试验装置和处理系统.机器视觉中,图像的获取主要由光照系统,摄像机和图像采集卡等器件完成.实验设备包括:CCD摄像头,钠光源,普通灯泡补光,暗室,计算机和图像采集卡组成.实验简图如图2-1所示.

图2-1实验装置简图

光照系统对图像的影响十分大,不合理的光照会使检测对象的某些检测部位处于阴影中,而且光照的角度,强度以及物体的反射光等因素的变化,均可能使目标图像的颜色失真.因此光照条件相当重要.本实验采用钠光源,并用普通光源进行补光,调整到适当的角度,可使图像较好.

2.3实验步骤

MATLAB是一种基于向量的高级程序语言,从本质上提供了对图像的支持,使用MATLAB可以对由数字图像形成的离散数据进行一次性处理,较其它标量语言而言,有着明显的优势(王小红,2000).在本试验中,对待拍摄的鸡蛋进行编号,从1—190,每天用CCD摄像头对鸡蛋进行图像拍摄,而且拍摄条件要完全一致.其后按编号从1号鸡蛋开始每天敲开5个鸡蛋,以观察鸡蛋散黄或贴壳与否,并做记录.拍摄完成后,将鸡蛋存放在温度为30℃的温室内.用流程图表示如下:

提取颜色特征值并进行分析用MATLAB软件进行程序编制对鸡蛋进行检测拍摄鸡蛋图片

调整CCD摄像头和光源

图2-2试验流程图

2.4试验结果

经图像拍摄后,得出鸡蛋图像若干:

图2-3CCD拍摄所得鸡蛋图像

3图像的前期处理

3.1图像的输入,输出

3.1.1图像的输入

MATLAB支持的图像文件格式有*.cur,*.bmp,*.hdf,*.ico,*.jpg,*.pcx,*.png,*.tif和*.xwd.

MATLABimread函数读取各种图像文件.

语法格式:

a等于imread(filename,fmt),其中参数fmt指定了图像的格式,可选的值为cur,bmp,hdf,ico,jpg,pcx,png,tifxwd,图形格式也可以和文件名写在一起,即filename.fmt,默认文件目录为当前MATLAB的工作目录.

读取一幅鸡蛋图像:

A等于imread('NO*.BMP'),

MATLAB用imwrite函数实现图形的写入.

语法格式:

imwrite(A,filename,fmt),

存入一幅鸡蛋图像:

imwrite(a,'NO*.bmp'),%以文件名NO*保存一幅bmp图像

3.1.2图像的输出

image是MATLAB本身提供的最原始的图像显示函数.

语法格式:

image(X),

imshow函数是最常用的显示各种图像的函数.

语法格式:

imshow(i,n),imshow(bw),%显示二值图像

imshow(x,map),%显示索引图像

imshow(RGB),%显示真色彩图像

显示一幅鸡蛋图像,程序为:

clearall,

closeall,

b等于imread('banana01.jpg'),

imshow(b)

imcrop,用于剪切图像中的一个矩形子图,用户可以通过参数知道这个矩形顶点的坐标,也可用鼠标指针选取这个矩形.

imcrop语法格式为:

I等于imcrop(I)

X等于imcrop(X,map)

RGB等于imcrop(RGB)

I等于imcrop(I,rect)

X等于imcrop(X,map,rect)

RGB等于imcrop(RGB,rect)

[等]等于imcrop(x,y,等)

[A,rect]等于imcrop(等)

[x,y,A,rect]等于imcrop(等)

I等于imcrop(I)X等于imcrop(X,map)RGB等于imcrop(RGB)I等于imcrop(X,map,rect)RGB等于imcrop(RGB,rect)按指定的矩形框rect剪切图像,rect是一个四元向量[xminyminwidthheight],分别表示矩形的左下角的坐标和长度及宽度.[等]等于imcrop(x,y,等)(x,y)[A,rect]等于imcrop(等)[x,y,A,rect]等于imcrop(等)在用户交互剪切图像的同时返回剪切框的参数rect.

剪切图像的程序如下:

clearall,

closeall,

a等于imread('散黄蛋\NO190.bmp'),

b等于imcrop(a,[12585100100]),

subplot(1,2,1),imshow(a)

subplot(1,2,2),imshow(b)

MATLAB中的数字图像是由一个或多个矩阵表示的,矩阵可以是实数,也可以使复数.这意味着MATLAB强大的矩阵运算用于图像处理非常合适,矩阵运算对MATLAB中的数字图像同样适用.

在MATLAB图像处理中存在unit8与double两种图像数据类型,所以在使用工具箱函数时要按照函数要求输入的参数类型传递参数.而且由于unit8与double两种类型数据的值域不同,使用时还要注意输出数据值域的转换.图像类型是指图像在MATLAB数据文件中的存储方式.MATLAB图像处理工具箱支持四种图像类型,即真彩像,索引像,灰度图象,二值图像.

3.3.1真彩像

真彩像又称RGB图像,它是利用R,G,B3个分量表示一个像素的颜色,R,G,Bm×n×3的多维数组.如果需要知道图形A中(x,y)x,y,1:3)MATLAB中的索引像包含两个结构,一个是调色板,一个是图像数据矩阵.调色板时一个m×3的色彩映射矩阵,矩阵的每一行都代表一种色彩,与真彩像相同,通过3个分别代表红,绿,蓝颜色强度的双精度数,形成一种特定的颜色.调色板矩阵每个元素的值可以是在[0,1]之间的双精度浮点数.

索引像数据矩阵的类型可以是double型或者是unit8型.图像矩阵和调色板序号之间的关系取决于图像矩阵的类型,当图像矩阵为double型时,值1代表调色板中的第一行,值2代表第二行,依次类推,当图像数据是unit8型时,0代表调色板的第一行,1代表第二行,依次类推.调色板通常和索引像存在在一起,当读入图像时,MATLAB同时加载调色板和图像.

默认情况下,调用调色板会产生一个64×3的调色板,当然,用户也可以制定调色板的大小.如hot(m)会产生一个m×3的调色板,其颜色范围从黑经过红,橘红,黄到白.

3.3.3灰度图像

灰度图象就是只有强度信息,而没有颜色的图像,它在早期的图像处理中占有很重要的地位.存储灰度图像只需要一个数据矩阵,矩阵的每个元素表示对应位置的像素的灰度值.灰度图像的数据类型可以是double型,这时值域为[0,1],也可以是unit8型,值域为[0,255].

尽管灰度图象从来不和调色板一起存储,但是MATLAB还是要利用调色板来显示灰度图象.

3.3.4二值图像

二值图像就是只有黑白两种值的图像,我们可以把它看作是特殊的灰度图象.二值图像只需一个数据矩阵来存储,每个像素只取0或者1.二值图像可以采用unit8或double类型存储,但是由于unit8类型节省空间,通常都使用unit8类型.

MATLAB图像处理工具箱返回二值图像的函数都把返回结果作为unit8类型的逻辑矩阵,并用一个逻辑标志来表示值域范围.如果逻辑标志为真,则返回结果为[0,1].如果逻辑结果为检测,返回结果为[0,255].

3.3.5图像类型之间的转换

在有些图像操作中,需要对图像的类型进行转换.比如要对一幅索引像滤波,首先应该将它转换为真彩像或者灰度图像,这时MATLAB将会对图像的灰度进行滤波,这正是通常意义上的滤波如果不将索引像进行转换,MATLAB则对图像调色板的序号进行滤波,这是没有意义的.下面介绍一些类型转换函数.

3.3.5.1真彩像到灰度图像的转换

MATLAB用rgb2gray函数实现彩像到灰度图像的转换.

语法格式:

i等于rgb2gray(RGB),

MATLAB提供im2bw函数实现二值图像转换.

语法格式:

bw等于im2bw(RGB),或bw等于im2bw(gray),

下面的程序可以实现把真彩形变换成二值图像:

clearall,

closeall,

a等于imread('散黄蛋\NO190.bmp'),

b等于imcrop(a,[12585100100]),

bw1等于im2bw(b,0.42),bw2等于im2bw(b,0.6),%阈值为0.6

subplot(1,2,1),imshow(bw1)

subplot(1,2,2),imshow(bw2)

程序运行后,结果如图3-3所示.

图3-3在阈值分别为0.42或0.6时,将真彩像转换为二值图像

从所得的图像可以看出,当阈值为0.42时,图像最接近原图.

3.4图像的灰度直方图

图像的灰度图是图像的重要统计特征,它可以认为是图像灰度密度函数的近似.按照随机过程理论,图形可以看作是一个随机场,因此具有相应的统计特征,其中最重要的是灰度密度函数.MATLAB中有imhist函数来实现显示灰度直方图.

语法格式:a等于imread('NO*.bmp'),

imhist(a)

下面的程序可显示图像RGB分量的灰度图:

clearall,

closeall,

a等于imread('散黄蛋\NO190.bmp'),

b等于imcrop(a,[12585100100]),

R等于a(:,:,1),

G等于a(:,:,2),

B等于a(:,:,3),

subplot(2,2,1),imshow(b)

subplot(2,2,2),imhist(R)

subplot(2,2,3),imhist(G)

subplot(2,2,4),imhist(B)MATLAB图像处理工具箱提供了多种去除噪声的方法,共有下列三种:线性滤波,中值滤波和自适应滤波.

4.1.1线性滤波

对一些图像进行线性滤波可以去除图像中某些类型的噪声,如采用领域平均法的均值滤波器就非常适用于去除通过扫描得到的图像中的颗粒噪声.

语法格式:

b等于conv2(a,h),%其中a为添加均值为0,方差为0.02的高斯噪声,h为滤波模版

4.1.2中值滤波

中值滤波是抑制噪声的非线性处理方法,图像中滤波后某像素的输出等于该像素领域中各像素灰度的中值.中值滤波的方法运算简单,易于实现,而且能较好的保护边界,但有时会失掉图像中的细线和小块的目标区域.

一维信号中值滤波具有如下重要性质:(1)输入时阶跃信号或斜坡信号时,输出信号和输入信号相同,(2)若输入是脉宽小于窗口一半的脉冲p,则该脉冲被滤除,否则输入与输出相同,(3)输入是三角形信号时,输出时其顶部被削平.

语法格式:

b等于medfilt(a),

下面的程序可以实现对鸡蛋图像的R,G,Ba等于imread('散黄蛋\NO190.bmp'),

b等于imcrop(a,[12585100100]),

R等于b(:,:,1),

G等于b(:,:,2),

B等于b(:,:,3),

R等于medfilt2(R),

G等于medfilt2(G),

B等于medfilt2(B),

c(:,:,1)等于R,

c(:,:,2)等于G,

c(:,:,3)等于B,

subplot(2,2,1),imshow(R)

subplot(2,2,2),imshow(G)

subplot(2,2,3),imshow(B)

subplot(2,2,4),imshow(c)

运行结果如图4-1所示.

注:从左至右,自上而下为鸡蛋R,G,B分量经中值滤波后的图像及R,G,B合成以后的图像

图4-1鸡蛋图像经中值滤波后的图像

4.1.3自适应滤波

MATLAB图像处理工具箱中的wiener2函数可以实现图像噪声的自适应滤波.Wiener2函数根据图像的局部方差来调整滤波器的输出,当局部方差大时,滤波器的平滑效果较小,滤波器平滑效果强.

Wiener2函数提供的自适应滤波通常比线性滤波的效果好,它比相应的线性滤波器具有更好的选择性,可以更好的保存图像的边缘和高频细节信息.另外,使用起来非常方便,wiener2函数同时计算出滤波器的参数,并对图像进行绿波计算,而且wiener2函数并不比线性滤波需要更多的计算时间.

语法格式:

I等于wiener2(a),

下面的程序实现对鸡蛋图像的R,G,Ba等于imread('散黄蛋\NO190.bmp'),

b等于imcrop(a,[12585100100]),

R等于b(:,:,1),

G等于b(:,:,2),

B等于b(:,:,3),

R等于wiener2(R),

G等于wiener2(G),

B等于wiener2(B),

c(:,:,1)等于R,

c(:,:,2)等于G,

c(:,:,3)等于B,

subplot(2,2,1),imshow(R)

subplot(2,2,2),imshow(G)

subplot(2,2,3),imshow(B)

subplot(2,2,4),imshow(c)

图4-2为程序运行以后的结果.

注:从左至右,自上而下为鸡蛋R,G,B分量经自适应滤波后的图像及R,G,B合成以后的图像

图4-2鸡蛋图像经自适应滤波后的图像

鉴于自适应滤波的优点,即可以更好的保存图像的边缘和高频细节信息,而且从中值滤波和自适应滤波所得的图像可以看出,自适应滤波保存鸡蛋的边缘比较清晰,因此在本论文中都采用自适应滤波.

4.2强度调整

灰度调整场用于调整图像质量,如增强信号和噪声比率,或通过改变颜色或灰度,使图像的某些特征更容易识别.

4.2.1灰度调整

灰度调整饰一种图像增强技术,它将图像的灰度值映射到一个新的范围.它可以使灰度动态范围扩展,也可以使其压缩,或者是对图像进行分段处理,根据图像特点和要求在某段区间中进行压缩而在另外区间中进行扩展.MATLAB工具箱中提供的imadjust函数,可以实现上述的线性变换对比度增强.

语法格式:

b等于imadjust(a,[lowhigh],[bottomtop],gamma),

该函数将图像的Low映射到bottom,high映射到top,缺省情况下,位于low和high之间的值线性映射到bottom和top之间.调用imadjust函数还可以为其指定称为Y因子的附加参数以进行输出图像校正.

使用imadjust可以调整图像的对比度,通过不同Y值的选择可以调整变换后图像的整体亮度(见图2-8).

Y等于1Y>,1Y<,1

图4-3不同Y值的选择图像的整体亮度也不同

下面为对一幅图像进行灰度调整的程序:

clearall,

closeall,

a等于imread('散黄蛋\NO190.bmp'),

b等于imcrop(a,[12585100100]),

c等于imadjust(b,[0.30.7],[]),

subplot(1,2,1),imshow(b)

subplot(1,2,2),imshow(c)

histeq函数用一个有64个条块的直方图进行匹配.

语法格式:

J等于histeq(I),

图像进行直方图均衡化后,直方图的其强度分布均匀,但整体图像强度值偏高,不利于进行颜色提取,因此在本论文中图像不参与直方均衡化.

4.3去除背景的影响

在图像处理中,由于实验条件的制约,拍摄的条件有所变动,造成实验误差,为了尽可能减少实验误差,最好将背景去除.为此将鸡蛋以外的区域都取为黑色,即在背景上的R,G,B[mn]等于size(a)实现.

具体的程序如下:

clearall,

closeall,

a等于imread('散黄蛋\NO190.bmp'),

b等于imcrop(a,[12585100100]),

c等于im2bw(b,0.42),

R等于b(:,:,1),

G等于b(:,:,2),

B等于b(:,:,3),

R等于wiener2(R1),

G等于wiener2(G1),

B等于wiener2(B1),

R等于imadjust(R1,[0.30.7],[]),

G等于imadjust(G1,[0.30.7],[]),

B等于imadjust(B1,[0.30.7],[]),

form等于1:101,

forn等于1:101,

ifc(m,n)等于等于0,

R(m,n)等于0,

G(m,n)等于0,

B(m,n)等于0,

elseR(m,n)等于R(m,n),

G(m,n)等于G(m,n),

B(m,n)等于B(m,n),

end

end

end

d(:,:,1)等于R,

d(:,:,2)等于G,

d(:,:,3)等于B,

subplot(1,2,1),imshow(b)

subplot(1,2,2),imshow(d)

图4-5为鸡蛋原图像及其去除背景以后的图形.

图4-5鸡蛋原图像及其去除背景以后的图像

4.4图像边缘检测

边缘检测技术对于处理数字图像非常重要,因为边缘是所要提取目标和背景的分界线,提取出边缘才能将目标和背景分开.在图像中,边界表明一个特征区域的终结和另一个特征区域的开始,边界所分开区域的内部特征或属性是不同的,边缘的检测正是利用物体和背景在某种图形特征上的差异来实现的,这些差异包括灰度,颜色或者纹理特征.边缘检测实际上就是检测图像特征发生变化的位置.

由于噪声和模糊的存在,监测到的边界可能会变宽或在某些点处发生间断,因此,边界检测包含两个基本内容:首先抽取出反映灰度变化的边缘点,然后剔除某些边界点或填补边界检断点,并将这些边缘点连接成完整的线.

4.4.1边缘检测算子

4.4.1.1Robert算子

Robert算子是2×2算子,利用局部差分算子寻找边缘,计算沿45o方向的一阶差分.图像的梯度为两个45o方向的梯度向量和,直接计算图像差分,不包含平滑,故不能抑制噪声,对具有陡峭的低噪声图像响应最好.它是一种利用局部差分算子寻找边缘的算子:

其中,f(x,y)是具有整数像素坐标的输入图像,平方根运算使该处理类似于在人类视觉系统中发生的过程.

4.4.1.2Sobel算子和Prewitt算子

Sobel算子和Prewitt算子为在检测边缘的同时减少噪声的影响,Prewitt从加大边缘检测算子的模板大小出发,由2×2扩大到3×3来计算差分算子,如图3-14(a)所示.采用Prewitt算子不仅能检测边缘点,而且能抑制噪声的影响.

Sobel在Prewitt算子的基础上,对4领域采用带权的方法计算差分,对应的模板如图3-14(b)所示.该算子不仅能检测边缘点,而且能进一步抑制噪声的影响,但检测的边缘较宽.

图4-6Sobel算子和Prewitt算子

4.4.1.3Krisch算子

Krisch算子有八个卷积核,图像中每个点都用八个卷积核进行卷积,每个卷积核对某个特定边缘方向作出最大响应,所有八个方向中的最大值作为边缘图像的输出.

4.4.1.4Laplacian算子

Laplacian算子是二阶微分算子,对数字图像的每个像素计算关于x轴和y轴的二阶偏导数之和.

该算子对应的模板如图3-15所示,它是一个与方向无关的各向同性(旋转轴对称)边缘检测算子.其零交叉点也可作为图像的阶跃型边缘点,而其极小值点可作为图像的屋顶型边缘.Laplacian算子极小值算法用于检测屋顶型边缘的效果不错,但对噪声敏感性较大,而其过零点算法若直接用于检测阶跃型边缘,则不仅过零点的门限难以选择,而且检测精度一般地较低.

图4-7Laplacian算子

4.4.1.5Canny算子

Canny算子是一阶算子,其方法的实质是用一个准高斯函数做平滑运算,然后以带方向的一阶微分算子定位导数最大值.它可用高斯函数的梯度来近似,在理论上很接近k个指数函数的线性组合形成的最佳边缘算子,在实际工作应用中编程较为复杂,且运算偏慢.它是一阶传统微分中检测阶跃性边缘效果最好的算子之一,它比Prewitt算子,Sobel算子,Laplacian算子极小值算法的去噪能力都要强,但它也容易平滑掉一些边缘信息.

4.4.1.6LoG(LaplacianofGaussian)算子

Marr-Hildreth首先使用高斯函数对原始图像作平滑,这是由于高斯滤波器具有空间平稳性,空间位置误差小,然后采用无方向的Laplacian算子运算后,再用提取零交叉点的算法进行边缘检测,其精度明显提高.它的优点是过滤了噪声,缺点是可能将原有的边缘也给平滑了.高斯函数的方差直接影响到边缘检测的结果,δ较小时用于检测细节,δ较大时用于检测轮廓.

根据卷积的结合律可得高斯—拉普拉斯算子为

但是Mar-Hildreth没有解决如何组合不同尺度滤波器输出的边缘图为单一的,正确的边缘图的具体方法.

4.4.2边缘检测的MATLAB实现

MATLAB图像处理工具包定义了edge()函数用于检测灰度图像的边缘.

(1)BW等于edge(I,'method'),返回与I大小一样的二进制图像BW,其中元素1表示的是边缘上的点,0表示非边缘点.method为下列字符串之一:

①soble:缺省值,用导数的Sobel近似值检测边缘,梯度最大点返回边缘,

②prewitt:用导数的Prewitt近似值检测边缘,梯度最大点返回边缘,

③roberts:用导数的Roberts近似值检测边缘,梯度最大点返回边缘,

④log:使用高斯滤波器的拉普拉斯运算对I进行滤波,通过寻找0相交检测边缘,

⑤zerocross:使用指定的滤波器对I滤波后,寻找0相交检测边缘.

(2)BW等于edge(I,'method',thresh)中用thresh指定灵敏度阈值,所有的不强于thresh的边缘都被忽略.

(3)BW等于edge(I,'method',thresh,direction),对于soble和prewitt方法指定方向,direction为字符串,其中horizontal表示水平方向,vertical表示垂直方向,both表示两个方向(缺省值).

(4)BW等于edge(I,'log',thresh,sigma),用sigma指定标准偏差.

(5)[BW,thresh]等于edge(等),,函数的返回值实际上有多个("BW"和"thresh"),但由于用中括号括起表示为一个矩阵,所以又可认为只有一个返回参数.

下面用edge函数的不同方法来实现边缘检测,程序如下:

clearall,

closeall,

a等于imread('散黄蛋\NO190.bmp'),

b等于imcrop(a,[12585100100]),

g等于rgb2gray(b),

a1等于edge(g,'sobel'),

a2等于edge(g,'canny'),

a3等于edge(g,'robert'),

a4等于edge(g,'prewitt'),

subplot(2,2,1),imshow(a1)

subplot(2,2,2),imshow(a2)

subplot(2,2,3),imshow(a3)

subplot(2,2,4),imshow(a4)

程序运行以后结果如图4-8:

注:自左往右,自上而下分别为soble算子,canny算子,robert算子和prewitt算子的边缘检测

图4-8鸡蛋图像在进行边缘检测以后的图像

在本论文中,鉴于鸡蛋在存放过程中,气室的面积日益增大,可联想到算出鸡蛋红色区域与鸡蛋总面积的比例.鸡蛋的总面积可以先进行边缘检测,然后填充的封闭图形得到,也可以先转化为二值图像,再计算面积.

5新鲜蛋和散黄蛋或贴壳蛋检测模型的建立

基于本课题的研究对象是新鲜蛋和散黄蛋或贴壳蛋的图像差异,因此就需要将他们的图像特征值提取出来,以建立自动识别模型.如前所述,从图像可直观看出,鸡蛋的气室逐渐增大,联系到R,G,BR,G,BR,G,BA.直方图的值都是统计而来,描述了该图像关于颜色的数量特征,可以反映图像的部分内容.程序语句为,如果是一幅"香蕉"的图像,""将是颜色的主要成分,在数量上将占很大比例.

B.直方图丢失了颜色的位置信息,因此不同的图像可能具有相同的颜色分布,也就具有相同的颜色直方图.也就是说,任一特定的图像有着唯一的直方图,但反之并不成立——极其不同的图像可以有相同的直方图.

C.如果将图像划分成若干子区域,所有的子区域的直方图之和等于全图直方图.

D.一般情况下,由于图像上的背景和前景物体颜色分布明显不同,从而在直方图上会出现特征,但前景和背景颜色较为接近的图像不具备该性质.检测定一幅图背景是浅色的,其中有一个深色物体,则这类图像的直方图会出现特性.物体中的深色像素产生了直方图的一峰,而背景中大量的灰度级产生了直方图上的另一峰.

5.1.2MATLAB的直方图技术

如前所述,MATLAB工具箱提供了函数imhist,该函数可以绘制图像的直方图,也可以得到图像直方图的数据.显示直方图数据的函数的语法格式为:

[counts,x]等于imhist(I),

绘制图形直方图的语法格式为:

imhist(I)R,G,B'的直方图的程序如下:

clearall,

closeall,

a1等于imread('新鲜蛋\NO190.bmp'),

b1等于imcrop(a1,[12585100100]),

c1等于im2bw(b1,0.42),

R1等于b1(:,:,1),

G1等于b1(:,:,2),

B1等于b1(:,:,3),

R1等于wiener2(R1),

G1等于wiener2(G1),

B1等于wiener2(B1),

R1等于imadjust(R1,[0.30.7],[]),

G1等于imadjust(G1,[0.30.7],[]),

B1等于imadjust(B1,[0.30.7],[]),

form等于1:101,

forn等于1:101,

ifc1(m,n)等于等于0,

R1(m,n)等于0,

G1(m,n)等于0,

B1(m,n)等于0,

elseR1(m,n)等于R1(m,n),

G1(m,n)等于G1(m,n),

B1(m,n)等于B1(m,n),

end

end

end

d1(:,:,1)等于R1,

d1(:,:,2)等于G1,

d1(:,:,3)等于B1,

a2等于imread('散黄蛋\NO190.bmp'),

b2等于imcrop(a2,[12585100100]),

c2等于im2bw(b2,0.42),

R2等于b2(:,:,1),

G2等于b2(:,:,2),

B2等于b2(:,:,3),

R2等于wiener2(R2),

G2等于wiener2(G2),

B2等于wiener2(B2),

R2等于imadjust(R2,[0.30.7],[]),

G2等于imadjust(G2,[0.30.7],[]),

B2等于imadjust(B2,[0.30.7],[]),

form等于1:101,

forn等于1:101,

ifc2(m,n)等于等于0,

R2(m,n)等于0,


G2(m,n)等于0,

B2(m,n)等于0,

elseR2(m,n)等于R2(m,n),

G2(m,n)等于G2(m,n),

B2(m,n)等于B2(m,n),

end

end

end

d2(:,:,1)等于R2,

d2(:,:,2)等于G2,

d2(:,:,3)等于B2,

subplot(2,4,1),imshow(d1)

subplot(2,4,2),imhist(R1)

subplot(2,4,3),imhist(G1)

subplot(2,4,4),imhist(B1)

subplot(2,4,5),imshow(d2)

subplot(2,4,6),imhist(R2)

subplot(2,4,7),imhist(G2)

subplot(2,4,8),imhist(B2)

图5-1为新鲜鸡蛋和散黄蛋的R,G,B

注:自左往右,自上而下为新鲜蛋图像及其R,G,B分量的灰度图和散黄蛋及其R,G,B分量的灰度图

图5-1新鲜蛋和散黄蛋的R,G,B灰度图

在本论文中,选取了四十个鸡蛋来建立模型,从他们的R,G,BR分量的灰度图从哪一强度等级开始,象素点分布较密集,即分界点.

表5-1为用于建立模型的散黄蛋的R分量的灰度图的临界值.

表5-1散黄蛋的R分量的灰度图临界值

鸡蛋编号R灰度图分界点鸡蛋编号R灰度图分界点NO92210NO152150N097150NO153110NO106120NO154220NO132210NO155150NO134180NO156200N0135210NO157220NO136200NO160180NO137180NO161200NO138180NO164210NO139200NO166210NO140200NO169210NO141180NO170220NO142200NO171180NO143210NO175180NO144170NO177200NO147180NO178240NO148200NO180180NO149180NO181220NO150200NO182200NO151240NO189220总和3800平均值192.5从上表可以知道,可以将192.5作为鸡蛋灰度图的分界值,但是由于强度等级都是整数,因此取整为192.

5.2确定图像R分量灰度图特征区域像素点与鸡蛋总像素点的比例

在将鸡蛋R分量灰度图的临界值确定以后,下一步就是要确定在这个特征区域内的象素点的个数与鸡蛋总象素点的个数的比例,并将其作为分辨鸡蛋好坏的标准,以建立检测模型.

MATLAB工具箱提供的imhist函数可以实现返回直方图数据向量和相应得色彩值向量.

语法格式:

[counts,x]等于imhist(I),

此函数可以返回直方图数据向量counts或相应得色彩向量x.

5.2.1流程控制语句

MATLAB含有4种流程控制:For循环,While循环,If-Else-End结构,Switch-Case结构以及Try-Catch模块.这里只需要用到For循环和If-Else-End结构.

5.2.1.1for循环

语法:forvariable等于expr,%for指定循环次数

statements

end

花生仁图像的循环次数为:

[MN]等于size(a),%鸡蛋图像a的大小为M×N

forx等于1:M,%定义x的循环次数

y等于1:N,%定义y的循环次数

5.2.1.2If-Else-End结构

语法:iflogical_expression

statements

end

5.2.2MATLAB的程序实现

下面的程序可以实现将R分量的直方图特征区域的象素点数与总象素点数的比例计算出来:

clearall,

closeall,

a1等于imread('新鲜蛋\NO171.bmp'),

b1等于imcrop(a1,[12585100100]),

c1等于im2bw(b1,0.42),

R1等于b1(:,:,1),

G1等于b1(:,:,2),

B1等于b1(:,:,3),

R1等于wiener2(R1),

G1等于wiener2(G1),

B1等于wiener2(B1),

R1等于imadjust(R1,[0.30.7],[]),

G1等于imadjust(G1,[0.30.7],[]),

B1等于imadjust(B1,[0.30.7],[]),

form等于1:101,

forn等于1:101,

ifc1(m,n)等于等于0,

R1(m,n)等于0,

G1(m,n)等于0,

B1(m,n)等于0,

elseR1(m,n)等于R1(m,n),

G1(m,n)等于G1(m,n),

B1(m,n)等于B1(m,n),

end

end

end

bb1(:,:,1)等于R1,

bb1(:,:,2)等于G1,

bb1(:,:,3)等于B1,

a2等于imread('散黄蛋\NO171.bmp'),

b2等于imcrop(a2,[12585100100]),

c2等于im2bw(b2,0.42),

R2等于b2(:,:,1),

G2等于b2(:,:,2),

硕士文致谢模板并非原文参考属性评定
有关论文范文主题研究: 关于图像的论文范文检索 大学生适用: 专升本毕业论文、高校大学论文
相关参考文献下载数量: 91 写作解决问题: 写作参考
毕业论文开题报告: 论文模板、论文目录 职称论文适用: 论文发表、中级职称
所属大学生专业类别: 写作参考 论文题目推荐度: 优秀选题

B2等于b2(:,:,3),

R2等于wiener2(R2),

G2等于wiener2(G2),

B2等于wiener2(B2),

R2等于imadjust(R2,[0.30.7],[]),

G2等于imadjust(G2,[0.30.7],[]),

B2等于imadjust(B2,[0.30.7],[]),

form等于1:101,

forn等于1:101,

ifc2(m,n)等于等于0,

R2(m,n)等于0,

G2(m,n)等于0,

B2(m,n)等于0,

elseR2(m,n)等于R2(m,n),

G2(m,n)等于G2(m,n),

B2(m,n)等于B2(m,n),

end

end

end

bb2(:,:,1)等于R2,

bb2(:,:,2)等于G2,

bb2(:,:,3)等于B2,

subplot(2,4,1),imshow(bb1)

subplot(2,4,2),[counts1,x1]等于imhist(R1)

subplot(2,4,3),[counts2,y1]等于imhist(G1)

subplot(2,4,4),[counts3,z1]等于imhist(B1)

subplot(2,4,5),imshow(bb2)

subplot(2,4,6),[counts4,x2]等于imhist(R2)

subplot(2,4,7),[counts5,y2]等于imhist(G2)

subplot(2,4,8),[counts6,z2]等于imhist(B2),

s1等于0,

fori等于1:255,

ifx1(i)>,等于192&,x1(i)<,等于255,

s1等于counts1(i)+s1,

end,

end,

s1

s2等于0,

fori等于1:255,

ifx1(i)>,等于1&,x1(i)<,等于255,

s2等于counts1(i)+s2,

end,

end,

s2

s等于s1/s2

s3等于0,

fori等于1:255,

ifx2(i)>,等于192&,x2(i)<,等于255,

s3等于counts4(i)+s3,

end,

end,

s3

s4等于0,

fori等于1:255,

ifx2(i)>,等于1&,x2(i)<,等于255,

s4等于counts4(i)+s4,

end,

end,

s4

ss等于s3/s4

在此程序运行后,所得图像如图5-2所示.

图5-2新鲜蛋和散黄蛋在进行灰度调整以后的图像

同时,在程序运行以后,在mandwindow中显示出了图像的R分量的直方图的特征区域的象素点数与总象素点数的比例.表5-2为用于建立模型的40个鸡蛋的比例.

表5-2新鲜蛋与散黄蛋或贴壳蛋的比例

鸡蛋编号新鲜蛋比例散黄蛋比例鸡蛋编号新鲜蛋比例散黄蛋比例NO920.31150.9264NO1520.36840.6723NO970.40380.6988NO1530.52380.6146NO1060.45760.6156NO1540.48860.8381NO1320.47830.9075NO1550.5730.6052NO1340.34650.7059NO1560.48280.8896NO1350.370.8919NO1570.50570.8218NO1360.58330.8328NO1600.48420.686NO1370.51960.8125NO1610.40.8127NO1380.3750.6923NO1640.51660.878NO1390.41230.8835NO1660.36110.8256NO1400.45880.7071NO1690.52170.9098NO1410.46550.803NO1700.56340.8291NO1420.40240.8429NO1710.53330.6714NO1430.4020.9199NO1750.52680.9238NO1440.63510.6451NO1770.58240.7NO1470.44550.6707NO1780.48910.8709NO1480.50550.8006NO1800.49490.658NO1490.47830.6902NO1810.4250.9292NO1500.350.9338NO1820.40210.9084NO1510.37930.8516NO1890.49380.8854总和8.780315.8321平均值0.46290.7941

0.0789250.101405688从这些数据中,需要寻找一个临界值来建立检测模型,因此需要对数据进行处理,以寻找临界值.

上述数据在某个区间服从正态分布.表5-3为对数据进行处理的过程.

表5-3临界值数据处理

种类1.961.96经验值

中间值中间值中间值

新鲜蛋0.46290.07510.53800.6101

0.62850.61360.59930.5333

散黄蛋0.79410.10490.68920.5885从表5-3可以看出,和1.96在建立检测模型时的正确率较低,因此需要取得临界值,经过多次的试验,发现当临界值为0.5333时正确率最高.在本试验中就取0.5333为临界值.当灰度图特征区域象素点的个数与总象素点的个数的比例大于或等于0.5333时,系统弹出对话框"次鸡蛋为散黄蛋或贴壳蛋",当小于0.5333时,系统弹出对话框"此鸡蛋为新鲜蛋".

5.3建立检测模型

5.3.1检测结果对话框的创建

MATLAB工具箱提供了函数warndlg来显示检测以后的结果.当检测结果为新鲜蛋时,对话框显示"此鸡蛋为新鲜蛋",当检测结果为次蛋时,对话框显示"此鸡蛋为散黄蛋或贴壳蛋".

语法格式:warndlg('warningstring'.'dlgname')%显示一个标题为dlgname,并且包含字符串warningstring的对话框

5.3.2模型建立基本思路

在前面我们已经得出图像的R分量的灰度图特征区域的临界值,特征区域的象素点数与总象素点数的比例.据此可建立检测模型,MATLAB的具体实现步骤为:

(1)读入图像,

(2)对图像进行剪切,滤波,强度调整,去除背景区域等操作,以满足建立模型的需要,

(3)算出图像的R分量的特征区域的象素点数与总象素数的比例,

(4)采用for语句对鸡蛋的好次与否作出判断.若比例大于或等于0.5333,则判断为散黄蛋或贴壳蛋,反之,则为新鲜蛋,

(5)根据判断结果弹出对话框.

5.3.3检测程序

下面的程序可实现鸡蛋的自动识别:

clearall,

closeall,

a等于imread('散黄蛋\NO190.bmp'),

b等于imcrop(a,[12585100100]),

c等于im2bw(b,0.42),

R等于b(:,:,1),

G等于b(:,:,2),

B等于b(:,:,3),

R等于wiener2(R),

G等于wiener2(G),

B等于wiener2(B),

R等于imadjust(R,[0.30.7],[]),

G等于imadjust(G,[0.30.7],[]),

B等于imadjust(B,[0.30.7],[]),

form等于1:101,

forn等于1:101,

ifc(m,n)等于等于0,

R(m,n)等于0,

G(m,n)等于0,

B(m,n)等于0,

elseR(m,n)等于R(m,n),

G(m,n)等于G(m,n),

B(m,n)等于B(m,n),

end

end

end

bb(:,:,1)等于R,

bb(:,:,2)等于G,

bb(:,:,3)等于B,

subplot(2,2,1),imshow(bb)

subplot(2,2,2),[counts1,x]等于imhist(R)

subplot(2,2,3),[counts2,y]等于imhist(G)

subplot(2,2,4),[counts3,z]等于imhist(B)

s1等于0,

fori等于1:255,

ifx(i)>,等于192&,x(i)<,等于255,

s1等于counts1(i)+s1,%计算灰度图特征区域的象素点数

end,

end,

s1

s2等于0,

fori等于1:255,

ifx(i)>,等于1&,x(i)<,等于255,

s2等于counts1(i)+s2,%计算鸡蛋总象素点数

end,

end,

s2

s等于s1/s2%得出比例

ifs>,等于0.5333,

Warndlg('此鸡蛋为散黄或贴壳蛋!!','检测结果')

else

Warndlg('此鸡蛋为新鲜蛋!!','检测结果')

end

图5-3鸡蛋的检测结果

6模型可靠性检验

利用MATLAB建立的模型对鸡蛋蛋的图像进行检测,被检测的图像总共有132幅,依次对其进行检测,可以得到如表6-1的检测结果.

表6-1对132副鸡蛋图像进行检测的结果

鸡蛋新鲜与否数量(粒)检测结果正确数量(粒)错误数量(粒)新鲜蛋

散黄蛋或贴壳蛋

正确率66

66

60

56

87.81%6

10

从上表可以看出,总共有132幅鸡蛋图像,检测结果为其中有116幅图像检测正确,而有16幅图像检测结果错误,正确率达到87.81%,基本达到检测要求.但是在检测的过程中发现,由于在拍摄鸡蛋图像时,调整过外部条件,使得鸡蛋的检测出现偏差,所以正确率有待进一步提高.

7检测模型GUI界面的设计

图形用户界面(GUI)也是图形编程的一个重要部分.MATLAB提供了多个GUI设计对象,可以利用它们创建基本的界面元素.

GUI可以创建的界面元素包括:基本控件,菜单,弹出式菜单,按钮组控件,面板控件等.

基本控件的创建是通过函数uibontrol实现的,菜单的创建是通过函数uimenu实现的,弹出式菜单的创建是通过函数uicontextmenu实现的,按钮组控件的创建是通过函数uibuttongroup实现的,面板控件的创建是通过函数uipanel实现的.

但是,工具栏控件没在guide的工具箱中列出来,只能用函数方式进行创建.在MATLAB中创建工具栏,需要首先创建空白的工具箱,然后添加命令按钮或开关按钮.

创建空白的工具箱可用函数uitoolbar实现,创建命令按钮可用函数uitoolbar实现,创建开关按钮可通过函数uitoggletool实现.

在本论文的GUI界面中,设置了鸡蛋图像,R分量比例,检测,清除和退出五个按钮,并且设置R分量比例和临界值两个文本框还有一个用于显示图像坐标.具体的界面如图7-1所示.

图7-1所用GUI界面

以一个散黄蛋或贴壳蛋为例,经检测以后的结果如图7-2所示.

图7-2检测结果

8对鸡蛋检测模型的建立的进一步思考

从我们拍摄的鸡蛋图像可以看到,随着鸡蛋存放时间的增长,鸡蛋的气室会逐渐变大,以187号蛋为例,图8-1显示了其变化趋势.但是由于试验条件限制或者是建立模型难度的影响,对鸡蛋气室的研究在前面的论述中很少提到,下面就对这个问题进行探索.

图8-1187号蛋随时间变化的趋势

8.1指定区域

鉴于鸡蛋图像的气室增大,可以计算气室面积和鸡蛋总面积的比例,以对鸡蛋的气室的变化趋势进行量度,而计算气室的面积,需要指定气室部分.为此需要引进一个指定特定区域的函数.

MATLAB中对指定区域的处理是通过二值掩模来实现的.用户选定一个区域后会产生成一个与原图大小相同的二值图像,选定的部分为白色,其余部分为黑色.通过掩模图像,就可以实现对特定区域的选择性处理.roipoly函数用于选择图像中的多边形区域.

语法格式:

BW等于roipoly(I),

roipoly函数返回二值图像I,选中的区域值为1,其余的部分值为0.这个二值图像可以作为掩模,通过与原图的运算选择目标或背景.在程序运行以后,通过人工来选择区域.

8.2计算气室面积与鸡蛋总面积的比例

为了将气室面积与鸡蛋总面积的比例计算出来,特选出编号为169,173,180,185,187五枚鸡蛋,为了观察变化趋势,选取了4,8,12,16,20,24六天的鸡蛋来观察变化情况.

下面的程序可以实现计算气室面积与鸡蛋总面积的比例:

clearall,

closeall,

egg1等于imread('NO187.bmp'),

egg等于imcrop(egg1,[12585100100]),

R等于egg(:,:,1),%提取RGB分量

G等于egg(:,:,2),

B等于egg(:,:,3),

fori等于1:12,%对调整过的RGB分量进行12次维纳滤波

R等于wiener2(R,[22]),

G等于wiener2(G,[22]),

B等于wiener2(B,[22]),

end

ER等于edge(R,'roberts'),%用roberts算子对R分量进行边缘检测

R1等于bwmorph(ER,'spur',12),%对已经提取边沿的二值图像采用形态学运算函数,spur为去除物体上小的分支

R2等于bwmorph(R1,'clean'),%去除孤立的亮点

R3等于bwmorph(R2,'dilate'),%采用结构元素ones(3)作膨胀运算

R4等于bwmorph(R3,'skel',12),%提取物体的骨架

R5等于bwmorph(R4,'shrink',5),%收缩运算,没有孔的物体会收缩为一个点

R6等于bwmorph(R1,'bridge'),%作连接运算

R7等于bwmorph(R6,'clean'),%再去除孤立的亮点

R8等于bwmorph(R7,'thin'),%对物体进行细化

[mn]等于size(R8),

r1等于R8,

fori等于1:m,

A等于find(r1(i,:)等于等于1),%寻找逻辑值为1的象素点

[m1n1]等于size(A),

ifn1~等于0,

r1(i,A(1):A(n1))等于1,

end

end

total等于bwarea(r1),%计算鸡蛋图像面积

r1等于uint8(r1),

fori等于1:m,

forj等于1:n,

if(r1(i,j)等于等于1),%将鸡蛋区域填充为白色,背景为黑色

r1(i,j)等于255,

end

end

end

r等于bitand(R,r1),

g等于bitand(G,r1),

b等于bitand(B,r1),

c等于cat(3,r,g,b),%将RGB分量组合成鸡蛋的RGB图像

d等于roipoly(c)%指定鸡蛋气室区域

s等于bwarea(d),%计算气室面积

ss等于s/total%得出气室面积与鸡蛋总面积的比例

鸡蛋编号第四天第八天第十二天第十六天第二十天第二十四天NO1690.32470.33710.37410.43360.43870.4495

NO1730.22470.22790.26590.34840.35360.3642

NO1800.25180.26030.31260.35450.39480.4037

NO1850.28520.31370.32450.39880.40920.4395

NO1870.18050.28790.32310.36360.39360.4142从表8-1可以看出,鸡蛋随存储时间的增长,气室面积确实是在一步一步变大,上述五个鸡蛋无一不是这样,但是由于每个鸡蛋种类不同,大小不一,所含物质比例不同或者是其他原因,鸡蛋之间的气室面积与鸡蛋总面积的比例并没有固定的变化趋势.这个方面的研究也有待于以后做进一步的突破,找出与气室大小相关的参数,以建立更加真实可靠的检测模型.

9结论与分析

9.1结论分析

在此研究中,对由CCD摄像头拍摄的鸡蛋图像,利用MATLAB软件强大的图像处理功能,对鸡蛋图像进行前期处理后,便可以进一步提取特征值,以建立检测模型.试验过程中,主要的结论如下:

(1)对拍摄的图像,由于条件有限,拍摄的图像不能直接进行处理,需要进行各种预处理,比如剪切(函数imcrop),自适应滤波(函数wiener2),强度调整(函数imadjust),去除背景等,

(2)在处理以后,将新鲜蛋和散黄蛋或贴壳蛋的灰度直方图进行比较,将灰度直方图的分界点统计出来,以进一步确定在灰度图特征区域的象素点个数与总象素点个数的比例,以大体上确定建立模型的分界点.但是在实际检测过程中,检测的边界值需要做出一些调整,以使检测的正确率较高,

(3)检测证明,利用MATLAB软件建立的模型简洁,性能稳定,并且可靠性较高,准确率达87.81%.此研究也可以用于鉴别其他相似的检测.

9.2存在的不足

在检测的过程中,可以发现,此研究受各方面的影响,检测准确率有待提高,下面就对其做一些介绍:

(1)由于试验条件和设备的影响,拍摄的条件有待提高.比如试验过程中调整过几次CCD摄像头,图像的补光条件不好,图像不是很清晰,鸡蛋在每次放置时会出现偏差,会使检测受影响,

(2)本研究在建立检测模型时,只提取出了RGB颜色模型的R分量作为检测的依据,因此检测的标准比较少.因此在此基础上,可以进一步提取HIS模型的分量特征,以使检测正确率更高,

(3)本研究的数据统计比较简单,需要进一步对数据进行精确的统计和数据分析,而且应该结合下一步的研究进行.

9.3展望

在计算机日益发展的今天,计算机视觉技术在农业工程方面具有很大的潜能.本研究对鸡蛋进行了基于机器视觉的次蛋无损检测研究,以实现鸡蛋的自动检测.通过研究发现,在研究中可以进行一些展望:

(1)在试验时,应该将实验条件真正提高,以减少一些后续工作,也可以提高检测精确度,

(2)观察鸡蛋图像,可以发现,鸡蛋的气室随着存放时间的增长,确实是逐渐变大.所以可计算出鸡蛋的气室面积与鸡蛋总面积的比例,以增加一个检测指标.但是在本论文中,鉴于其实现的复杂性,未能完成,这也是很遗憾的,

(3)为了提高检测的正确率,应该多找几个检测指标,利用神经网络和遗传算法来对鸡蛋图像进行检测.

#30340;进度.其严谨的治学态度,创新的思想,认真的工作精神值得我们去认真学习,在我们一生中都将受益匪浅.

还有我们同小组的同学,他们是华细金,冯浩,宁可涛,董现娟,不管是做实验,还是在论文研究过程中,他们都给了我很大的支持和帮助.还要感谢师兄周平,他在我们实验和建立模型的过程中也给我了莫大的帮助,特在这里向他们表示诚挚的谢意!

最后还要感谢那些在默默帮助我的人,包括我的父母和周围关心我的同学!

附录:

MATLAB中的GUI界面程序代码:

functionvarargout等于untitled11111(varargin)

gui_Singleton等于1,

gui_State等于struct('gui_Name',mfilename..

'gui_Singleton',gui_Singleton..

'gui_OpeningF',@untitled11111_OpeningF..

'gui_OutputF',@untitled11111_OutputF..

'gui_LayoutF',[]..

'gui_Callback',[]),

ifnargin&,&,ischar(varargin{1})

gui_State.gui_Callback等于str2func(varargin{1}),

end

ifnargout

[varargout{1:nargout}]等于gui_mainf(gui_State,varargin{:}),

else

gui_mainf(gui_State,varargin{:}),

end

functionpushbutton1_Callback(hObject,eventdata,handles)%显示鸡蛋图像函数

globalb,

[filename2,pathname,FILTERINDEX]等于uigetfile({'*.gif,*.bmp,*.jpeg,*.jpg,*.png','*.*'},'选择要识别的图片'),

if(FILTERINDEX等于等于0)

return,

end

str_filename等于[pathname,filename2],

[a,map]等于imread(str_filename),

b等于imcrop(a,[12585100100]),image(b),%显示图形

functionpushbutton2_Callback(hObject,eventdata,handles)%提取R分量比例函数

globalb,

c等于im2bw(b,0.42),

R等于b(:,:,1),

G等于b(:,:,2),

B等于b(:,:,3),

R等于wiener2(R),%对R分量维纳滤波

G等于wiener2(G),

B等于wiener2(B),

R等于imadjust(R,[0.30.7],[]),%对R分量强度调整

G等于imadjust(G,[0.30.7],[]),

B等于imadjust(B,[0.30.7],[]),

form等于1:101,%去除背景影响

forn等于1:101,

ifc(m,n)等于等于0,

R(m,n)等于0,

G(m,n)等于0,

B(m,n)等于0,

elseR(m,n)等于R(m,n),

G(m,n)等于G(m,n),

B(m,n)等于B(m,n),

end

end

end

bb(:,:,1)等于R,

bb(:,:,2)等于G,

bb(:,:,3)等于B,

[counts1,x]等于imhist(R)%显示R直方图信息

[counts2,y]等于imhist(G)

[counts3,z]等于imhist(B)

s1等于0,%R直方图特征区域象素点数

fori等于1:255,

ifx(i)>,等于192&,x(i)<,等于255,

s1等于counts1(i)+s1,

end,

end,

s1

s2等于0,

fori等于1:255,

ifx(i)>,等于1&,x(i)<,等于255,

s2等于counts1(i)+s2,

end,

end,

s2%鸡蛋图形R分量总象素点数

s等于s1/s2%R分量比例

set(handles.edit1,'String',s)

functionpushbutton3_Callback(hObject,eventdata,handles)%检测函数

globals,

ss等于str2double(get(handles.edit1,'String')),

ifss>,等于0.5333,%检测标准

Warndlg('此鸡蛋为散黄或贴壳蛋!!','检测结果')else

Warndlg('此鸡蛋为新鲜蛋!!','检测结果')

end

functionpushbutton4_Callback(hObject,eventdata,handles)set(handles.edit1,'String',[]),

functionpushbutton5_Callback(hObject,eventdata,handles)%退出函数

close(gcbf),

functionedit1_CreateF(hObject,eventdata,handles)%显示R分量比例函数

ifispc&,&,isequal(get(hObject,'BackgroundColor'),get(0,'defaultUicontrolBackgroundColor'))

set(hObject,'BackgroundColor','white'),

end

functionedit2_CreateF(hObject,eventdata,handles)%显示临界值函数

ifispc&,&,isequal(get(hObject,'BackgroundColor'),get(0,'defaultUicontrolBackgroundColor'))

set(hObject,'BackgroundColor','white'),

end

华中农业大学学士学位论文(设计)

21