蔣永翔,孫美華,王 彤,閆偉偉,馬一文
(天津職業(yè)技術(shù)師范大學(xué) 機(jī)器人及智能裝備研究院,天津 300222)
菌落是由細(xì)菌細(xì)胞在培養(yǎng)皿中繁殖出的可見(jiàn)生長(zhǎng)物[1-2]。通過(guò)對(duì)菌落數(shù)量的測(cè)定可以判別食品被細(xì)菌污染的程度[3]。隨著計(jì)算機(jī)與圖像分析技術(shù)的不斷發(fā)展,利用計(jì)算機(jī)及圖像處理工具進(jìn)行菌落計(jì)數(shù),可降低工作強(qiáng)度,提高工作效率[4-6]。對(duì)于菌落計(jì)數(shù)的研究,國(guó)內(nèi)外研究人員在算法、培養(yǎng)設(shè)備方面取得了一些研究成果。周瑩莉等人用最大類間方差法、距離變換、分水嶺算法等處理菌落圖像。用八鄰域邊緣跟蹤、區(qū)域填充算法實(shí)現(xiàn)菌落計(jì)數(shù),重現(xiàn)性好,速度快,但針對(duì)粘連嚴(yán)重的菌落,計(jì)數(shù)誤差較大[7]。孫琪等人提出了一種用自適應(yīng)理想圖像重建進(jìn)行菌落檢測(cè)的方法。該方法側(cè)重于消除光照偏置,重新構(gòu)建理想的菌落圖像。在重建的理想菌落圖像中,菌落區(qū)域?qū)?yīng)高亮度部分,背景區(qū)域?qū)?yīng)較低亮度部分,使得菌落區(qū)域與背景區(qū)域有較高的類間差以及較低的類內(nèi)差。從而很容易地檢測(cè)出細(xì)菌菌落,完成計(jì)數(shù)[8]。但是當(dāng)光照分布極其不均勻以及對(duì)比不夠明顯時(shí),計(jì)數(shù)結(jié)果會(huì)有較大誤差。張力新等人提出一種基于改進(jìn)水平集的全自動(dòng)菌落分割、計(jì)數(shù)方法[9]。該方法用多相水平集算法對(duì)菌落目標(biāo)進(jìn)行自適應(yīng)分割,利用凹點(diǎn)檢測(cè)方法對(duì)粘連目標(biāo)的計(jì)數(shù)進(jìn)行修正。但是對(duì)培養(yǎng)皿邊緣的菌落進(jìn)行計(jì)數(shù)時(shí)存在較大誤差。因此研究一種精確快速地菌落計(jì)數(shù)算法十分必要。
本文為實(shí)現(xiàn)菌落自動(dòng)計(jì)數(shù)利用python設(shè)計(jì)了一種算法,算法流程如圖1所示,首先通過(guò)搭建的圖像采集系統(tǒng)對(duì)培養(yǎng)皿拍照來(lái)獲取菌落圖像,進(jìn)而采用灰度處理、中值濾波的方法對(duì)圖像進(jìn)行預(yù)處理,通過(guò)邊緣檢測(cè)連接提取培養(yǎng)皿邊緣及邊緣處的菌落信息,然后對(duì)圖像進(jìn)行迭代閾值分割,得到菌落的二值化圖像[10],再利用霍夫變換進(jìn)行培養(yǎng)皿邊緣剔除,最后用連通域計(jì)數(shù)法對(duì)二值化圖像中的菌落進(jìn)行標(biāo)號(hào),完成菌落計(jì)數(shù)。實(shí)驗(yàn)對(duì)比分析了不同閾值下菌落圖像自動(dòng)計(jì)數(shù)同人工計(jì)數(shù)的結(jié)果,通過(guò)與人工計(jì)數(shù)誤差對(duì)比,計(jì)數(shù)精度達(dá)到了90%,滿足菌落計(jì)數(shù)的要求。
圖1 菌落計(jì)數(shù)流程圖
菌落自動(dòng)計(jì)數(shù)系統(tǒng)的硬件部分是由培養(yǎng)皿控制柜和計(jì)算機(jī)搭建起來(lái)的,如圖2所示,控制柜中共放置12個(gè)培養(yǎng)皿存放架,每個(gè)放置架按照兩行5列的排列方式設(shè)計(jì),可放置10個(gè)培養(yǎng)皿。培養(yǎng)皿放置在存放架上如圖3所示,由下方的培養(yǎng)皿加熱板進(jìn)行菌落培養(yǎng)溫度控制。設(shè)備采用相機(jī)固定不動(dòng)的方式,通過(guò)機(jī)械搬運(yùn)手將培養(yǎng)皿固定板在直角坐標(biāo)系下運(yùn)動(dòng)完成取出和拍照。
圖2 菌落自動(dòng)計(jì)數(shù)系統(tǒng)
圖3 培養(yǎng)皿分布
選定??倒I(yè)相機(jī)及鏡頭作為控制柜的采集設(shè)備、德肯照燈作為機(jī)器視覺(jué)光源。將相機(jī)設(shè)置在距離光源385mm的位置,拍照設(shè)備布局圖如圖4(a)所示,搭建完成后的實(shí)物細(xì)節(jié)圖如圖4(b)所示。利用本課題設(shè)計(jì)的培養(yǎng)皿計(jì)數(shù)系統(tǒng),可在菌落培養(yǎng)的同時(shí)進(jìn)行全自動(dòng)圖像采集和菌落計(jì)數(shù),避免了培養(yǎng)皿取出檢測(cè)等人為因素對(duì)檢測(cè)精度的影響。
圖4 圖像采集設(shè)備
本文先在python中對(duì)采集到的菌落圖像進(jìn)行灰度處理得到灰度圖像,然后對(duì)灰度圖像進(jìn)行中值濾波,用像素點(diǎn)鄰域灰度值的中值來(lái)代替該像素點(diǎn)的灰度值,中值濾波不受鄰域內(nèi)比典型灰度值大很多或小很多的灰度值的影響,可以在很好的保留住圖像的邊緣細(xì)節(jié)部分的同時(shí)有效的去除椒鹽噪聲、脈沖噪聲等干擾[11-13]。該種預(yù)處理方法步驟如下。
1)將要處理的菌落圖像每一像素點(diǎn)的像素值中的紅R(x,y)、綠G(x,y)、藍(lán)B(x,y)三個(gè)分量的平均值作為其灰度值。
其中,(x,y)表示像素點(diǎn)坐標(biāo)。
2)選取目標(biāo)點(diǎn),將目標(biāo)點(diǎn)f(x,y)周圍八個(gè)像素點(diǎn)的灰度值及目標(biāo)點(diǎn)的灰度值按照從小到大的順序排列。取排列好的灰度值的中值作為目標(biāo)點(diǎn)的新灰度值,3×3圖像的中值濾波示意圖如圖5所示。
圖5 3×3中值濾波原理
預(yù)處理前后的菌落圖像如圖6(a)、圖6(b)所示。
圖6 菌落預(yù)處理圖像
邊緣檢測(cè)及連接是為了在減少邊緣剔除的數(shù)據(jù)處理量的同時(shí)將培養(yǎng)皿邊緣以及菌落的特征信息提取出來(lái),從而使算法的運(yùn)算速度更快、精度更高。本文使用Sobel算子來(lái)進(jìn)行菌落邊緣的檢測(cè)及連接[14]。Sobel算子的卷積因子為
通過(guò)上述兩個(gè)卷積因子對(duì)圖像分別進(jìn)行橫向以及縱向的卷積計(jì)算,所得最大值即為梯度幅值,計(jì)算結(jié)果展開(kāi)如下:
用式(4)計(jì)算梯度方向。當(dāng)θ取零時(shí),在y方向的求導(dǎo)結(jié)果也為零,說(shuō)明該位置存在縱向邊緣,其對(duì)應(yīng)的點(diǎn)為邊緣點(diǎn),所有邊緣點(diǎn)連接形成的界限即為邊緣。
Sobel算子邊緣檢測(cè)效果如圖7所示,可以看出,使用Sobel算子進(jìn)行邊緣檢測(cè),檢測(cè)到的培養(yǎng)皿邊緣和菌落邊緣輪廓十分明顯。
圖7 Sobel算子邊緣檢測(cè)效果
本文采用迭代閾值分割法將菌落目標(biāo)與背景分開(kāi)。先將待測(cè)圖像分成若干區(qū)域,把每一小區(qū)域的最大灰度值和最小灰度值的平均值作為初始閾值T0[15]。當(dāng)初始閾值為T(mén)0時(shí),用初始的開(kāi)關(guān)函數(shù)把這一小區(qū)域圖像的像素分成菌落目標(biāo)(灰度值大于T0的像素群)、背景(灰度值小于T0的像素群)兩部分[16],灰度值最高的是菌落目標(biāo)(黑色像素點(diǎn)灰度值為0,白色像素點(diǎn)灰度值為255),對(duì)小區(qū)域中的每個(gè)灰度值進(jìn)行迭代分析,確定圖像中每個(gè)目標(biāo)對(duì)應(yīng)的分割閾值,并將結(jié)果取平均以獲取新的閾值,之后再次按此閾值迭代法將此小塊圖像分成菌落目標(biāo)、背景,生成新的迭代函數(shù),重復(fù)此閾值迭代法,直到迭代收斂于某個(gè)穩(wěn)定的閾值[17],此刻得到的閾值即為該小區(qū)域圖像的最佳閾值Ti+1。然后將每一小區(qū)域的最佳閾值進(jìn)行比較,從中選出最合適的閾值。迭代閾值分割的流程如圖8所示。
圖8 迭代閾值分割流程圖
圖8中δ為趨近于0的數(shù)。
迭代閾值分割的數(shù)學(xué)表達(dá)式如下:
其中,Ti+1為最佳閾值。L為灰度級(jí)的個(gè)數(shù),k為灰度值,hk是灰度值為k的像素點(diǎn)的個(gè)數(shù)。
以Ti+1=130、150、180為例,圖9為不同閾值下檢測(cè)的菌落圖像數(shù)據(jù),可以看出,閾值為130時(shí),一些背景像素被解釋為目標(biāo)像素,如圖9(a)中標(biāo)記為4、7的像素等被認(rèn)為是目標(biāo)像素進(jìn)行計(jì)數(shù),導(dǎo)致菌落數(shù)量檢測(cè)不佳;閾值為150時(shí),目標(biāo)像素與背景像素解釋較為準(zhǔn)確,計(jì)數(shù)結(jié)果比較準(zhǔn)確;閾值為180時(shí),一些目標(biāo)像素被錯(cuò)誤地解釋為背景像素,如圖9(b)中標(biāo)記為2、9的像素等被認(rèn)為是背景像素在圖9(c)中未被計(jì)數(shù),導(dǎo)致菌落計(jì)數(shù)誤差較大,據(jù)此,將最佳閾值參數(shù)設(shè)置為150。
圖9 不同閾值檢測(cè)到的菌落圖像數(shù)據(jù)
在菌落圖像中,有時(shí)會(huì)出現(xiàn)兩個(gè)菌落生長(zhǎng)在一起的情況即“粘連”現(xiàn)象,如圖10所示。
圖10 菌落粘連示意圖
菌落粘連現(xiàn)象會(huì)導(dǎo)致菌落計(jì)數(shù)結(jié)果不準(zhǔn)確,因此需要將粘連的菌落分割開(kāi)以保證計(jì)數(shù)的準(zhǔn)確性。
本文采用自適應(yīng)距離變換的分水嶺算法來(lái)分割菌落粘連的部分。距離變換的原理是將二值化圖像中每個(gè)像素點(diǎn)與背景之間的最短距離作為該像素點(diǎn)的灰度值,最短距離是通過(guò)計(jì)算整個(gè)圖像中的每一個(gè)像素點(diǎn)與所有背景像素點(diǎn)之間的距離,從中找到最小值得到的,得到每個(gè)像素點(diǎn)的灰度值即得到了灰度圖像[18]。如圖11所示,先從左上角開(kāi)始,從上到下,從左到右,計(jì)算像素f(x,y)到像素1、2、3、4的距離。再?gòu)挠蚁陆情_(kāi)始,從下到上,從右到左,計(jì)算像素(x,y)到9、8、7、6的距離。
圖11 距離變換原理圖
根據(jù)式(6)可得到每個(gè)像素點(diǎn)的灰度值。
其中,(x,y)代表中心像素點(diǎn)的位置,f(x,y)代表(x,y)像素點(diǎn)的像素值;q代表3×3模版中其他像素點(diǎn)的位置。D((x,y),q)代表(x,y)像素點(diǎn)與q像素點(diǎn)之間的距離。
然后利用分水嶺算法處理經(jīng)過(guò)距離變換得到的灰度圖像[19],找到不同灰度值的像素點(diǎn),選取處于分水嶺邊界的灰度值作為邊界點(diǎn)標(biāo)出,邊界就將粘連菌落分割開(kāi)來(lái)。粘連目標(biāo)做自適應(yīng)距離變換的分水嶺處理效果圖如圖12所示。該算法有效分割了粘連目標(biāo),使目標(biāo)計(jì)數(shù)點(diǎn)更為清晰,提高了計(jì)數(shù)的準(zhǔn)確性。
圖12 菌落粘連分割圖
培養(yǎng)皿邊緣的白色像素會(huì)使計(jì)數(shù)結(jié)果產(chǎn)生誤差,為避免誤差的產(chǎn)生,需將得到的二值化圖像進(jìn)行邊緣處理,這里使用霍夫變換(Hough)來(lái)剔除培養(yǎng)皿邊緣所在的圓以及邊緣所在的圓以外的信息[14]。
本文所用培養(yǎng)皿直徑為90mm,利用霍夫變換檢測(cè)到圖中直徑為90mm的圓即為培養(yǎng)皿邊緣,將該圓以及圓外所有像素值為255的像素點(diǎn)的像素值置為0,就將培養(yǎng)皿邊緣剔除了。剔除培養(yǎng)皿邊緣后的菌落圖像如圖13所示??梢钥闯?,霍夫變換可以很準(zhǔn)確地剔除培養(yǎng)皿邊緣。
圖13 剔除培養(yǎng)皿邊緣后的菌落圖像
本文提出了一種連通域計(jì)數(shù)方法,在對(duì)連通區(qū)域進(jìn)行掃描檢測(cè)時(shí),首先申請(qǐng)一個(gè)一維數(shù)組M[i,j],其中i代表連通區(qū)域個(gè)數(shù),j代表每個(gè)連通區(qū)域中白色像素點(diǎn)的個(gè)數(shù)。其具體算法為:將二值化圖像從左向右,從上向下進(jìn)行掃描,掃描的核心是尋找非零的像素點(diǎn),處在同一個(gè)連通域的非零像素,認(rèn)為是來(lái)自同一個(gè)菌落[20],處于不同連通域的非零像素,認(rèn)為來(lái)自不同的菌落。將遇到第一個(gè)白色像素點(diǎn)即非零像素點(diǎn)記為N1點(diǎn),把N1點(diǎn)做為種子點(diǎn),將其標(biāo)記值設(shè)為0,并將與其連通的白色像素點(diǎn)的標(biāo)記值同樣設(shè)為0,直到連通域內(nèi)沒(méi)有未被標(biāo)記的白色像素點(diǎn)。然后將數(shù)組M中的i值加1,按照上述方法標(biāo)記下一個(gè)連通區(qū)域,標(biāo)記過(guò)的點(diǎn)不會(huì)被重復(fù)標(biāo)記,掃描整幅圖像,直到?jīng)]有未標(biāo)記的相連的白色像素點(diǎn)則完成了對(duì)圖像中菌落的計(jì)數(shù)。菌落計(jì)數(shù)流程如圖14所示。
圖14 菌落計(jì)數(shù)流程圖
計(jì)數(shù)后的微生物圖像如圖15所示,圖中標(biāo)出了菌落的輪廓,且給每個(gè)菌落分別標(biāo)記了序號(hào),標(biāo)記值的最大值為菌落個(gè)數(shù),效果明顯,易于觀察。
圖15 菌落計(jì)數(shù)圖像
通過(guò)對(duì)比菌落圖像人工計(jì)數(shù)結(jié)果與菌落圖像在不同閾值下自動(dòng)計(jì)數(shù)的結(jié)果的誤差,從而驗(yàn)證自動(dòng)計(jì)數(shù)結(jié)果的準(zhǔn)確性。由圖16可知,自動(dòng)計(jì)數(shù)結(jié)果與人工計(jì)數(shù)結(jié)果的偏差最大約11%,偏差最小約5%,平均偏差在10%左右。其中,菌落數(shù)目在50個(gè)以內(nèi)的樣本,平均偏差為8%。菌落數(shù)目大于50個(gè)的樣本,平均偏差是9.5%。且對(duì)于菌落定位清晰,效果良好。均達(dá)到了設(shè)計(jì)要求。
圖16 程序計(jì)數(shù)與人工計(jì)數(shù)對(duì)比圖
本文提出的基于圖像處理的菌落計(jì)數(shù)算法實(shí)現(xiàn)了菌落計(jì)數(shù)自動(dòng)化。其中菌落的分割是本次計(jì)數(shù)的關(guān)鍵步驟,并且該算法在真實(shí)環(huán)境中進(jìn)行(而不是在受控環(huán)境中)。實(shí)驗(yàn)過(guò)程中面臨的挑戰(zhàn)是菌落背景的大小而造成的干擾,因?yàn)楸尘氨徽J(rèn)為是噪音,通常會(huì)掩蓋菌落的可見(jiàn)性。因此,改善用于采集菌落圖像的設(shè)備以及增強(qiáng)采集到的圖像是十分必要的。本文提出了連通域計(jì)數(shù)法完成計(jì)數(shù)的最后一步。并且在類似的對(duì)象計(jì)數(shù)項(xiàng)目中也同樣可以引用該方法,可復(fù)現(xiàn)性較高??傮w而言,基于該方法的菌落計(jì)數(shù)結(jié)果與人工計(jì)數(shù)結(jié)果相比誤差較小,且該方法非常有前途,而且替代性較強(qiáng),經(jīng)濟(jì)快速。