煙葉烤制過程中階段特征圖像識別算法研究
發(fā)布時間:2019-08-25 來源: 人生感悟 點擊:
摘 要:本文設計了一套針對煙葉自動化烤制過程中圖像處理與特征圖樣識別的算法,并給出了其中一些步驟的C語言和MATLAB程序以作模擬。以期為煙葉生產(chǎn)廠商自動化生產(chǎn)流程中關鍵階段準確識別提供思路。
關鍵詞:煙葉烤制;圖像處理;圖像識別;自動化
1 烤煙制作全過程中各狀態(tài)圖像的特征分析
1.1 鮮煙狀態(tài)(烘烤前):煙葉呈現(xiàn)鮮綠色,葉片明顯舒展文理較為平整、圖中的“溝壑”較少,葉片過渡平整。
1.2 葉片變軟狀態(tài)(失水20%):煙葉明顯變黃,呈現(xiàn)黃綠色,葉片開始蜷縮但“溝壑”仍較少,葉片較為平整。
1.3 主脈變軟狀態(tài)(失水30%):葉片基本全部變黃,只有葉片中部尚存在零星綠色(應為煙葉的輸水管部分),葉片蜷縮現(xiàn)象更加明顯。
1.4 勾尖卷邊狀態(tài)(失水40%):葉片黃色繼續(xù)加深,蜷縮明顯,出現(xiàn)“溝壑”現(xiàn)象。
1.5 小打筒狀態(tài)(失水55%):黃色略微加深,“溝壑”繼續(xù)加深。
1.6 大打筒狀態(tài)(失水75%):葉片最黃,“溝壑”最為明顯。
1.7 干筋狀態(tài)(烘烤結束):葉片黃色略微回淺(即更鮮亮),綠色含量最少,“溝壑”現(xiàn)象依舊比較明顯但比較前一狀態(tài)有所舒展,葉片色澤均勻。
2 本文設計的工作流程
2.1 CCD數(shù)碼相機定時拍攝圖像直接傳至計算機端,每次圖像保存兩份;
2.2 對一份圖片分別進入RGB通道處理,處理前先進行巴特沃斯低通濾波或中值濾波(普遍認為巴特沃斯低通濾波效果更好,如采用中值濾波經(jīng)重慶大學楊陽[3]等人反復試驗測試得出采用5 X 5鄰域的中值濾波效果較好),再分別求出其紅綠藍分量特征值。紅綠藍三色特征值分別達到146、115、43時可以認為煙葉是烤制完成的干筋狀態(tài)。三色中有一色不符合即為未完成,刪除舊圖像后從新提取新的圖像進行檢測。顏色識別還可以利用二值化,當三色中不符合要求的點數(shù)少到一定值后,可以認為煙葉烤制完成。
2.3 當煙葉的顏色達標后,對所保存的另一張相同圖像只使用其R分量做下述處理,提取其形態(tài)學特征(煙葉顏色不能達標時此步驟直接略去):
、僭谂渲肙penCV庫函數(shù)的C語言編輯器中使用Sobel 算子或Canny 算子等提取圖像邊緣,如需使用C語言編程,可以考慮在配置好OpenCV庫函數(shù)的C語言編輯器下運行Sobel算子函數(shù),鄭州大學郭明儒[4]曾給出如下計算方法:cvSobel(const CvArr* src, CvArr* dst, int xorder, int yorder, int aperyure_size=3); src:輸入圖像;dst:輸出圖像; xorder:x方 向上的差分階數(shù); yorder:y方向上的差分階數(shù); aperyure_size:擴展Sobel核的窗口階數(shù),必須是1,3,5,7。
、谔崛『蟮膱D像需要經(jīng)過1~2次開運算腐蝕膨脹消除噪聲后提取主筋,再利用Hough變換提取出煙葉的主脈部分。提取后的紋理與上文表格中提到的紋理熵等進行比較,如果其取值在合理范圍內(nèi),就說明烤制完成。
3 針對所使用的算法編制相應的處理程序
3.1 MATLAB編程
。1) 圖像讀取與存儲:
讀取f=imread(‘C:\Users\Administrator\1.jpg’);
存儲imwrite(f,’C:\Users\Administrator\Desktop’)
for i=1:10
str=[‘C:\Users\Administrator\Desktop\img’,num2str(i),’.tif’];
f=imread(str);
end
(2) 濾波:
>> w=ones(2);
>> g1=imfilter(f,w,’replicate’);
>> subplot(2,2,1);imshow(f);title(‘origin image’);
>> subplot(2,2,2);imshow(g1);title(‘smooth image’);
>> g2=medfilt2(f(:,:,1),[4,4]);
>> subplot(2,2,3);imshow(g2,[]);title(‘med filter’);
>> se=strel(‘square’,4);
>> g3=imclose(f(:,:,1),se);
>> subplot(2,2,4);imshow(g3,[]);title(‘imclose’);
。3) 形態(tài)學分析:條紋間距
>> f4=f2(50:350,200:300);
>> figure,imshow(f4);
>> [r,c]=find(f4==1);
。4) 閾值化:
>> f=im2double(f(:,:,1));
>> subplot(2,2,1);imshow(f);title(‘origin iamge’);
>> [gv t]=edge(f,’sobel’);
>> subplot(2,2,2);imshow(gv,[]);title(‘sobel’);
>> [gf t]=edge(f,’log’);
>> subplot(2,2,3);imshow(gf,[]);title(‘log’);
>> [gc t]=edge(f,’canny’);
熱點文章閱讀