資源描述:
《罐底字符識別》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、一.作業(yè)和討論?工業(yè)流水線上對易拉罐底字符進(jìn)行檢測,設(shè)計視覺檢測系統(tǒng)及算法,實現(xiàn)罐底各種字體的數(shù)字檢測。分析:視覺檢測系統(tǒng)搭建:例如,下圖是基于PC的機(jī)器視覺系統(tǒng)示意圖。1.光源選擇:OPT-RID240-W光源說明RID球積分光源具有積分效果的半球內(nèi)壁,均勻反射從底部360度發(fā)射出的光線,使整個圖像的照度十分均勻,主要適合于曲面、表面凹凸、弧形表面等物體和金屬、玻璃表面等反光較強(qiáng)的物體表面的檢測。2.工業(yè)攝像機(jī)一般是根據(jù)待檢測物體的尺寸和要求的分辨率來選擇。如在該系統(tǒng)中,假設(shè)易拉罐底是半徑為30mm,如果要求分辨率為0.1mm,則相機(jī)視角
2、至少為60mm*60mm,相機(jī)橫縱最小像素為60mm/0.1mm=600pix??梢赃x擇分辨率1024*768像素,像元尺寸為4.65um*4.65um,靶面大小為1/3’’的相機(jī)。1.鏡頭選擇選擇鏡頭時,通常要注意一個原則:即小尺寸靶面的CCD可使用對應(yīng)規(guī)格更大的鏡頭,反之則不行。鏡頭分辨率為≥1000/(2*4.65)=77.5lp/mm(根據(jù)Nycuist采樣定理)假設(shè)工作距離為10cm放大倍數(shù)=像元尺寸/系統(tǒng)分辨率=4.65/(0.1*100)=0.465焦距=工作距離*放大倍數(shù)/(放大倍數(shù)+1)=相元尺寸/系統(tǒng)分辨率=32mm根據(jù)
3、上述方法,即可以確定選擇1/3’’,焦距為35mm,分辨率為80-100pl/mm的鏡頭。2.圖像處理系統(tǒng):①方案一,選擇DSP處理器,成本低,其集成度高,實時性強(qiáng),處理速度快,其可編程性及強(qiáng)大的處理能力,使得這樣的系統(tǒng)有很高的性價比。②方案二:使用工業(yè)計算機(jī)。3.圖像顯示:PC端使用MFC或者QT編寫界面算法:搭建好系統(tǒng)后,可以采集到如下圖像:算法實現(xiàn)過程:整體思路:將采集回來的圖像,先進(jìn)行預(yù)處理(如濾波、增強(qiáng)、二值化、膨脹腐蝕等),再將圖像進(jìn)行字符分割,再進(jìn)行字符歸一化,將分割出來的字符和預(yù)先儲存的模板比較(模板匹配),輸出最相近的字符
4、。如在matlab中實現(xiàn):1.字符圖像獲取%讀取圖片image1=imread('character.jpg');1.轉(zhuǎn)成灰度圖%2RGBimage轉(zhuǎn)灰度圖ifsize(image1,3)==3image1=rgb2gray(image1);end2.分割字符區(qū)域由于罐底的字符基本是處于中間位置,不可能靠近邊緣,可以直接提取中間稍微小的區(qū)域,具體的值大小根據(jù)采集環(huán)境而定,下面的值是經(jīng)調(diào)試出來的。image1=imcrop(image1,[145200500240]);1.預(yù)處理(濾波,二值化,取反,膨脹腐蝕)取反是為了后面旋轉(zhuǎn)操作做準(zhǔn)備;膨
5、脹腐蝕解決字符不連續(xù)問題。image1=medfilt2(image1,[22]);%均值濾波image1=im2bw(image1,240/255);%閾值分割image1=imcomplement(image1);%取反%腐蝕運算連接字符邊界SE=strel('square',3);image1=imerode(image1,SE);image1=imdilate(image1,strel('rectangle',[4,2]));2.字符旋轉(zhuǎn)矯正利用圖像投影,就是說將圖像在某一方向上做線性積分(或理解為累加求和)。如果將圖像看成二維函數(shù)
6、f(x,y),則其投影就是在特定方向上的線性積分,比如f(x,y)在垂直方向上的線性積分就是其在x軸上的投影;f(x,y)在水平方向上的線積分就是其在y軸上的投影。。Radon變換(拉東變換),就是將數(shù)字圖像矩陣在某一指定角度射線方向上做投影變換。這就是說可以沿著任意角度theta來做Radon變換。Radon變換找到傾斜角,進(jìn)行矯正,MATLAB中其函數(shù)為radon();找到旋轉(zhuǎn)角度后,調(diào)用旋轉(zhuǎn)函數(shù)imrotate();%Radon變換找到傾斜角,進(jìn)行矯正theta=1:180;[R,xp]=radon(image1,theta);dis
7、=zeros(180,1);forn=1:180x0=find(R(:,n)>0);x1=min(x0);x2=max(x0);dis(n)=x2-x1;endro=find(dis<=min(dis));J=ro(1);qingxiejiao=90-J;image1=imrotate(image1,qingxiejiao,'bilinear','crop');%旋轉(zhuǎn)1.字符區(qū)域分割分別找出x方向和y方向像素不為0的范圍,在利用這范圍進(jìn)行分割。其函數(shù)為imcrop()。y1=find(sum(image1')~=0,1,'first');y
8、2=find(sum(image1')~=0,1,'last');x1=find(sum(image1)~=0,1,'first');x2=find(sum(image1)~=0