孫宏昌,胡锃澤,閆偉偉
(1.天津職業(yè)技術(shù)師范大學(xué) 機(jī)器人及智能裝備研究院,天津 300222;2.天津市智能機(jī)器人技術(shù)與應(yīng)用企業(yè)重點(diǎn)實(shí)驗(yàn)室,天津 300222;3.黃山市科美環(huán)境科技股份有限公司,安徽 黃山 245400)
在農(nóng)業(yè)、食品、醫(yī)學(xué)等行業(yè)中,職業(yè)工作者可以通過計(jì)算機(jī)減少工作強(qiáng)度,提升工作效率[1]。本研究根據(jù)現(xiàn)有研究現(xiàn)狀的問題,提出了一種基于改進(jìn)最大類間方差法結(jié)合霍夫變換(Otsu + Hough)的圖像處理算法;對(duì)工業(yè)攝像機(jī)拍攝的菌落圖像利用Python-OpenCV 進(jìn)行去噪、濾波、圖像增強(qiáng)等預(yù)處理,接著使用改進(jìn)的大津法進(jìn)行處理[2]得到菌落的二值圖像。為避免培養(yǎng)皿邊緣對(duì)計(jì)數(shù)結(jié)果的影響,通過Hough 方法去除培養(yǎng)皿邊緣,最后遍歷圖像尋找并描繪出菌落的邊緣輪廓[3],計(jì)算菌落封閉輪廓面積并對(duì)其按順序進(jìn)行標(biāo)號(hào),完成菌落計(jì)數(shù)。
鑒于對(duì)微生物檢測(cè)控制平臺(tái)的要求和目前實(shí)驗(yàn)室現(xiàn)狀,選擇了該機(jī)械臂作為微生物檢測(cè)控制平臺(tái),如圖1 所示。運(yùn)動(dòng)控制卡選擇開放式多軸運(yùn)動(dòng)控制器,相當(dāng)于功能齊全的小型計(jì)算器。運(yùn)動(dòng)控制卡通過接受上位機(jī)Labview 程序指令后,發(fā)送信號(hào)給機(jī)械臂,操控升降臂和伸縮臂對(duì)微生物培養(yǎng)皿進(jìn)行運(yùn)動(dòng),將其放置到合適攝像頭獲取圖像的位置。
圖1 升降、伸縮機(jī)械臂
通過調(diào)用Labview 中的節(jié)點(diǎn)函數(shù)就可以完成對(duì)運(yùn)動(dòng)控制卡提供的運(yùn)動(dòng)函數(shù)動(dòng)態(tài)鏈接庫(kù)的控制,在實(shí)際使用Labview 中節(jié)點(diǎn)函數(shù)調(diào)用時(shí),需要根據(jù)函數(shù)的參數(shù)類別對(duì)輸出、輸入?yún)?shù)進(jìn)行一定的配置才能直接調(diào)用。如圖2 所示為L(zhǎng)abview 中的程序框圖。
圖2 Labview 程序
經(jīng)過圖像采集系統(tǒng)直接得到微生物圖像因?yàn)樵朦c(diǎn)、色彩等問題會(huì)直接影響最后的精度,所以需要先進(jìn)行圖像預(yù)處理。將菌落圖像進(jìn)行圖像分割,可以將圖像和背景相分離,不光簡(jiǎn)化后續(xù)冗雜的過程,也能給后續(xù)計(jì)數(shù)工作奠定基礎(chǔ)及提供便利,最后去除培養(yǎng)皿邊緣后即可得到菌落計(jì)數(shù)數(shù)量。使用OpenCV 庫(kù)作為菌落計(jì)數(shù)算法開發(fā)的圖像處理工具,如圖3 所示,對(duì)菌落進(jìn)行自動(dòng)計(jì)數(shù)分為以下4 個(gè)步驟:
圖3 菌落計(jì)數(shù)流程
(1)菌落圖像預(yù)處理:在得到相關(guān)圖像后對(duì)其進(jìn)行灰度變換、去噪濾波和圖像增強(qiáng)等預(yù)處理[4]操作,可以使得后續(xù)處理更加方便快捷,提高計(jì)數(shù)精度。
(2)菌落圖像分割處理:使用Otsu 算法對(duì)圖像進(jìn)行分割[5],將目標(biāo)檢測(cè)物與背景相分離,最理想情況是將背景中所有菌落都分離出來。
(3)去除菌落培養(yǎng)皿邊緣圖像:利用Hough 變換尋找培養(yǎng)皿邊緣圓心并根據(jù)已知培養(yǎng)皿半徑去除培養(yǎng)皿邊緣,確定計(jì)數(shù)范圍,減少計(jì)數(shù)誤差。
(4)菌落計(jì)數(shù):通過計(jì)算每個(gè)封閉區(qū)域的面積完成菌落計(jì)數(shù)。
菌落圖像采集設(shè)備采集到菌落圖像如圖4 所示,因?yàn)槌上裣到y(tǒng)亮度的響應(yīng)范圍都有一定限度,所以圖像存在亮度峰值和最小值之比較低的問題,不利于圖像的觀察、處理、分析,針對(duì)采集到的菌落圖像對(duì)其進(jìn)行灰度變換,可以增強(qiáng)對(duì)比度,提高圖像的視覺表現(xiàn)效果,也為后續(xù)圖像增強(qiáng)打下了基礎(chǔ)。受到各種不可控的主客觀因素的影響,圖像在采集和傳輸中會(huì)出現(xiàn)噪聲、失真等問題,圖像需要經(jīng)過增強(qiáng)才可以滿足使用需求。利用圖像增強(qiáng)可以放大圖像特征,有效減少負(fù)面影響,增強(qiáng)視覺效果。
圖4 菌落原圖像
(1)灰度變換:一副完整的菌落采集圖像一般由紅色(R)、綠色(G)、藍(lán)色(B)3 個(gè)通道組成,而灰度圖像是只有純白通道,為了保證菌落之后算法的處理復(fù)雜度和精確度,因此將采集到三通道的彩色圖片變成只有單通道的灰度圖像。將菌落采集設(shè)備采集到的菌落待處理圖像進(jìn)行加權(quán)處理,彩色圖像的紅、綠、藍(lán)三元色像素最終變成灰度圖像中對(duì)應(yīng)像素點(diǎn)的灰度值,處理結(jié)果如圖5 所示。
圖5 菌落灰度處理圖像
(2)圖像增強(qiáng):在圖像采集、圖像傳播、圖像生成等過程中會(huì)由于一些外部因素影響,比如光照、噪聲等因素,對(duì)采集到的圖像質(zhì)量產(chǎn)生噪聲干擾,需要對(duì)圖像進(jìn)行濾波處理,否則會(huì)因?yàn)楫嬅娴氖д婧蛨D片中的噪點(diǎn)給后面菌落計(jì)數(shù)算法造成難度,降低其準(zhǔn)確性。選用中值濾波[6]對(duì)圖像進(jìn)行濾波降噪處理;中值濾波算法以3×3 濾波函數(shù)窗口,計(jì)算點(diǎn)(x,y)為中心周圍鄰域八個(gè)格子的像素值以升序排列,并以排列的像素中值作為目標(biāo)像素(x,y)的新像素值。中值濾波相關(guān)原理如圖6 所示,降噪之后處理效果如圖7 所示。
圖6 3×3 中值濾波原理
圖7 菌落中值濾波圖像
傳統(tǒng)Otsu 算法[7]操作理論簡(jiǎn)單、意義明確,是一種動(dòng)態(tài)計(jì)算確定圖像分割閾值的自動(dòng)無監(jiān)督圖像分割算法。該算法[8]利用灰度圖像直方圖在目標(biāo)圖像和背景中存在的較大差異來得確定最佳閾值大小,將背景與目標(biāo)圖像相分離。傳統(tǒng)的Otsu 算法處理圖像時(shí),將原圖像中的像素點(diǎn)分成了2 個(gè)部分:背景的像素點(diǎn)和圖像的像素點(diǎn),但由于算法只考慮到了將圖像分割成背景和目標(biāo)圖像2 個(gè)方面,當(dāng)背景和目標(biāo)灰度值相近時(shí)區(qū)分困難。將原圖像的分割類別分為三大類進(jìn)行閾值分割,分別分割成“背景圖像”“邊緣點(diǎn)”和“目標(biāo)圖像”,在對(duì)“邊緣點(diǎn)”的像素點(diǎn)進(jìn)行單獨(dú)討論,將邊緣點(diǎn)進(jìn)行再次分類,最后將圖像分割成背景或目標(biāo)圖像。改進(jìn)的Otsu 算法一定程度上解決了背景和目標(biāo)灰度值相近時(shí),傳統(tǒng)Otsu 算法難以分割兩者的問題,并且有比傳統(tǒng)Otsu 算法更好的自適應(yīng)性和準(zhǔn)確性。
假設(shè)灰度圖像的大小為N×M,L(0,1,2,…,L-1)為F(x,y)的灰度級(jí)數(shù),其中灰度值i(i?{0,1,2,…,L-1})像素個(gè)數(shù)為ni,將灰度圖像分為三大類C0、C1、C2,分別為:“背景圖像”“邊緣點(diǎn)”和“目標(biāo)圖像”。最大類間方差閾值分別設(shè)為k和m,C0類像素灰度級(jí)為[0,1,…,k],C1類像素灰度級(jí)為[k+1,k+2,…,m],C2類像素灰度級(jí)為[m+1,m+2,…,L-1]。其改進(jìn)的Otsu算法的最大類間方差定義為:
其中三大類C0、C1、C2出現(xiàn)的可能性和其灰度均值分別為:ω0,ω1,ω2和μ0,μ1,μ2(n= 0,1,2)。
其每個(gè)類的最大類間方差為:
綜上所述,可以得知:
對(duì)其式(4)兩邊對(duì)k和m分別求偏導(dǎo)并且讓偏導(dǎo)數(shù)為0 可以得到:
當(dāng)所求閾值m,k滿足式(5)(6)的關(guān)系時(shí),閾值分割效果最佳。當(dāng)算法根據(jù)高、低閾值進(jìn)行遍歷時(shí),將灰度值比低閾值小的像素點(diǎn)去除,反之保存,如果某像素點(diǎn)的灰度值在上述兩者之間,像素點(diǎn)有可能是目標(biāo),也可能是背景,需要對(duì)其模的最大值方向和圖像邊緣走向計(jì)算來確定其歸屬。將圖像的像素梯度幅值分為l個(gè)級(jí)別,并計(jì)算該像素點(diǎn)和其鄰域的梯度模值,如果其模的大小在鄰域內(nèi)為最大值,那么該像素點(diǎn)為目標(biāo),否則應(yīng)當(dāng)去除。改進(jìn)算法和傳統(tǒng)算法經(jīng)過處理后的圖像分別為圖8 所示。
圖8 改進(jìn)算法比較
在實(shí)際菌落生長(zhǎng)過程中,會(huì)有部分菌落和培養(yǎng)皿邊緣產(chǎn)生粘連現(xiàn)象,培養(yǎng)皿邊緣像素處理不當(dāng)會(huì)對(duì)計(jì)數(shù)結(jié)果產(chǎn)生一定負(fù)面影響。如果在粘連情況下直接利用文獻(xiàn)[9]中的方法去除培養(yǎng)皿邊緣,會(huì)造成很大的計(jì)數(shù)誤差。對(duì)此問題,采用Hough 變換[10]來檢測(cè)圓形培養(yǎng)皿邊緣區(qū)域,從而有效地剔除培養(yǎng)皿邊緣以及邊緣以外信息,同時(shí)保留與培養(yǎng)皿邊緣產(chǎn)生粘連的菌落信息,保證計(jì)數(shù)的準(zhǔn)確性。
利用Hough 變換的算法把圓檢測(cè)出之后,同時(shí)能得到霍夫圓的圓心坐標(biāo),根據(jù)培養(yǎng)皿的直徑R即可再次遍歷圖像上的像素點(diǎn),并以Hough 圓的圓心,以R為半徑的圓及其外部像素全部置為0 或255 即可將培養(yǎng)皿的邊緣剔除,剔除邊緣后的菌落圖像如圖9 所示。
圖9 剔除培養(yǎng)皿邊緣后的圖像
為了驗(yàn)證基于改進(jìn)Otsu + Hough 圖像處理算法的菌落計(jì)數(shù)算法是否能夠解決實(shí)際問題,對(duì)實(shí)際圖像采集設(shè)備待處理圖片進(jìn)行相關(guān)算法測(cè)試,實(shí)驗(yàn)運(yùn)行算法環(huán)境為Python 的OpenCV 庫(kù),其具體算法流程圖如圖10 所示。在圖像經(jīng)過圖像預(yù)處理后,對(duì)相應(yīng)二值圖像進(jìn)行遍歷處理,尋找在同一個(gè)連通域并且是非零的像素點(diǎn),如果目標(biāo)點(diǎn)在相同連通域內(nèi),證明其屬于同一個(gè)菌落[11]。
圖10 菌落計(jì)數(shù)算法流程
利用遍歷算法找出所有連通區(qū)域后,在二值圖像上繪制相關(guān)連通域,設(shè)定閾值面積大小,將每個(gè)連通域面積和閾值面積大小對(duì)比。如果連通域的面積大于預(yù)設(shè)的閾值,說明連通域?yàn)榫?,否則將它當(dāng)作噪聲來去噪,得到最終的菌落個(gè)數(shù)。分別對(duì)圖8、圖9 進(jìn)行菌落計(jì)數(shù),最終計(jì)數(shù)結(jié)果,如圖11、12 所示。
圖11 培養(yǎng)皿邊緣去除前計(jì)數(shù)
圖12 培養(yǎng)皿邊緣去除后計(jì)數(shù)
經(jīng)過上述分析,本實(shí)驗(yàn)在Python3.7.0 環(huán)境下對(duì)將近100 多幅圖像進(jìn)行相關(guān)實(shí)驗(yàn)測(cè)試,并和人工計(jì)數(shù)結(jié)果相比較。測(cè)試結(jié)果如表1 所示,實(shí)驗(yàn)結(jié)果和人工計(jì)數(shù)結(jié)果偏差率較小,足夠滿足實(shí)際運(yùn)用需求。
表1 菌落計(jì)數(shù)
為了解決人工計(jì)算菌落數(shù)的準(zhǔn)確率和效率低等問題,提出了一種改進(jìn)Otsu + Hough 圖像處理算法的菌落自動(dòng)計(jì)數(shù)方法。該方法利用改進(jìn)的Otsu +Hough 算法和多種其他圖像處理算法對(duì)采集到的菌落圖像進(jìn)行處理,根據(jù)最后遍歷出來連通域的面積來確定相對(duì)應(yīng)菌落的數(shù)量多少。在保證菌落計(jì)數(shù)的準(zhǔn)確性基礎(chǔ)上,提高了計(jì)數(shù)的工作效率,降低了工作人員工作強(qiáng)度,并且避免了培養(yǎng)皿頻繁取出導(dǎo)致的環(huán)境變化對(duì)菌落生長(zhǎng)產(chǎn)生不良影響。綜上所述改方法在準(zhǔn)確率上滿足實(shí)驗(yàn)要求,相對(duì)人工計(jì)數(shù)結(jié)果誤差較小,程序平均圖像處理時(shí)間較短,適合菌落計(jì)數(shù)或者同類計(jì)數(shù)中使用,復(fù)現(xiàn)率較高。