摘 要:本文設(shè)計(jì)了一套針對(duì)煙葉自動(dòng)化烤制過程中圖像處理與特征圖樣識(shí)別的算法,并給出了其中一些步驟的C語言和MATLAB程序以作模擬。以期為煙葉生產(chǎn)廠商自動(dòng)化生產(chǎn)流程中關(guān)鍵階段準(zhǔn)確識(shí)別提供思路。
關(guān)鍵詞:煙葉烤制;圖像處理;圖像識(shí)別;自動(dòng)化
1 烤煙制作全過程中各狀態(tài)圖像的特征分析
1.1 鮮煙狀態(tài)(烘烤前):煙葉呈現(xiàn)鮮綠色,葉片明顯舒展文理較為平整、圖中的“溝壑”較少,葉片過渡平整。
1.2 葉片變軟狀態(tài)(失水20%):煙葉明顯變黃,呈現(xiàn)黃綠色,葉片開始蜷縮但“溝壑”仍較少,葉片較為平整。
1.3 主脈變軟狀態(tài)(失水30%):葉片基本全部變黃,只有葉片中部尚存在零星綠色(應(yīng)為煙葉的輸水管部分),葉片蜷縮現(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)(烘烤結(jié)束):葉片黃色略微回淺(即更鮮亮),綠色含量最少,“溝壑”現(xiàn)象依舊比較明顯但比較前一狀態(tài)有所舒展,葉片色澤均勻。
2 本文設(shè)計(jì)的工作流程
2.1 CCD數(shù)碼相機(jī)定時(shí)拍攝圖像直接傳至計(jì)算機(jī)端,每次圖像保存兩份;
2.2 對(duì)一份圖片分別進(jìn)入RGB通道處理,處理前先進(jìn)行巴特沃斯低通濾波或中值濾波(普遍認(rèn)為巴特沃斯低通濾波效果更好,如采用中值濾波經(jīng)重慶大學(xué)楊陽[3]等人反復(fù)試驗(yàn)測(cè)試得出采用5 X 5鄰域的中值濾波效果較好),再分別求出其紅綠藍(lán)分量特征值。紅綠藍(lán)三色特征值分別達(dá)到146、115、43時(shí)可以認(rèn)為煙葉是烤制完成的干筋狀態(tài)。三色中有一色不符合即為未完成,刪除舊圖像后從新提取新的圖像進(jìn)行檢測(cè)。顏色識(shí)別還可以利用二值化,當(dāng)三色中不符合要求的點(diǎn)數(shù)少到一定值后,可以認(rèn)為煙葉烤制完成。
2.3 當(dāng)煙葉的顏色達(dá)標(biāo)后,對(duì)所保存的另一張相同圖像只使用其R分量做下述處理,提取其形態(tài)學(xué)特征(煙葉顏色不能達(dá)標(biāo)時(shí)此步驟直接略去):
①在配置OpenCV庫函數(shù)的C語言編輯器中使用Sobel 算子或Canny 算子等提取圖像邊緣,如需使用C語言編程,可以考慮在配置好OpenCV庫函數(shù)的C語言編輯器下運(yùn)行Sobel算子函數(shù),鄭州大學(xué)郭明儒[4]曾給出如下計(jì)算方法:cvSobel(const CvArr* src, CvArr* dst, int xorder, int yorder, int aperyure_size=3); src:輸入圖像;dst:輸出圖像; xorder:x方 向上的差分階數(shù); yorder:y方向上的差分階數(shù); aperyure_size:擴(kuò)展Sobel核的窗口階數(shù),必須是1,3,5,7。
②提取后的圖像需要經(jīng)過1~2次開運(yùn)算腐蝕膨脹消除噪聲后提取主筋,再利用Hough變換提取出煙葉的主脈部分。提取后的紋理與上文表格中提到的紋理熵等進(jìn)行比較,如果其取值在合理范圍內(nèi),就說明烤制完成。
3 針對(duì)所使用的算法編制相應(yīng)的處理程序
3.1 MATLAB編程
(1) 圖像讀取與存儲(chǔ):
讀取f=imread(‘C:\Users\Administrator\1.jpg);
存儲(chǔ)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)學(xué)分析:條紋間距
>> 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);
>> subplot(2,2,4);imshow(gc,[]);title(‘canny);
3.2 C語言編程
上述過程均可采用C語言實(shí)現(xiàn),如:
閾值化:
void CZqlView::OnThresh()
{CZqlDoc* pDoc = GetDocument();
if (!(pDoc->m_Dib.GetHandle())) return;
int iWidth = pDoc->m_Dib.GetWidth();
int iHeight = pDoc->m_Dib.GetHeight();
int iBitsWidth = pDoc->m_Dib.GetBitsWidth();
LPSTR lpStartBit = pDoc->m_Dib.GetPixelBit();
int i,j,n=0;
unsigned char * lpPixel;
for (i=0;i
中值濾波
void CZqlView::OnZhongzhilvbo() {CZqlDoc* pDoc = GetDocument();
if (?。╬Doc->m_Dib.GetHandle())) return; CDIB Dib=pDoc->m_Dib; int iWidth = Dib.GetWidth(); int iHeight = Dib.GetHeight(); int iBitsWidth = Dib.GetBitsWidth();
LPSTR lpStartBitb =Dib.GetPixelBit();LPSTR lpStartBits =pDoc->m_Dib.GetPixelBit();
int i,j,k,m,n; int c[9]; unsigned char * lpPixelb; unsigned char * lpPixels; double dp=0;
for (i=1;i for(m=0;m<8;m++) {for(n=0;n<8-m;n++) { if(c[n]>c[n+1]) {k=c[n]; c[n]=c[n+1]; c[n+1]=k; }}} dp=c[4]; lpPixels=(unsigned char*)lpStartBits + (iHeight-1-i) * iBitsWidth + j; *lpPixels=(unsigned char)dp;}} Invalidate(); }4 系統(tǒng)總結(jié) 本文分兩路對(duì)煙葉的顏色和形態(tài)分別鑒定,二者均達(dá)標(biāo)時(shí)檢出。這樣的要求很高,被檢出的煙葉為干筋狀態(tài)的概率會(huì)非常大,但顯易存在已烤好的煙葉因某種情況未能檢出的現(xiàn)象,需多試驗(yàn)定好各閾值來避免此現(xiàn)象的發(fā)生。 對(duì)于其中的幾個(gè)算法,采用MATLAB進(jìn)行了仿真模擬,尤其是顏色提取等效果比較好,這一系統(tǒng)可以對(duì)本例中已經(jīng)烤制好的煙葉與未烤制完成的煙葉進(jìn)行區(qū)分。正如首段提及的,因?yàn)楸疚脑谠O(shè)計(jì)中本著烤制完成誤差率最低思想進(jìn)行的實(shí)際,也就是對(duì)烤制完成的標(biāo)準(zhǔn)要求設(shè)計(jì)的較高,這樣被識(shí)別的煙葉處于干筋狀態(tài)的概率極大,但也可能存在有些煙葉因?yàn)楦鞣N原因已經(jīng)烤制完成卻無法檢出的情況。由于實(shí)驗(yàn)條件有限,尚未發(fā)現(xiàn)這一情況,但是可以預(yù)料到高的水準(zhǔn)要求一定會(huì)存在這種未檢出的情況,關(guān)于各種閾值的把控,還需要經(jīng)過多次實(shí)際實(shí)驗(yàn)檢驗(yàn)才能摸索出最好的狀態(tài)。 考慮產(chǎn)品的便攜性,本文認(rèn)為采用C語言雖然初期編程較為繁瑣,但后期應(yīng)用的方便性遠(yuǎn)好于MATLAB,便于在各種嵌入式設(shè)備上輕松移植,使產(chǎn)品小型化、便攜化、成本最低化和效率最高化。另外C語言運(yùn)行更快捷,短時(shí)間內(nèi)處理圖像能力更高,配置OpenCV等庫函數(shù)后功能同樣齊全,也更適合在工廠等部門進(jìn)行實(shí)際推廣應(yīng)用。 參考文獻(xiàn) [1].段史江,宋朝鵬,馬力,史龍飛,王文超,宮長榮.基于圖像處理的烘烤過程中煙葉含水量檢測(cè)[J].西北農(nóng)林科技大學(xué)學(xué)報(bào),2012,05. [2].宋朝鵬,段史江,李長軍,馬力,史龍飛,宮長榮.烘烤過程中基于圖像處理的烤煙形態(tài)特征分析[J].湖南農(nóng)業(yè)大學(xué)學(xué)報(bào),2011,12. [3].楊陽.基于煙葉圖像處理的密集化烤房溫濕度系統(tǒng)設(shè)計(jì)[D].重慶大學(xué),2014. [4].郭明儒.基于模糊 PID 的煙葉烤房控制系統(tǒng)設(shè)計(jì)[D]. 鄭州大學(xué), 2011. 作者簡(jiǎn)介 張青林(1995-),鄭州大學(xué)物理工程學(xué)院電子信息科學(xué)與技術(shù)專業(yè)2013級(jí)本科生,曾主持河南省“挑戰(zhàn)杯”競(jìng)賽作品一項(xiàng)、鄭州大學(xué)“大學(xué)生創(chuàng)新創(chuàng)業(yè)訓(xùn)練計(jì)劃項(xiàng)目”一項(xiàng)等。