李梅竹 王勝
摘 要:針對葡萄種植中切根蟲的危害,采用基于OpenCV的圖像處理方法設(shè)計(jì)葡萄樹干精準(zhǔn)對靶施藥系統(tǒng)的視覺模塊。通過圖像處理實(shí)驗(yàn),得出基于mean shift 的圖像分割結(jié)果,邊緣檢測結(jié)果以及直線檢測結(jié)果。實(shí)驗(yàn)結(jié)果證明該模塊設(shè)計(jì)可有效的區(qū)別出葡萄園中彎曲的葡萄樹干和筆直的樹樁。
關(guān)鍵詞:OpenCV;視覺模塊;圖像處理
中圖分類號:TP23 文獻(xiàn)標(biāo)識碼:A
1 引 言
對于世界葡萄種植來說,切根蟲(一種夜蛾的幼蟲)是危害葡萄樹生長的主要害蟲之一。精準(zhǔn)對靶施藥系統(tǒng)可在葡萄樹干上施加一個均勻的、寬度大于等于20cm的“障礙藥帶”,可有效的阻止切根蟲夜晚從樹根爬到樹冠啃食新芽。由于在實(shí)際葡萄園中,每隔幾棵葡萄樹就會立一根樹樁拉著鐵絲牽引葡萄藤,所以在施藥時需要區(qū)分筆直的樹樁和彎曲的葡萄樹干,避免不必要的施藥。因此本文基于OpenCV的圖像處理方法進(jìn)行精準(zhǔn)對靶施藥系統(tǒng)視覺模塊設(shè)計(jì)。
2 基于OpenCV的圖像處理
OpenCV軟件由C函數(shù)以及C++函數(shù)組成,可以進(jìn)行例如特征檢測、目標(biāo)分割、三維重建等圖像分析。在圖像處理、計(jì)算機(jī)視覺等方面,OpenCV起到了無可取代的重要作用。在不遠(yuǎn)的將來,OpenCV對工業(yè)、航天、軍事、人機(jī)對話等領(lǐng)域都起到了及其關(guān)鍵的作用。隨著圖像分析、視覺技術(shù)的發(fā)展,OpenCV將逐漸適用于更多的場合[1]。本文研究中采用計(jì)算機(jī)視覺技術(shù),通過CCD攝像頭采集圖片,使用OpenCV來檢測采集到的葡萄樹干和木樁圖片的外輪廓線,從而判斷噴藥設(shè)備前方的物體是彎曲的葡萄樹干還是筆直的木樁,若判定為彎曲的葡萄樹干則噴藥,若判定為筆直的木樁,則發(fā)出信號,讓拖車?yán)^續(xù)前行。
2.1 圖像預(yù)處理
在進(jìn)行輪廓檢測前,首先要對采集到的葡萄樹干和木樁的圖片進(jìn)行預(yù)處理,主要是進(jìn)行形態(tài)學(xué)去噪以及圖像平滑處理[2]。
2.1.1 形態(tài)學(xué)去噪
數(shù)學(xué)形態(tài)學(xué),其本質(zhì)是通過一些方法實(shí)現(xiàn)圖像處理,比如:利用結(jié)構(gòu)元素提取圖像形狀等。數(shù)學(xué)形態(tài)學(xué)的基本操作有兩種:膨脹和腐蝕。膨脹使圖像區(qū)域變大,可以實(shí)現(xiàn)小空間和縫隙的填充。腐蝕使圖像區(qū)域變小,可以用來去掉圖像菱角。膨脹和腐蝕兩者沒有互為逆運(yùn)算,可以結(jié)合使用,對圖像先膨脹再腐蝕,或者先腐蝕再膨脹。前一種運(yùn)算稱為閉運(yùn)算,后一種稱為開運(yùn)算。兩種運(yùn)算在數(shù)學(xué)形態(tài)學(xué)中都很重要。閉運(yùn)算可以彌補(bǔ)裂縫、填補(bǔ)孔洞,開運(yùn)算可以去除毛刺和孤立小點(diǎn),兩種運(yùn)算對物體的形狀和位置不造成改變。本文中先用CCD相機(jī)拍攝照片,然后對照片進(jìn)行閉運(yùn)算和開運(yùn)算,使輪廓平滑,沒有毛刺和缺口。
2.1.2 利用中值濾波進(jìn)行圖像平滑處理
圖像平滑處理多用于減少圖像噪聲,是數(shù)字圖像處理技術(shù)的一種。對于在葡萄種植園中采集到的葡萄樹干或者木樁的圖片,由于場地等的原因,不可避免的存在許多噪聲,進(jìn)行平滑處理時最重要的是要保持葡萄樹干或者木樁輪廓的清晰,還可以去除高頻噪聲,綜合考慮,我們選擇中值濾波。
中值濾波屬于非線性濾波,它可以抑制圖像噪聲和脈沖干擾,保護(hù)圖像,使圖像的邊緣不變模糊。也可以將圖像的灰度信息保留的更多,提高對圖像輪廓檢測的質(zhì)量[3]。
2.2 基于mean shift 的圖像分割
mean shift 是通過迭代,運(yùn)用非參數(shù)進(jìn)行概率密度估算的方法?;谠砗唵巍?shù)少、不需要預(yù)處理等特點(diǎn),mean shift 主要被運(yùn)用在追蹤目標(biāo)、分割圖像等方向[4]。使用mean shift 進(jìn)行圖像分割可以被當(dāng)作特征空間聚類問題處理,因?yàn)楸贿x取的空間的色彩、灰度、梯度不同,概率密度函數(shù)將會梯度上升,mean shift 沿著該方向找到局部最大值,可是將具特征類似的向量分割開來,歸為一類。
2.3 邊緣檢測
邊緣檢測多是指檢測圖像中灰度或者亮度變化最大的部位,一般是指前景、背景的交界處,這些部位會導(dǎo)致數(shù)學(xué)算法模型中的一階導(dǎo)數(shù)不連續(xù),所以需要利用圖像的階梯函數(shù),以此來求圖像的邊緣[5]。用的最多的方法有:Roberts 算子、Sobel 算子、Prewitt 算子和Canny 算子。
由于Canny 算子既用到了一階導(dǎo)數(shù),也用到了二階導(dǎo)數(shù),所以它的結(jié)果更加精確,因此本文運(yùn)用Canny 算子對圖像邊緣進(jìn)行檢測。對于圖像處理,先對原圖進(jìn)行灰度處理,然后通過Canny 算子就可以將圖片中的物體輪廓較為精準(zhǔn)的找出。
運(yùn)用Canny 算子進(jìn)行邊緣檢測,需要符合2個要求:①信噪比;②單位邊緣響應(yīng)。計(jì)算算子的零交叉點(diǎn)的平均距離,若該距離滿足式①,則單位邊緣只存在一個響應(yīng)[6]。
3 圖像處理試驗(yàn)及結(jié)果
本文利用OpenCV 提供的圖像處理函數(shù)來對獲得的靶標(biāo)圖像進(jìn)行處理,先基于mean shift 進(jìn)行圖像分割,然后通過Canny 算子進(jìn)行邊緣檢測,得到靶標(biāo)外輪廓線,最后運(yùn)用直線檢測的方式來分析靶標(biāo)的曲直,其工作流程如圖1所示。
圖1 工作流程圖
計(jì)算技術(shù)與自動化2016年6月
第35卷第2期李梅竹等:基于OpenCV精準(zhǔn)對靶施藥系統(tǒng)視覺模塊設(shè)計(jì)
3.1 基于mean shift 的圖像結(jié)果
一般而言一副圖像的特征點(diǎn)至少可以提取出5 維,即(x,y,r,g,b),眾所周知,mean shift 經(jīng)常用來尋找模態(tài)點(diǎn),即密度最大的點(diǎn)。所以這里同樣可以用它來尋找這5 維空間的模態(tài)點(diǎn),由于不同的點(diǎn)最終會收斂到不同的峰值,所以這些點(diǎn)就形成了一類,這樣就完成了圖像分割的目的,有點(diǎn)聚類的意思在里面。
需要注意的是圖像像素的變化范圍和坐標(biāo)的變化范圍是不同的,所以在使用窗口對這些數(shù)據(jù)點(diǎn)進(jìn)行模態(tài)檢測時,需要使用不同的窗口半徑。因此在OpenCV自帶的mean shift分割函數(shù)pyrMeanShiftFiltering( )函數(shù)中,就專門有2個參數(shù)供選擇空間搜索窗口半徑和顏色窗口搜索半徑的。 由函數(shù)名pyrMeanShiftFiltering可知,這里是將mean shift算法和圖像金字塔相結(jié)合用來分割的,所以其參數(shù)列表中就有一個專門定義所需金字塔層數(shù)的變量。本次試驗(yàn)的主要過程是,首先設(shè)置好參數(shù),然后用函數(shù)pyrMeanShiftFiltering( )對輸入的圖像進(jìn)行分割。分割后的結(jié)果保存在該函數(shù)的第二個參數(shù)即輸出圖像中,最后根據(jù)該分割圖像的特點(diǎn)用floodFill( )函數(shù)對其分割的結(jié)果用不同的顏色進(jìn)行填充。試驗(yàn)中選取的樹干原圖如圖2(a)、1(b)所示,圖像分割后的結(jié)果如圖3(a)、2(b)所示。endprint
3.2 邊緣檢測結(jié)果
對圖像基于mean shift的圖像分割后,采用Canny算子進(jìn)行邊緣檢測。Canny算法的步驟是①降噪,任何邊緣檢測算法不可能在未經(jīng)處理的原始數(shù)據(jù)上工作,第一步是對原始數(shù)據(jù)與高斯mask作卷積,得到的圖像與原始圖像相比有些輕微的模糊。②尋找圖像中的亮度梯度。圖像中的邊緣可能會指向不同的方向,所以Canny算法使用了4個mask檢測水平、數(shù)值以及對角線方向的邊緣。③在圖像中跟蹤邊緣。較高的亮度梯度比較有可能是邊緣,但是沒有一個確定的值來限定多大的亮度梯度是邊緣,所以Canny使用了滯后閾值。上述過程完成可得到一個二值圖像。通過Canny算子就可以將圖片中樹干的輪廓找出,其試驗(yàn)結(jié)果如圖4所示。從圖中可以看出采用OpenCV的Canny算子進(jìn)行邊緣檢測可以較為完整的將前景區(qū)從背景區(qū)域中分離出來,得到比較理想的樹干輪廓線,為進(jìn)一步判斷輪廓線的曲直打下基礎(chǔ)。3.3 直線檢測結(jié)果
OpenCV使用霍夫變換函數(shù)來進(jìn)行直線檢測。該變換利用點(diǎn)與線的對偶性,通過曲線表達(dá)形式,將空間中的曲線轉(zhuǎn)變?yōu)橐粋€點(diǎn),于是,對于原圖的曲線檢測問題變?yōu)樵趨?shù)空間內(nèi)尋找峰值的問題。 具體的說,利用直線的參數(shù)方程ρ=xcosθ+ysinθ將(x,y)空間中的一個點(diǎn)變成了一條正弦曲線,如果若干個點(diǎn)在一條直線上,那么它們對應(yīng)的正弦曲線也會交于同一個點(diǎn)。所以檢測直線的問題,就轉(zhuǎn)化為了判斷交點(diǎn)峰值的問題。設(shè)置一個峰值,大于這個值,就判為直線。
需要注意以下幾點(diǎn):首先,HoughLines檢測出來的不是線段,而是(ρ,θ)對,使用std vector
4 結(jié)束語
由于在實(shí)際葡萄園中,每隔幾棵葡萄樹就會立一根樹樁拉著鐵絲牽引葡萄藤,所以在施藥時需要區(qū)分筆直的樹樁和彎曲的葡萄樹干。本文主要介紹了基于OpenCV的圖像處理方法,并給出了對一棵彎曲的樹和一棵筆直的樹的基于mean shift的圖像分割結(jié)果、邊緣檢測結(jié)果以及直線檢測結(jié)果。實(shí)驗(yàn)結(jié)果證明該模塊設(shè)計(jì)可有效的區(qū)別出葡萄園中彎曲的葡萄樹干和筆直的樹樁。
參考文獻(xiàn)
[1] 于仕琪,劉瑞禎.OpenCV教程(基礎(chǔ)篇)[M].北京:北京航空航天出版社,2007.
[2] 景曉軍.圖像處理技術(shù)及其應(yīng)用[M].北京:國防工業(yè)出版社,2005.
[3] 劉慧英,王小波.基于OpenCV的車輛輪廓檢測[J].科學(xué)技術(shù)與工程,2010(12): 2987-2991.
[4] SONG N, GU I Y H, CAO Z, et al. Enhanced spatial-range mean shift color image segmentation by using convergence frequency and position[C]//Prof. of 14th European Signal Processing Conference (EUSIPCO 2006), Florence, Italy. 2006.
[5] 陰國富.基于閾值法的圖像分割技術(shù)[J].現(xiàn)代電子技術(shù),2008,30(23):107-108.
[6] 馬頌德,張正友.計(jì)算機(jī)視覺:計(jì)算理論與算法基礎(chǔ)[M].北京:科學(xué)出版社,1998.