郭宇 高雁杰
【摘 要】圖像邊緣包含圖像的大量重要信息,它主要存在于目標與目標、目標與背景、區(qū)域與區(qū)域之間。圖像邊緣的圖像的邊緣檢測是獲取圖像信息的一個重要環(huán)節(jié)。圖像邊緣的檢測結(jié)果的正確性和可靠性將直接影響到機器視覺系統(tǒng)對客觀世界的理解。本文將Sobel算子、形態(tài)學梯度、Canny算子三種邊緣提取方法應用于油水界面檢測,實驗對比了這三種方法的油水界面檢測效果,可以看出每一種算法的特性和他們各自的適用狀況。
【關(guān)鍵詞】邊緣檢測;圖像處理;油水界面
0 引言
圖像邊緣是圖像最基本的特征。邊緣是指圖像中周圍像素灰度變化不連續(xù)的那些像素的集合。圖像的邊緣部分集中了圖像的大部分信息,圖像邊緣的檢測與提取對于整個圖像的別與理解是非常重要的。我們將邊緣定義為圖像中灰度發(fā)生急劇變化的區(qū)域邊界,圖像灰度的變化情況可以用圖像灰度分布的梯度來反映,因此可以用局部圖像微分來獲得邊緣檢測算子[1]。
傳統(tǒng)的邊緣檢測算法包括空域微分算子和擬合曲面兩種方法??沼蛭⒎炙阕影≧oberts算子、Prewitt算子、Sobel算子、Laplace算子、Canny算子等;擬合曲面是利用當前像素領(lǐng)域中的一些像素值擬合一個曲面,然后求這個連續(xù)曲面在當前像素出的梯度,用微分算子的方法進行邊緣檢測。除此以外,以數(shù)學形態(tài)學為基礎(chǔ)的形態(tài)學梯度算法在圖像處理中已經(jīng)得到了廣泛的應用。形態(tài)學梯度能夠比較精確地反映圖像梯度的變化,梯度值的大小反映了原圖像信息中像素灰度值變化的劇烈程度。
圖像的邊緣檢測已經(jīng)廣泛應用于各個領(lǐng)域當中。針對油水分離問題,油水界面的邊緣檢測顯得尤為重要。工業(yè)上針對大型油田目前國內(nèi)普遍采用重力油水分離法,油水混合物具有復雜的物理特性,為了達到將油水較好地分離,油水界面檢測技術(shù)顯得尤為重要[2]。從測量原理的角度來看,目前已經(jīng)有浮子式、電容式、磁致伸縮式、光纖式及射線式等不同的界面檢測儀器,而這些儀器普遍存在非接觸性差、可維護性差、精度不高的缺點。
本文從計算機視覺角度出發(fā),利用邊緣檢測算法對油水界面實驗圖像進行檢測,并對傳統(tǒng)Sobel算子、形態(tài)學梯度和Canny算子對油水界面實驗圖像的邊緣檢測的效果進行各方面的對比,通過圖像效果的比較加深對三種方法的理解,對不同方法的優(yōu)缺點有一定的認識,在實際應用中更為靈活地掌握,從而較為準確地獲取圖像的邊緣信息。
1 幾種邊緣檢測算子的算法實現(xiàn)
1.1 Sobel算子的算法實現(xiàn)
對于數(shù)字圖像{f(i,j)},的每個像素,Sobel梯度算子首先進行加權(quán)平均,再微分,然后進行一階微分處理,檢測出邊緣點。
為了得到一幅圖像的梯度,在圖像的每一個像素位置處都需要計算偏導數(shù)?墜f/?墜x和?墜f/?墜y,因此,可以使用小區(qū)域模板卷積來進行近似計算[3]。
卷積算子(左為垂直方向,右為水平方向)
使用卷積算子進行卷積運算,使用如公式(1),求出梯度值G(i,j)。
G(i,j)=|f(i-1,j+1)+2*f(i,j+1)+f(i+1,j+1)-f(i-1,j-1)-2*f(i,j-1)-f(i+1,j-1)|+|f(i-1,j-1)+2*f(i-1,j)+f(i-1,j+1)-f(i+1,j-1)-2*f(i+1,j)-f(i+1,j+1)| (1)
適當選取閾值使圖像二值化Threshold,梯度值G(i,j)大于等于閾值Threshold的點為邊緣點,反之則不是邊緣點,從而實現(xiàn)邊緣檢測。
算法的主要步驟[3]:
(1)分別將兩個方向模板沿著圖像從一個像素移動到另一個像素,并將像素的中心與圖像中的某個像素位置重合;
(2)將模板內(nèi)的系數(shù)與其圖像上相對應的像素值f(x,y)相乘,并將所有相乘的值相加;
(3)計算梯度值作為新的灰度值;
(4)選取適當?shù)拈撝礣hreshold,若新像素灰度值大于等于Threshold,則判斷該像素點為圖像邊緣點。
1.2 形態(tài)學梯度的邊緣檢測算法
數(shù)學形態(tài)學以形態(tài)為基礎(chǔ)對圖像進行分析,其基本思想是用具有一定形態(tài)的結(jié)構(gòu)元素去量度和提取圖像中的對應形狀以達到圖像分析和識別的目的。數(shù)學形態(tài)學的基本思想是利用結(jié)構(gòu)元素去探測圖像,討論是否能夠?qū)⑦@個結(jié)構(gòu)元素很好地放進圖像內(nèi)部,同時驗證填放結(jié)構(gòu)元素的方法是否有效。
定義1:圖像A被結(jié)構(gòu)元素B腐蝕[4]
(AΘB) (x,y)=min{A(x-s,y-t)-B(s,t)/(x-s,y-t)∈DA;(s,t)∈DB}(2)
腐蝕的基本目的在于標記出圖像內(nèi)部可以將結(jié)構(gòu)元素填入的位置。如果結(jié)構(gòu)元素的原點在其內(nèi)部,經(jīng)過腐蝕處理的圖像作為原圖像的一個子集而存在;如果結(jié)構(gòu)元素的原點在其外部,腐蝕后的圖像極有可能不在原圖像的內(nèi)部。
定義2:圖像A被結(jié)構(gòu)元素B膨脹
(A⊕B)(x,y)=max{A(x-s,y-t)+B(s,t)|(x-s,y-t)∈DA;(s,t)∈DB}(3)
將以上所定義的腐蝕、膨脹運算進行組合可以實現(xiàn)對圖像的開運算、閉運算操作。
在圖像處理中,開運算:
A?莓B =(AΘB)⊕B(4)
即先用結(jié)構(gòu)元素B對圖像進行腐蝕,然后再用結(jié)構(gòu)元素B對腐蝕后的結(jié)果進行膨脹。開運算對去掉圖像輪廓上的毛刺、平滑圖像輪廓起到了很好的作用。
而閉運算恰恰相反:
A·B=(A⊕B)ΘB=(AC?莓B)C(5)
即先用結(jié)構(gòu)元素B對圖像進行膨脹,然后再用其對膨脹后的圖像進行腐蝕。
圖1、圖2為開運算和閉運算的幾何解釋
(a)圖A和結(jié)構(gòu)元素B (b)B沿著A的內(nèi)部轉(zhuǎn)動 (c)開運算結(jié)果
圖1
(c)圖A和結(jié)構(gòu)元素B (d)B沿著A的外部轉(zhuǎn)動 (e)閉運算結(jié)果
圖2
形態(tài)學邊緣檢測算子是一種非線性差分算子,在以上定義的梯度算子中,腐蝕運算和膨脹運算都能保持圖像整體灰度和大的亮區(qū)域基本不受影響。該邊緣檢測算法大致如下:
(1)對數(shù)字圖像F進行閉運算,然后進行開運算,實現(xiàn)對圖像的預處理,以濾除圖像中的噪聲。即:
A=(F·B)?莓B(6)
其中,F(xiàn)表示數(shù)字圖像矩陣,B=■;
(2)將步驟(1)中得到的圖像做閉運算,實現(xiàn)圖像的平滑運算。即:
C=A·B(7)
(3)分別將圖像C及A進行膨脹、腐蝕運算。即:grad1=C⊕B;grad2=AΘB;
(4)將grad1與grad2相差,就可以得到較好的圖像邊緣E。
E=grad1-grad2(8)
(5)最后進行對所得圖像進行重建。
1.3 Canny算子的算法實現(xiàn)
高斯噪聲中,一個典型的邊緣代表一個階躍的強度變化。優(yōu)秀的邊緣算子應滿足以下三個判斷準則:信噪比準則;定位精度準則;單邊緣響應準則[5]。根據(jù)這三個準則推導出了最佳邊緣檢測算子——Canny算子。
Canny算子的邊緣檢測算法如下:
(1)利用二維高斯函數(shù)的一階導數(shù),設(shè)二維高斯函數(shù)為
G(x,y)=■exp(-■)(9)
計算二維濾波器模板的一階偏導,得到兩個一維濾波器,用標準卷積得到高斯平滑。其中σ是高斯函數(shù)的標準差,控制著平滑圖像的程度。
(2)計算梯度幅值和方向[6]
利用2×2鄰域一階偏導的有限差分來計算平滑后的數(shù)據(jù)陣列G(x,y)的梯度幅值和梯度方向。其中,x和y方向偏導數(shù)的2個陣列Px[i,j]和Py[i,j]分別為
Px[i,j]=[G(i,j+1)-G(i,j)+G(i+1,j+1)-G(i+1,j)]/2(10)
Py[i,j]=[G(i,j)-G(i+1,j)+G(i,j+1)-G(i+1,j+1)]/2(11)
像素的梯度幅值和梯度方向用以下公式計算
M[i,j]=(Px[i,j]2+Py[i,j]2)1/2(12)
梯度方向為
θ[i,j]=arctan(Py[i,j]/Px[i,j])(13)
(3)對梯度幅值進行非極大值抑制。遍歷圖像,若某個像素的灰度值與其梯度方向上前后兩個像素的灰度值相比不是最大,就將像素值置為0,即不是邊緣。
(4)使用雙閾值算法檢測和連接邊緣。雙閾值算法[7]是對經(jīng)過非極大值抑制和梯度直方圖分類的子圖像I[i,j]分別使用高閾值和低閾值H和L,分割得到邊緣圖像Ih[i,j]和Il[i,j]。圖像Ih[i,j]可能在輪廓上有間斷,所以雙閾值算法要在Ih[i,j]中把邊緣連成輪廓,達到輪廓端點時,就將由低閾值得到的圖像Il[i,j]的8鄰域位置尋找可以連接輪廓的邊緣,不斷遞歸跟蹤下去,直到將Ih[i,j]中所有間隙都連接起來為止。
2 實驗方法應用
油水實驗圖像中物質(zhì)大致可以分為三類:水,油和空氣。水層和油層通過肉眼可以識別出來,而空氣層由于稠油黏附于試管壁上使得空氣層無法在圖像上顯現(xiàn)出來,所以實驗中暫時不考慮空氣層的影響。
本次實驗的實驗圖像大致分為兩類:一種是油水界面清晰的實驗圖像如圖3,這種圖像的層次分明,邊界清晰,易于識別。另一種是油水界面模糊的實驗圖像如圖4,這種圖像的油水的界面邊緣形狀不規(guī)則,油層和水層不是很均勻地分開,不易于識別。
實驗將對兩種圖像均采用上文提到的三種邊緣檢測的方法,通過比較實驗圖像的實際效果,實驗所用的方法如下:
Sobel算子是將圖像的像素點與模板的系數(shù)進行運算,用得到的值與閾值進行比較并得到邊緣點;形態(tài)學梯度算法是對圖像進行一系列的膨脹腐蝕、開閉運算,并利用上文提到的方法進行差值運算得到處理后的圖像;Canny算子將圖像利用高斯濾波進行預處理并計算梯度幅值,進行非極大值抑制后利用雙閾值算法檢測連接邊緣,從而得到處理后的圖像。
圖3 清晰的油水界面 圖4 模糊的油水界面
3 實驗結(jié)果與分析
圖5 清晰油水界面邊緣提取
從左至右依次為Sobel、形態(tài)學梯度、Canny方法
圖6 模糊油水界面邊緣提取
從左至右依次為Sobel、形態(tài)學梯度、Canny方法
圖5、圖6為利用對不同清晰度的油水界面實驗圖像的檢測效果來比較以上三種邊緣檢測算法的優(yōu)劣性。通過實驗圖像得知:
對于清晰的油水界面實驗圖像,Sobel算子與形態(tài)(下轉(zhuǎn)第8頁)(上接第6頁)學梯度的算法檢測出來的邊緣比較粗,Canny算子的檢測效果最好;對于不清晰的油水界面實驗圖像,Canny算子受噪聲干擾嚴重,無法檢測出真實的邊緣;Sobel算子和形態(tài)學梯度方法檢測出來的邊緣比較清楚,但形態(tài)學梯度方法檢測出的偽邊緣少,能夠真實檢測出油水界面的邊緣。
通過兩組實驗圖像對比結(jié)果可以得出:
(1)Sobel算子的優(yōu)點是計算簡單。但是只采用了兩個方向的模板,只能檢測水平和垂直方向上的邊緣,對紋理復雜的圖像,效果不理想;閾值是人為設(shè)定,判斷欠合理,會造成邊緣點的誤判,使得檢測出了一些偽邊緣,使得邊緣較粗,降低檢測精度。
(2)形態(tài)學梯度邊緣檢測算法不僅有很好的邊緣提取能力,也具有較強的抗噪能力。但該方法存在寬邊緣現(xiàn)象,對相鄰幾個像素邊緣無法分辨。同時形態(tài)學梯度對模板的依賴性大,不能完整地反映圖像的邊緣信息。
(3)Canny算子提取的邊緣在實驗結(jié)果中是最為完整的,而且邊緣較細,邊緣的連續(xù)性好,定位比較準確。但Canny算子對噪聲比較敏感,對高斯函數(shù)標準偏差σ的調(diào)整要求高,若σ選取較大時,高斯平滑模板變大,頻帶窄,抗噪能力較強,但是容易造成圖像的緩變邊緣丟失及過度光滑;若σ選取較小時,頻帶較寬,邊緣細節(jié)精度高,但是圖像平滑作用較小,抗噪聲能力較弱。容易丟失一些真實邊緣的細節(jié)部分,沒有良好的自適應能力。
3 結(jié)論
本文針對三種邊緣檢測的算法進行了油水界面檢測實驗,利用兩組界面邊緣清晰度不同的實驗圖像的實驗結(jié)果中比較得出每種方法的優(yōu)缺點,從而找到針對不同油水界面的最佳邊緣檢測方法。近年來隨著數(shù)學理論及人工智能的發(fā)展,又涌現(xiàn)出了許多新的邊緣檢測算法,比如小波變換邊緣檢測、基于神經(jīng)網(wǎng)絡邊緣檢測、基于遺傳算法邊緣檢測等方法。不過無論什么算法都不能滿足所有的圖像,在實際應用中每一種算法都有自己的特點,我們要根據(jù)需求來選擇和結(jié)合不同的算法,來提高我們的工作效率,同時也在應用中不斷改進算法。
【參考文獻】
[1][美]岡薩雷斯,阮秋琦.數(shù)字圖像處理[M].3版.北京:電子工業(yè)出版社,2011:445-466.
[2]何兆民.油水界面檢測系統(tǒng)的研究[D].青島:青島科技大學,2008,6.
[3]姜炳旭,劉杰,孫可.Sobel邊緣檢測的細化[J].沈陽師范大學學報,2010,28(4):504.
[4]夏平,劉馨瓊,向?qū)W軍,萬鈞力.基于形態(tài)學梯度的圖像邊緣檢測算法[J].計算機技術(shù)與發(fā)展,2007,17(12):109.
[5]龔聲蓉,劉純平,王強.數(shù)字圖像處理與分析[M].北京:清華大學出版社,2006:173-174.
[6]Canny J. Acomputational approach to edge detection[J]. IEEE Transactions on Pattern Analysis and MachineIntelligence,1986,8(6):679-698.
[7]王植,賀賽先.一種基于Canny理論的自適應邊緣檢測方法[J].中國圖象圖形學報,2004,9(8):958.
[責任編輯:湯靜]