基于机器视觉的破损蛋检测图像处理与机器视觉——组员郑成煌蒋昊铮吕腾浩徐飞洋Start实验背景禽蛋是人们离不开的重要食品。在禽蛋加工过程中的一个重要步骤是分拣,即把破损蛋(主要是裂纹蛋)从好蛋中挑出来。目前,研究采用的方法主要有图像识别和敲击声音识别,或两种方法融合。图像识别的优势在于能够同时检测禽蛋的内外部品质,且是无接触型检测,不会对禽蛋造成二次破坏。Start实验方法第一章算法实现第二章实验软件:Matlab_2010b硬件配置:CPU:(英特尔)Intel(R)Core(TM)i5-4200MCPU@2.50GHz(2501MHz)内存:4.00GB(1600MHz)显卡:NVIDIAGeForceGT755M实验方法边缘检测定位滤波实验方法增强裂纹区域的对比度图像增强实验方法小组分工蒋昊铮:用不同的滤波方式进行处理,比较不同滤波方式对裂纹提取结果的影响郑成煌:尝试不同的边缘检测算子进行处理,观察各种算子提取裂纹结果的好坏吕腾浩:通过直方图均衡化的方法增强图像的对比度检测裂纹徐飞洋:根据反锐化掩膜的方法增强裂纹,实现裂纹的检测提取原理算法实现第二章上一章•图像锐化•图像滤波•反锐化掩膜法•直方图均衡化算法实现图像锐化1、灰度化2、边缘检测3、去噪算法实现图像锐化Image=imread('D:\ZJU\图像处理与识别\课程设计\08-01.bmp');G=rgb2gray(Image);%灰度化G=double(G);G(find(G=45))=0;%去除背景[m,n]=size(G);F=G;%F(i,j)=abs(sum(sum(G(i-1:i+1,j-1:j+1).*laplace)));endend%fori=3:m-2%forj=3:n-2%F(i,j)=abs(sum(sum(G(i-2:i+2,j-2:j+2).*log)));%end%endF=uint8(F);imshow(F);level=0.15;%设置阈值I=uint8(im2bw(F,level));%阈值分割I=255*I;imshow(I);BW2=uint8(bwareaopen(I,4,8));%噪点去除g1=BW2.*I;imshow(uint8(g1));laplace=[0-10;-14-1;0-10];%Laplace算子sobel1=[-101;-202;-101];%Sobel算子sobel2=sobel1';log=[-2-4-4-4-2;-4080-4;-48248-4;-4080-4;-2-4-4-4-2];%Log算子fori=2:m-1%卷积处理forj=2:n-1F(i,j)=sqrt(sum(sum(G(i-1:i+1,j1:j+1).*sobel1))^2+sum(sum(G(i-1:i+1,j-1:j+1).*sobel2))^2);算法实现图像锐化原图像Laplace算子灰度图二值化算法实现图像锐化Sobel算子二值化Log算子二值化算法实现图像锐化原图像灰度图Laplace算子二值化算法实现图像锐化Sobel算子二值化Log算子二值化算法实现由以上结果可知,Sobel算子和Log算子的边缘检测效果要好于Laplace算子,原因可能是Laplace算子是各向同性算子,在只关心边缘的位置而不考虑其周围的象素灰度差值时比较合适。在本次实验中,提取裂纹需要尽可能增加裂纹区域和蛋壳区域的灰度差,所以Laplace算子的效果不明显。图像锐化算法实现图像滤波1、滤波2、边缘检测3、去噪算法实现图像滤波原图像均值滤波处理算法实现图像滤波低通滤波高斯滤波算法实现图像滤波边缘保持滤波器中值滤波算法实现图像滤波%读取图像ImageIn=imread('08-01.bmp');%灰度化ImageIn=rgb2gray(ImageIn);ImageOut=ImageIn;%中值滤波mhl=2;mms=(mhl*2+1)^2;%矩阵的数的个数mmmp=2*mhl^2+2*mhl+1;%矩阵正中间的数fori1=mhl+1:size(ImageIn,1)-mhlfori2=mhl+1:size(ImageIn,2)-mhlmm=ImageIn(i1-mhl:i1+Mhl,i2-mhl:i2+mhl);mml=reshape(mm,1,mms);%reshape指定的矩阵改变形状,但是元素个数不变mml=sort(mml);%sort将参量中的元素按照升序排列ImageOut(i1,i2)=mml(mmmp);%mml(mmp)是mml数组的中值endend算法实现图像滤波%边缘检测ImageIn=ImageOut;ImageIn=double(ImageIn);ImageOut=(ImageIn*0);fori1=1:size(ImageIn,1)-1fori2=1:size(ImageIn,2)-1c=ImageIn(i1,i2);c1=ImageIn(i1,i2+1);c2=ImageIn(i1+1,i2);ImageOut(i1,i2)=((c-c1)^2+(c-c2)^2)*2;endend%阈值分割threshold=100;fori1=1:size(ImageOut,1)-1fori2=1:size(ImageOut,2)-1ifImageOut(i1,i2)thresholdImageOut(i1,i2)=255;elseImageOut(i1,i2)=0;endendendImageOut=uint8(ImageOut);imshow(ImageOut);算法实现裂缝凹坑图像滤波算法实现1、高斯低通器平滑2、得到反锐化掩膜3、锐化处理4、二值化并去噪反锐化掩膜方法算法实现反锐化掩膜方法A=imread('E:\浙大\图像处理与机器视觉\鸡蛋\08-01.bmp');a=rgb2gray(A);a=double(a);a(find(a30))=0;%去除背景g=zeros(size(a));g3=g;g4=g;g2=a-g;%获得反锐化掩膜fori=1:size(g2,1)forj=1:size(g2,2)ifg2(i,j)0g2(i,j)=a(i,j);elseg2(i,j)=a(i,j)+40*g2(i,j);%原图加上一定倍数掩膜,增强裂痕对比endendendgx=[-101;-202;-101];%sobel算子锐化处理gy=[121;000;-1-2-1];fori1=2:size(a,1)-1fori2=2:size(a,2)-1g3(i1,i2)=abs(sum(sum(g2(i1-1:i1+1,i2-1:i2+1).*gx)))+abs(sum(sum(g2(i1-1:i1+1,i2-1:i2+1).*gy)));endendL=fspecial('gaussian');%生成3×3高斯滤波器模板iOperator=L;fori1=2:size(a,1)-1fori2=2:size(a,2)-1g(i1,i2)=sum(sum(a(i1-1:i1+1,i2-1:i2+1).*iOperator))/sum(sum(L));%高斯低通滤波endend算法实现反锐化掩膜方法fori=1:size(g3,1)%图像二值化forj=1:size(g3,2)ifg3(i,j)150%红色为分割阈值g4(i,j)=255;elseg4(i,j)=0;endendendBW2=bwareaopen(g4,36,8);%噪点去除g5=BW2.*g4;imshow(uint8(g5));%提取裂纹区域图像,需根据不同图像调整语句a=(l==2)+(l==3)+(l==4)+(l==5);g6=g5.*a;imshow(uint8(g6))[l,n]=bwlabel(g5,8);%通过该段程序找到需要提取的holdon%裂纹图像区域fork=1:n[r,c]=find(l==k);rbar=mean(r);cbar=mean(c);text(cbar,rbar,num2str(k),'fontsize',12,'color','red');end算法实现反锐化掩膜方法原图像处理后图像提取裂纹区域算法实现反锐化掩膜方法算法实现三没有裂痕修改阈值但噪点随之反锐化掩膜算法实现1、阈值分割2、直方图均衡化3、边缘检测4、二值化并去噪直方图均衡化算法实现直方图均衡化蛋和背景之间的对比度增加了,但是蛋内部的对比度却减小了,使得裂纹更不明显,更难辨识结果不理想初期想法:整体直方图均衡化+图像锐化+阈值处理算法实现直方图均衡化传统的方法是基于整幅图像进行全局处理的,而在实际操作中,这种全局性的操作对于图像中的细节影响是很小的。采用了局部直方图均衡化的方法,避免对整幅图像进行处理,去除背景的影响,只对鸭蛋图像进行直方图均衡化,增强鸭蛋内的细节,使得鸭蛋图像对比度提高,鸭蛋裂纹的增强效果也变得明显。改进想法:局部直方图均衡化+图像锐化+阈值处理算法实现直方图均衡化再进行了图像锐化,阈值分割处理,将裂纹提取出来,最后结果如下:算法实现直方图均衡化算法实现直方图均衡化算法实现直方图均衡化算法实现直方图均衡化算法实现两个问题蛋的轮廓不能显示当裂纹不够较不明显时,在最后的结果上也不能很好地显示出来总的来说,该方法并不是一个很好的方法。反锐化掩膜参考文献[1]惠斌.基于机器视觉的禽蛋破损检测系统[D].中南大学,2012.[2]李竞.基于机器视觉的鸭蛋蛋壳检测系统[D].中南大学,2013.[3]李栋,赖科星.一种基于机器视觉技术的鸡蛋裂纹检测[J].电脑知识与技术,2013,07:1633-1635.