本發明屬于農產品檢測技術領域,特別涉及一種基于計算機視覺的糧種品質檢測方法。
背景技術:
在農業科研領域,相關人員需要經常稱量不同雜交基因、不同生長環境、不同培育方式培育的同類種子并對其進行分析,這項工作相當繁瑣,并且存在重復率高、誤差大、耗時長等問題。在此過程中,科研人員需要計算種子數量,測定單粒種子周長、面積、圓形度等特征參數,工作繁雜且人為因素較多,誤差較大,很難保證結果的準確性和有效性。隨著計算機視覺技術的發展,客觀地統計圖像中包含的獨立顆粒數目、提取顆粒的各種特征參數,再輔以相關軟件對數據進行分析處理,可以極大地減輕相關科研人員的工作量、提高檢測精度。因此,研究便捷、快速、準確的糧種品質檢測方法,對減輕相關科研人員的工作勞動強度,提高工作效率和準確性具有重要意義。
技術實現要素:
為了克服上述現有技術的不足,本發明的目的在于提出一種基于計算機視覺的糧種品質檢測方法,能夠利用計算機技術及圖像處理技術,在較短的時間內準確統計糧種數量,測定每顆糧種的特征參數,降低科研人員的勞動強度,提高生產效率,具有快速、準確的特點。
為了實現上述目的,本發明采用的技術方案是:
一種基于計算機視覺的糧種品質檢測方法,步驟如下:
步驟1:將待測糧種平鋪,利用圖像采集設備對糧種拍照,獲得清晰原始彩色圖像并保存;
步驟2:將彩色圖像轉換為灰度圖像,對灰度圖像進行增強處理以方便識別糧種顆粒;
步驟3:對圖像進行去噪、平滑處理,對處理過的灰度圖像進行二值化,得到只有黑、白兩種顏色的二值圖像;
步驟4:圖像分割,對分割后的圖像進行連通域標記,實現糧種顆粒計數;
步驟5:將分割后標記過的圖像進行還原處理;
步驟6:圖像孔洞填充,完善糧種形狀;
步驟7:計算每一個連通域的面積,提取圖像輪廓,得到糧種周長,計算糧種特征參數,包括周長、面積、圓形度,輸出結果。
所述步驟2中,采用最大值法將原始彩色圖像轉換為灰度圖像,即轉換后的灰度圖像中像素p(x,y)的灰度值為原始彩色圖像中該像素的R、G和B分量中的最大值,以保證得到亮度較大的灰度圖像。
所述步驟2中,圖像增強處理采用直方圖均衡化的方法,能夠均衡圖像的灰度等級、提高圖像的對比度,使圖像的細節更加清楚。
所述步驟3中,采用中值濾波法對圖像進行去噪、平滑處理,以減少或消除圖像的噪聲。
所述步驟3中,圖像二值化采用OSTU算法,即最大類間方差法實現。
所述步驟4中,圖像分割采用數學形態學的腐蝕方法來完成,其目的是將圖像中相連的糧種顆粒分開,根據圖像粘連程度,腐蝕2-8次;若圖像無粘連,圖像分割步驟可以省略。
所述步驟4中的連通域標記,是對二值圖像中的每一個連通域,即分離開的每顆糧種編號,編號從1開始,具體分為以下兩個步驟:
A、為掃描到的每一個目標像素分配一個臨時標記,同時尋找是否存在與此臨時標記等價的標記;記錄并解析所有等價標記;
B、用等價標記中的最小值替換所有與之等價的標記。
所述的連通域標記過程中,需要對目標二值圖像進行兩次從上到下、從左到右的掃描,在第一次掃描過程中,對于每一個目標像素p(x,y),需要檢查與其形成八鄰接關系的、已經掃描過的四個像素p(x-1,y-1)、p(x,y-1)、p(x+1,y-1)和p(x-1,y)并進行以下處理:
a)如果像素p(x,y-1)是目標像素,當前像素賦以p(x,y-1)的標記;
b)如果p(x-1,y)是目標像素,當前像素賦以p(x-1,y)的標記;此時,如果p(x+1,y-1)也是目標像素,記錄當前像素標記和p(x+1,y-1)標記為等價標記;
c)如果p(x-1,y-1)是目標像素,當前像素賦以p(x-1,y-1)的標記;此時,如果p(x+1,y-1)也是目標像素,記錄當前像素標記和p(x+1,y-1)標記為等價標記;
d)如果p(x+1,y-1)是目標像素,當前像素賦以p(x+1,y-1)的標記;
e)否則,當前像素賦以新標記;
對像素賦以標記后,對等價標記進行處理,以便確定哪些標記屬于同一個連接體,具體方法如下:
對每一個新標記p,創建一個等價標記集S,使得S(p)={p};如果兩個標記集a∈S(u)、b∈S(v)屬于等價標記,合并兩個集合,S(w)=S(u)∪S(v),其中,w是u和v中的較小值;如果兩個標記集不屬于等價標記,則兩個標記集中標記的像素不屬于同一連接體,不能合并;
第一次掃描完成后,所有的位于等價標記集S(α)之中的標記是等價標記,α是這些標記的代表標記;
第二次掃描,用代表標記替換等價標記集中的所有標記。
所述步驟5中的還原處理采用條件膨脹的方法。
所述步驟5中的條件膨脹是針對標記過的圖像進行,所述條件膨脹的次數和步驟4腐蝕的次數相同,以保證檢測的準確性。
所述步驟7中的計算面積是指計算圖像中每一個具有相同編號的連通域中包含像素個數;進行輪廓提取時,分別將糧種個體圖像的內、外輪廓分別提取,計算平均值以減少誤差。
本發明與現有技術相比具有以下有益效果:
本發明可以準確、快速、實時地對糧種實現無損檢測。由于本發明采用計算機技術及圖像處理技術,在較短的時間內可以準確給出給定糧種樣本中的大小、圓形度等外觀信息,從而降低工人勞動強度和出錯率,提高生產效率。
附圖說明
圖1為本發明方法處理流程圖。
圖2為本發明進行糧種個體標記時處理目標像素時需要檢查的其他像素示意圖。
具體實施方式
下面結合附圖和實施例對本發明作進一步詳細說明。
實施例:
參見圖1,本發明為一種基于計算機視覺的糧種品質檢測方法,以大米作為被測對象,包括如下步驟:
步驟1:將待測米粒盛放于平底器皿中,適當搖晃,避免待測米粒重疊,減少米粒間的接觸。如待測樣本數量較多,可分多次測量;
利用圖像采集設備在器皿正上方適當位置拍照并保存,得到待測大米的原始圖像,分辨率不低于640*480像素。為了得到質量較高的圖像,可以選擇深色器皿盛放。
步驟2:由于目前圖像采集設備采集到的圖像一般為彩色圖像,為了后續處理方便,需要將待檢測的原始圖片轉換為灰度圖像。將彩色圖像轉換為灰度圖像時采用最大值法,即轉換后的灰度圖像中像素p(x,y)的灰度值為原始彩色圖像中該像素的R、G和B分量(R、G、B分別代表紅、綠、藍分量)中的最大值,以保證得到亮度較大的灰度圖像。
對灰度圖像進行增強處理以方便識別糧種顆粒。圖像增強處理采用直方圖均衡化的方法,采用線性變換對圖像中每一個像素灰度作線性拉伸,這將有效改善圖像視覺效果。具體方法:假定原圖像f(x,y)的灰度范圍為[a,b],變換后的圖像g(x,y)的灰度范圍線性的擴展至[c,d]。則對于圖像中的任一點的灰度值p(x,y),變換后為g(x,y),其數學表達式為g(x,y)=(d-c)*[f(x,y)-a]/(b-a)+c,c和d的值分別為0和255。
步驟3:利用圖像采集設備獲得的圖像在轉化過程中由于受到電磁特性以及外界環境的影響,會使圖像含有噪聲,因此需要對灰度圖像進行平滑處理。
采用中值濾波法來對圖像進行去噪、平滑處理,以減少或消除圖像的噪聲。中值濾波是基于排序統計理論的一種能有效抑制噪聲的非線性信號處理技術,中值濾波的基本原理是把數字圖像中一點的值用該點的一個鄰域中各點值的中值代替,讓周圍的像素值接近的真實值,從而消除孤立的噪聲點。
本實施例中采用為3*3像素的模板,從圖像的左上角第一個像素開始,利用濾波窗口進行逐個像素的從左到右、從上到下的掃描,用窗口中各點的灰度值的中值來代替窗口中心點像素的灰度值。
之后,采用OSTU算法、即最大類間方差法對圖像進行二值化,可以避免由于光照不均勻造成圖像偏色導致圖像二值化不理想的問題,得到目標像素是白色、背景像素是黑色的二值圖像。
最大類間方差法是一種自適應的閾值確定的方法。它是按圖像的灰度特性,將圖像分成背景和目標兩部分。背景和目標之間的類間方差越大,說明構成圖像的兩部分的差別越大,當部分目標錯分為背景或部分背景錯分為目標都會導致兩部分差別變小。
步驟4:盡管在步驟1中采取搖晃等措施盡量避免糧種之間的接觸,但是還是不可避免的出現多顆糧種緊挨的情況,特別是一次檢測的糧種數量較多時,這種情況將更為普遍。為了區分每顆糧種個體,需要將挨到一起的糧種區分開,也就是需要將圖像進行分割。
圖像分割采用數學形態學中的腐蝕的方法來實現。腐蝕采用2*2像素的方形結構元素以盡量保持待測米粒的原有形態。腐蝕的目的是將圖像中粘連的米粒分開,對于無粘連的圖像,本步驟可以省略;對于粘連度比較小的圖像,腐蝕2-3次;如果圖像粘連較為嚴重,可以進行5-8次腐蝕。
待測米粒計數。分割后的圖像,每一顆待測米粒為一個連通域。因此需要對分割后的圖像進行連通域標記,實現待測米粒計數。
為每一顆分割開的米粒編號,編號從1開始,為米粒編號的同時可以通過統計編號的個數得知待測米粒數量。本步驟采用連通域標記方法來實現。所述連通域標記,指的是對二值圖像中的連通域進行標記,標記后連通域的數量就是米粒數量。為此,需要進行以下兩個步驟:
A、為掃描到的每一個目標像素分配一個臨時標記,同時尋找是否存在與此臨時標記等價的標記;記錄并解析所有等價標記;
B、用等價標記中的最小值替換所有與之等價的標記。
在進行連通域標記過程中,需要對目標二值圖像進行兩次從上到下、從左到右的掃描,如圖2所示,在第一次掃描過程中,對于每一個目標像素p(x,y),需要檢查與其形成八鄰接關系的、已經掃描過的四個像素p(x-1,y-1)、p(x,y-1)、p(x+1,y-1)和p(x-1,y)并進行以下處理:
a)如果像素p(x,y-1)是目標像素,當前像素賦以p(x,y-1)的標記;
b)如果p(x-1,y)是目標像素,當前像素賦以p(x-1,y)的標記;此時,如果p(x+1,y-1)也是目標像素,記錄當前像素標記和p(x+1,y-1)標記為等價標記;
c)如果p(x-1,y-1)是目標像素,當前像素賦以p(x-1,y-1)的標記;此時,如果p(x+1,y-1)也是目標像素,記錄當前像素標記和p(x+1,y-1)標記為等價標記;
d)如果p(x+1,y-1)是目標像素,當前像素賦以p(x+1,y-1)的標記;
e)否則,當前像素賦以新標記。
對像素賦以標記后,需要對等價標記進行處理,以便確定哪些標記屬于同一個連通域,具體方法如下:
對每一個新標記p,創建一個等價標記集S,使得S(p)={p};如果兩個標記集a∈S(u)、b∈S(v)屬于等價標記,合并兩個集合,S(w)=S(u)∪S(v),其中,w是u和v中的較小值;如果兩個標記集不屬于等價標記,則兩個標記集中標記的像素不屬于同一連接體,不能合并;
第一次掃描完成后,所有的位于等價標記集S(α)之中的標記是等價標記,α是這些標記的代表標記;
第二次掃描的任務是標記替換,用代表標記替換等價標記集中的所有標記。
經過兩次掃描后,所有的連通域被賦以相同的等價標記,只需要計算不同標記的數字就可以得到連通域的數量。連通域的數量就是待檢測米粒的數量。
步驟5:將分割后標記過的圖像進行還原處理。在步驟4中用腐蝕的方法進行圖像分割的結果雖然將相互粘連的米粒分開了,但是原圖中目標像素的個數大大減少了,后期還需要計算圖像中連通域的面積來確定米粒的大小,因此還需要將腐蝕后的圖像進行還原處理,盡可能恢復米粒形態、大小。采用常規的膨脹方法可以將圖像的面積恢復,但是分割開的待測米粒又會粘連到一起,故采用條件膨脹的方法。條件膨脹是針對標記過的米粒圖像進行。
本實施中采用條件膨脹的方法。具體方法是:采用2*2像素的方形結構元素遍歷所有目標像素,對于當前處理的某一個像素,判斷2*2區域中是否含有兩部分或兩部分以上的區域,即判斷2*2區域中是否含有不同的兩個或兩個以上的不同編號,如果有,說明膨脹后會將不同的連通域(米粒)粘連,因此當前像素不再膨脹,接下來處理下一個目標像素。如果2*2區域中只含有一部分區域(即一個編號),則對當前目標像素進行膨脹操作,膨脹后的目標像素編號與被膨脹像素編號一致。為了盡可能保證檢測的準確性,執行條件膨脹的次數應和步驟4的腐蝕的次數相同。
步驟6:圖像孔洞填充,完善糧種形狀。所述步驟6中的孔洞填充,是為了避免米粒表面有較大斑點而造成圖像形狀不完整,進而造成糧種個體面積計算不準確的情況,進而影響米粒大小的統計。
步驟7:計算每一個連通域的面積,提取圖像輪廓,得到糧種周長,計算糧種特征參數:周長、面積、圓形度,輸出結果。
所述步驟7中的計算面積是指計算每一個連通域、即每一顆米粒的面積,本步驟需要計算圖像中具有相同標號的連通域中包含的像素個數;輪廓提取,分別將米粒個體圖像的內、外輪廓分別提取,然后計算平均值以減少誤差。
米粒內外輪廓所有的像素之和的平均值就是每一顆米粒個體的周長,輪廓中所有目標像素就是該米粒的面積。
所述的圓形度計算公式為C=4πA/P2,其中C為圓形度,A為對象面積,P為對象周長。