摘 要:在一定條件下,形態(tài)相像、數(shù)量繁多的細菌集聚成為菌落。菌落數(shù)量可以直接或間接地反映食品安全和環(huán)境衛(wèi)生的情況??焖?、精確定菌落的準確數(shù)量十分重要。本文開發(fā)了一種基于Python語言的菌落分割與計數(shù)的機器視覺算法,能夠準確、系統(tǒng)地對菌落進行分割和計數(shù)。本文算法菌落計數(shù)的準確性達到93.05%。與人工檢測方法相比,本文算法準確、客觀,價格低廉,運算速度快,適合替代人工檢測法進行菌落計數(shù)。
關鍵詞:圖像處理;圖像分割;機器視覺
中圖分類號:TP 391 " " " " " " 文獻標志碼:A
菌落數(shù)量可以直接或間接地反映食品安全和環(huán)境衛(wèi)生的情況,在檢測食品、醫(yī)療用品、化妝品和空氣質量等方面發(fā)揮重要作用。高菌落數(shù)量會對居民健康產生嚴重的潛在威脅,因此,快速、精確地確定菌落數(shù)量十分重要。
使用圖像處理算法,利用相關工具自動計算菌落數(shù)量[1],包括圖像預處理、閾值分割、圖像填充、菌落分割以及菌落計數(shù)等步驟。
1 研究方法
基于圖像處理的菌落分割與計數(shù)算法研究對菌落進行自動計數(shù),主要包括以下4個步驟。1)對菌落圖像進行菌落灰度化和濾波降噪。預處理菌落圖像。2)分割菌落圖像閾值,分離菌落的目標與背景,分割背景中的所有菌落,將這些菌落作為單獨的目標。3)采用開運算方法分割菌落圖像中的粘連菌落,提高菌落計數(shù)的準確性。4)對菌落圖像進行計數(shù)。
基于圖像處理的菌落分割與計數(shù)具體流程如圖1所示。
2 算法流程
2.1 圖像預處理
2.1.1 圖像灰度化
圖像灰度化是將一幅彩色圖像轉換為灰度圖像?;叶葓D像包括1個通道,每個像素點包括RGB 3個分量,每個分量有對應的加權系數(shù),加權系數(shù)比例與灰度圖像的亮度有統(tǒng)計學意義,通道值為灰度值。在圖像灰度化的過程中,每個像素的RGB值組合成1個單一的灰度值。常見的灰度化方法包括加權平均法、取平均值法、最大值法以及最小值法等。
本文采用加權平均法,利用OpenCV庫進行圖像灰度化處理。不同RGB通道對圖像亮度的貢獻程度差異較大,當計算每個像素的灰度值時,每個通道的權重系數(shù)不同。人眼對綠色敏感度最高,對藍色敏感度最低,因此采用加權平均法計算時,紅色通道的權重為0.299,綠色通道的權重為0.587,藍色通道的權重為0.114,加權平均法的優(yōu)點是能夠保留彩色圖像的信息,適應性強。將彩色圖轉換為灰度圖,能夠加快圖像處理速度,使噪聲對圖像的影響變小。利用OpenCV庫對菌落圖像進行灰度化后,極大程度地減輕圖像處理過程的負擔,提升圖像處理效率。
2.1.2 圖像濾波去噪處理
噪聲對圖像輸入、采集和處理等環(huán)節(jié)都有較大影響,因此圖像濾波去噪是圖像處理中不可缺少的步驟。在圖像處理過程中,采用中值濾波、均值濾波、雙邊濾波和高斯濾波等方法來進行濾波操作。這些方法能夠有效過濾圖像中各種不同類型的噪聲,并盡量保留圖像的細節(jié)特征。
本文采用中值濾波法消除椒鹽噪聲,效果較好。中值濾波法是一種非線性的平滑技術[2],其基本原理是將每個像素點的灰度值替換為該點鄰域窗口中所有像素點灰度值的中位數(shù)。其主要功能是使某像素的灰度值接近周圍領域內的像素,從而消除孤立的噪聲點,使周圍像素值更接近真實值。在消除噪聲的同時,中值濾波還能夠有效保護邊界信息,降低圖像模糊的概率。本文分別采用3×3、51×51、101×101卷積核進行中值濾波處理,卷積核是一個寬度為3、高度為3的二維矩陣。在這個矩陣中的每個元素都是可學習的權重,可以在輸入特征圖中執(zhí)行卷積操作。采用3×3卷積核進行中值濾波處理能夠得到比較完整的菌落圖片,圖片細節(jié)更清晰,因此本文主要使用3×3卷積核進行中值濾波,對圖片進行預處理。
2.2 菌落圖像二值化
圖像二值化是一種簡單的圖像處理方法,使圖像呈現(xiàn)明顯的黑、白效果,有效去除圖像中噪聲,提取有用的目標物體。本文采用固定閾值法去除菌落圖像背景,凸顯菌落圖像的輪廓。根據(jù)不同的閾值將圖像灰度直方圖分為多個區(qū)間或類別,并將每個類別內的像素視為相似或相關的像素,對圖像進行分割[3]。
基于閾值的圖像分割方法最關鍵的步驟是選取最合適的閾值來更準確地分割圖像[4]。針對相同的灰度圖像,設定不同的灰度閾值(T=80、T=120、T=140、T=150)分別進行閾值分割,得到效果不同的分割圖。本文根據(jù)不同的閾值對菌落圖像進行分割,閾值為120的分割圖像效果較好。
2.3 分割相連菌落
當菌落與背景分為2個部分時,進一步優(yōu)化圖像,使后續(xù)能夠更精確地進行分割計數(shù)。在菌落計數(shù)的過程中,在圖像中存在粘連菌落,會干擾精確計數(shù)結果,因此,需要使用算法對分割后的圖像進行黏連菌落分離。本文算法利用數(shù)學圖像中的開運算進行圖像分割。由于膨脹和腐蝕不能直接等同,因此先腐蝕目標圖像,再對目標圖像進行膨脹處理,即構成開運算。開運算腐蝕目標圖像,對目標圖像進行膨脹處理。腐蝕是在一定范圍內尋找極小值的運算。將1幅圖片的1塊當作A,當使用結構元素B進行腐蝕操作時,其可表示為B的中心點(錨點)在目標區(qū)域A的內部邊界上移動,選取B覆蓋區(qū)域內像素的最小值。這個過程能有效去除圖像中的小物體,斷開狹窄的連接,并收縮物體的邊界。該操作針對突出部分,B整個覆蓋在A上的像素會保存。膨脹是在一個區(qū)域內獲得極大值的運算。可定制核心(結構元素)的尺寸和形狀,通常為小塊或圓形,中心有錨點,用于確定在圖像上操作的精確位置。膨脹過程涉及將結構元素B在圖像上滑動,以B的錨點為中心對應圖像像素點,并取B覆蓋區(qū)域的最大像素值作為膨脹后的像素值。在這種情況下,圖片的突出部分會慢慢變大。
開運算不會對區(qū)域整體的位置和形態(tài)產生影響。開運算的結構元素為圖像B,利用開運算處理圖像A,如公式(1)所示。
A○B(yǎng)=(AΘB)⊕B " " " " " " " " " " " " (1)
2.4 菌落計數(shù)的原理
采用八鄰域邊緣跟蹤法對菌落進行計數(shù),檢測菌落邊緣,并計算數(shù)值。
2.4.1 八鄰域邊緣跟蹤法原理
八鄰域邊緣跟蹤法原理如下。假設物體的一個邊界點為P,那么下一個邊界點Q必然出現(xiàn)在P的8個相鄰像素點(即八鄰域)中。因此可以跟蹤八鄰域的信息。
起始點可以選擇圖像區(qū)域左上角的1個邊界點,自上而下、從左至右地按照逆時針方向搜索八鄰域,找到下一個邊界點為止,將這個邊界點作為當前點繼續(xù)搜索,不斷重復進行這個搜索過程,直至回到搜索起點為止。
邊界跟蹤的目的是確定八鄰域搜索的起始位置,即從該點開始檢查圖像中相鄰的8個方向,以便快速、有效地找到下一個邊界點。八鄰域方向碼如圖2所示。當搜索開始時,圖片區(qū)域的左上角是搜索起點,0和4以下為下一個邊界點位置,按逆時針方向搜索m=5 的八鄰域位置,以第一個遇到的與當前點相同且屬于物體的像素點作為下一個邊界點。如果在其八鄰域內沒有找到任何屬于物體的像素點,那么說明該物體是一個孤立點,此時將結束搜索。將剛搜索的邊界點作為下一個點,設d為其在上一個邊界點的鄰域內的方向碼,下一個邊界點搜索的開始點為m=d-2,即順時針旋轉2個方向后的方向編碼為d。
2.4.2 菌落計數(shù)
在菌落圖像中,將目標菌落的編號設為1,背景的編號設為0。按照從左至右、從上至下的順序搜索,第一個發(fā)現(xiàn)目標菌落的圖像位置記為A,A位于該圖像左上角。從A開始,以左下方作為初始搜索方向,根據(jù)左下、下、右下、右的方向依次搜索,以查找一個或多個目標點B。將B作為圖像的初始搜索點,按照正右、右上、上、左上、左、左下、下、右下的方向搜索,尋找下一個目標點C,如果C和A相同,則結束跟蹤,菌落計數(shù)加1;如果不同,則繼續(xù)尋找下一個目標點D,直至找到A為止。如果跟蹤完成一個連通區(qū)域,則確定區(qū)域搜索的結束點,將其作為起始點繼續(xù)搜索下一個區(qū)域,不斷相加,得到菌落的計數(shù)值M。M為利用八鄰域邊緣跟蹤法成功找到的菌落數(shù)目[5]。
為了更清晰地看到圖像計數(shù),運用OpenCV中的相關函數(shù)drawContours(imgTem,contours,-1,(0,0,255),15)來繪制輪廓,圖像中存在輪廓的點即為在計數(shù)過程中統(tǒng)計的菌落。
3 試驗結果與分析
經過本文算法計算每個步驟的結果如圖3所示,原菌落數(shù)目為686個,現(xiàn)菌落數(shù)目為666個,準確率為97.2%。
對菌落圖進行運算后,與手動計算相比,本文算法的準確率平均值為93.03%。
4 結語
本文開發(fā)了一種基于Pyhton語言并利用OpenCV庫進行菌落分割與計數(shù)的算法,該算法能夠準確地對菌落進行分割和計數(shù)。利用灰度化、中值濾波法對圖像進行預處理,去除圖像噪聲;利用固定閾值分割法將菌落圖像轉換為二值圖像;利用開運算分割粘連菌落,即先對圖像進行腐蝕運算,再進行膨脹運算,在位置和形狀不變的前提下,達到分割菌落的目的;利用八鄰域邊緣跟蹤法檢測菌落邊緣,對菌落圖像進行計數(shù)。具體步驟如下。1)整理基于圖像處理的菌落分割與計數(shù)的相關文獻,構建了進行傳統(tǒng)菌落圖像處理的流程,即經過菌落圖像預處理、菌落閾值分割、菌落圖像填充、菌落分割和菌落計數(shù)等步驟完成菌落計數(shù)。2)在圖像預處理方面,為了得到較完整的菌落圖片,獲得更清晰的細節(jié),針對菌落的特點,本文算法選擇中值濾波法對菌落進行去噪,效果較好。3)在圖像分割方面,本文算法使用固定閾值法將菌落由灰度圖轉化為黑白圖,與其他閾值分割方法相比,固定閾值法更簡單,錯誤率更低,適合處理簡單菌落圖像。4)本文算法使用開運算分割黏連菌落,開運算能去除圖像目標區(qū)域中的孤立的小區(qū)域、平滑目標邊界上的毛刺,同時不太改變目標區(qū)域面積大小。5)在菌落計數(shù)方面,本文算法使用八鄰域邊緣跟蹤法進行菌落計數(shù),與四鄰域邊緣跟蹤法相比,本文算法能夠更準確地劃分菌落,菌落計數(shù)效果更好。6)在對菌落圖進行運算后,與手動計算相比,本文算法的準確率較高,平均值為93.03%,成本較低,不使用大型儀器就可以統(tǒng)計菌落數(shù)量,能夠滿足工作需求。
參考文獻
[1]武雪鋒.菌落自動計數(shù)系統(tǒng)的開發(fā)與研究[D].天津:河北工業(yè)大學,2015.
[2]江明,劉輝,黃歡.圖像二值化技術的研究[J].軟件導刊,2009,8(4):175-177.
[3]黃鵬,鄭淇,梁超.圖像分割方法綜述[J].武漢大學學報(理學版),2020,66(6):519-531.
[4]孫少林,馬志強,湯偉.灰度圖像二值化算法研究[J].價值工程,2010,29(5):142-143.
[5]劉相濱,向堅持,陽波.基于八鄰域邊界跟蹤的標號算法[J].計算機工程與應用,2001(23):125-126,132.