2.4 圖像邊緣及其檢測
邊緣檢測是底層計算機視覺中最重要的問題之一,但到目前為止,如何有效地從真實場景中進行邊緣檢測仍然非常具有挑戰性。底層好的邊緣檢測結果對后續高層的計算機視覺任務的成功具有非常重要的作用。在大量的原始圖像數據中,如何有效地獲取計算機視覺任務所需要的特征(如邊緣、角點等)并去除無關的背景和各種干擾,成為底層計算機視覺圖像處理技術的核心問題。
例如,在立體視覺技術中,一種常見的操作就是需要獲取圖像的深度信息(Depth Information),如圖2.17所示。該操作一般采用雙目視覺的基本原理來進行,如圖2.18所示,采用來自不同位置的圖像來獲取相關的深度信息。而這正好與人類雙眼獲取圖像后,可以感知一定的深度信息相對應。在視覺技術中,這種信息的獲取都需要做左右圖像之間的匹配對應,即如圖2.17的原始圖像所示,求出兩幅圖像中的匹配點,然后通過視差來確定該點的深度信息。而做這種匹配對應(配準),圖像的一些特征信息起著決定性作用。此外,在視覺跟蹤中,運動目標的檢測和關聯實際上也是采用目標的表觀特征并結合時序信息來進行處理的。來自運動的結構恢復技術、來自形狀的結構恢復技術和遮擋的對象識別與推理等,都利用了對象的邊緣、角點等具有區分能力的特征來進行處理。因此,底層圖像處理結果對視覺任務至關重要。

圖2.17 BookArrival序列的紋理圖(左)和其對應的深度圖(右)

圖2.18 基于雙目視覺的深度測量原理
ITU與MPEG成立的聯合視頻專家組在3DAV編碼標準的研究與制定中,將立體視頻數據定義為紋理加深度的表示格式。其中,紋理圖是采集的一個視點圖像;深度圖是對紋理圖中每個區域相對深度的描述。在多視點視頻編碼標準中,多視點視頻由少數幾個紋理視頻聯合深度視頻表示,深度視頻圖像中的像素值表示與其對應紋理圖像中像素點位置的目標與相機的相對距離,像素值按照深度的范圍(Zmin,Zmax)映射,在多視點視頻編碼標準中,深度取值按照8bit采樣,即將深度范圍分為256個均勻間隔,距離攝像機最遠的Zmax取值為0,最近的Zmin取值為255。這里的圖像由攝像機(視點為12)采集的BookArrival序列的紋理圖和其對應的深度圖來表示。
圖2.18中P為物體上的一個點,其在左右兩個相機成像平面上的像點分別為Pl、Pr、Cl、Cr,它們分別為左右兩個相機的光學中心位置。注意,圖中左右兩個光學相機像平面在同一個平面上,這里希望求出深度d與相機位置及焦距之間的關系,f為焦距,la-lb為點P在左右兩個相機的像平面上的視差。由三角形的相似關系△PPrB≈△PCrD可知,得
?,并且可得(d?f)(a+lb)=ad,即
;由△PPlB≈△PClD可知
,得
,從而有
,計算出
,從而可得
。因此,一旦對齊相機后,只需求出對應點在兩幅圖像中的位置,然后求出其視差,就可以估計出物點的深度信息。
2.4.1 邊緣類型
從概念上來看,邊緣一般指像素值發生突變的區域,但由于數字圖像成像過程中無法形成理想的突變狀態,因此一般在圖像中很少出現突變的邊緣,而是有一個漸變的過程。一般在圖像處理中,有4種邊緣類型,當然這4種類型也可以上下翻轉,分別對應階梯狀、斜坡狀、脈沖狀和屋頂狀4種邊緣類型,如圖2.19所示。

圖2.19 常見的4種邊緣類型
從這4種邊緣類型可以看出一些明顯特性,若采用曲線的形式對這些邊緣進行擬合,然后對相應的曲線進行一階導數和二階導數的計算,則可以計算出不同類型的邊緣應該滿足的條件。在實際的邊緣檢測中,可以采用這些條件來進行邊緣的判定。在實際處理數字圖像時,采用差分近似導數進行處理。
2.4.2 邊緣檢測的三個階段
邊緣檢測可以分為濾波處理、差分處理和最終檢測三個階段。
在濾波處理階段,實際上是對圖像進行濾波處理。例如,通過濾波來去除圖像的噪聲,這些噪聲可能來自成像過程中的采樣、量化、模糊、散焦及對象表面結構的不規則性。通過逆濾波來去除各種模糊,通過雙邊濾波來強化邊緣等。
在差分處理階段,通過利用邊緣的特性采取一階和二階差分來獲取邊緣區域。一般情況下,通過計算圖像像素值的梯度峰值來確定邊緣。顯然,梯度值有大有小,必須對其進行閾值處理,從而抑制偽邊緣,而閾值的選取又依賴于圖像的特性。如何有效地獲取恰當的閾值,仍然是一個非常困難的問題。目前常見的閾值方法包括根據前景背景分布來獲取最優閾值法,OTSU大津閾值法,以及基于熵的閾值法等。
Haralick邊緣檢測方法的差分處理看起來與此稍有不同,該方法首先通過分段連續多項式來擬合鄰域像素值,然后通過對多項式求偏導數來進行差分處理。但實際上,該方法也包括濾波處理,只不過這里的濾波通過擬合方式來達到。
而常見的Canny邊緣檢測在濾波階段使用高斯濾波器,在差分階段沿梯度方向計算其一階方向導數,然后在檢測階段,通過檢測上一步導數輸出的峰值來定位邊緣點。
Marr和Hildreth也使用高斯濾波器,通過Laplacian來進行差分階段的操作。實際上,Laplacian操作相當于沿橫軸和縱軸方向二階偏導數的和。
下面我們分別介紹濾波和相關的差分處理,以及幾種常見的邊緣檢測算法。
2.4.3 濾波操作及雙邊濾波器
在信號處理中,濾波與預測是緊密相關的概念,實質上就是對輸入的數據進行處理,然后產生輸出。若輸入的數據為以前的數據,而產生的數據為未來的數據,則稱為預測;若產生的數據只是對當前數據的校正,則稱為濾波。在數字圖像處理中,假設原始空域圖像用f(x,y)表示,其頻域(傅里葉變換)用F(u,v)表示,濾波器用h(x,y)表示,濾波器的頻域用H(u,v)表示,圖像f(x,y)的濾波輸出用g(x,y)表示,頻域用G(u,v)表示,則濾波過程可以寫為

兩邊同時進行傅里葉變換

顯然,濾波H(u,v)的性質決定了濾波的結果。而若要確定濾波器的效果,則只需要對濾波器h(x,y)進行頻譜分析即可。通常所說的低通、高通和帶通濾波器,實際上就是通過對H(u,v)進行分析得出明確的結論。
注意,這里一般濾波器中系數的值只與處理像素的距離有關。后面還會談到,濾波器中的系數不僅與當前處理像素的位置有關,而且與處理位置的像素值大小有關,雙邊濾波器在濾波的同時還能保持邊緣不被平滑。
這里以一維濾波器為例,多維濾波器分析與此類似。假設h(n)={1,1,1},即只有3個值為1,其余值均為0。輸入信號和輸出信號的關系為g(x)=1/3[f(x?1)+f(x)+f(x+1)]。根據傅里葉變換的性質則有
G(u)=1/3[e-j2πu/N+1+ej2πu/N]F(u)=H(u)F(u)
其頻率響應函數為

當u從0到N-1變化時,對應從低頻到高頻變化,其頻譜圖如圖2.20所示,從中可以看出,低頻部分得以保留,而高頻部分被削弱,因此該濾波器可以認為是低通濾波器,實際上就是將連續3個輸入值的平均值作為輸出。

圖2.20 濾波器h(n)={1,1,1}對應的頻譜圖
從圖2.20中可以明顯看出,低頻時其幅度大,高頻時其幅度小,產生低通濾波的效果。
最簡單的濾波器為均值濾波器,此時濾波器系數均相同,且系數為。此外,另一種常用的低通濾波器為高斯濾波器,其響應函數為
。若設定σ=2,則濾波器大小為13×13,并將濾波器系數進行調整,使得最大值為255,則可以得到如圖2.21所示的濾波器。

圖2.21 一個13×13的高斯低通濾波器
其頻譜響應可用Matlab中的freqz2函數畫出如圖2.22所示的頻譜響應。注意,一般,生成的高斯濾波器會對其濾波器系數進行歸一化,即保證所有濾波器系數之和為1。思考:如何設計圖2.21中的濾波器?

圖2.22 圖2.21中的高斯低通濾波器的頻譜響應
在實際處理中,若形成濾波器模板,則只需要對原始圖像用濾波器模板做滑動卷積處理,即可生成濾波后的圖像。
從上述的介紹中可知,在濾波器形成濾波器模板后,直接與原始圖像做卷積即可達到對圖像進行濾波的目的。并且可以知道,濾波器具有局部響應特性,因此通過采用濾波器來獲取圖像的局部特征,如Gabor特征。此外,基于濾波器的卷積操作在CNN(卷積神經網絡,Convolutional Neural Networks)中有著廣泛的應用。其中卷積的操作和形式也存在許多變化,包括變形的卷積橫板、1×1的卷積橫板等。
在圖像處理中,假設輸入圖像用I(i,j)(0≤i<width,0≤j<height)表示,輸出圖像用表示,卷積核用
表示,一般,核的大小為方陣,此時width=height。此時卷積操作可以寫為

注意,卷積操作具有可交換性,該式可等價寫為

顯然,隨著(i,j)的移動,可以生成輸入圖像局部過濾的結果圖像。隨著卷積核的不同,對應不同的圖像。很多常見的圖像處理操作都可以表示為這種卷積核的操作。
而常見的用于邊緣檢測的模板算子包括以下4種。
(1)Prewitt算子:水平算子為,豎直算子為
;
(2)Sobel算子:水平算子為,豎直算子為
;
(3)Roberts算子:分為45°和135°兩種方向,為2×2模板,45°為,135°為
;
(4)Laplacian算子:。
前面提到雙邊濾波器,這里簡單進行介紹。一般濾波器只考慮當前處理像素的位置與鄰域像素位置距離之間的關系,一般考慮圖像的局部平滑特性,距離近的像素所貢獻的權值大,也就是濾波器系數值大,反之則小。但前述的濾波操作有一個缺陷,即在去除噪聲的同時也會弱化邊界。這對邊界檢測相當不利,因此后來有人提出了雙邊濾波器。分別綜合利用幾何空間距離和像素差值來共同決定濾波器系數。
與前述濾波類似,雙邊濾波器中輸出像素與輸入像素關系為

可以明顯看出,式(2.10)與前述公式的差別就在于濾波器系數的確定形式上。一般,權值h(i,j,x,y)=d(i,j,x,y)·r(i,j,x,y)。其中,稱為定義域核,而
稱為值域核。注意,一般要求h(i,j,x,y)的所有濾波器系數之和為1。可以看出h(i,j,x,y)中的d考慮了像素空間距離的差別,而r則考慮了像素鄰域內像素值之間的差別。注意,雙邊濾波器在濾波的同時考慮了邊緣的保持能力。
2.4.4 差分操作
眾所周知,連續函數的導數在離散情況下采用差分來近似。這從連續函數的導數定義:可知,若令Δx=1,則成為差分形式。實際上在圖像處理中,該形式是相鄰像素值的差值,近似為一階導數。而根據前面介紹的邊緣類型可以知道,利用這種相鄰像素值的差可以檢測邊緣。
將其推廣到二維的情況,這時圖像f(x,y)在點(x,y)處的梯度定義為向量(fx,fy)。其梯度幅度M和方向θ分別定義為

而在方向θ上的方向導數定義為

為了完成對差分的計算,有多種方法來進行運算,如2.4.3節談及的4種類型的邊緣檢測算法,實際上就是利用差分進行計算的。
此外,上述梯度幅度值的計算在實際處理過程中也有很多的簡化算法。顯然,上述求水平、豎直方向梯度的平方和再開方是最準確的,但其涉及平方和開方的操作,因此計算復雜度較高。在實際計算中,若對其要求精度不高,則水平和豎直方向的梯度可以直接采用|Δx|和|Δy|進行簡化,進一步可將M簡化為M=max{fx,fy}或者M=|Δx|+|Δy|也可達到類似效果。
2.4.5 邊緣檢測操作
令為圖像f(x,y)在像素點(x,y)處的梯度幅度,則M稱為圖像f的梯度圖像。若對梯度圖像M進行局部峰值閾值化操作,則可以確定邊緣像素的位置為

其中,E(x,y)為邊緣圖像,Th為閾值,該閾值既可以全局決定,又可以根據局部特性來確定,在應用時可以自適應選擇。
2.4.6 非極大值抑制操作
2.4.5節直接利用梯度幅度進行閾值化操作來檢測邊緣,但并未用到梯度的方向信息。梯度方向表示函數值增加的方向,因此若函數值在某個方向上沒有任何變化,則其梯度值為0,如圖2.23所示。圖中若存在一條豎直邊緣線,則邊緣線上的任意一點的梯度值都只有水平方向的分量,且方向水平向右,正好與垂直的邊緣線垂直。因此,若圖像中的點的梯度值變化不顯著,則該點很可能不是邊緣點。在進行邊緣檢測時,我們需要抑制這樣的非極大值點。該過程可表示為

注意,局部鄰域可以有很多的選取方法,如常見的四鄰域、八鄰域等。選取方法可以根據實際情況進行選擇。

圖2.23 均勻灰度圖像的梯度值
圖2.23的每列像素值都一樣,每行像素值分別從0~255均勻變化。顯然,圖像中每個像素點都可以根據前面的梯度公式計算梯度向量,但其豎直方向上像素值沒有變化,因此其梯度的豎直方向分量為0,只剩下水平梯度,其方向為水平向右,指向灰度值增加的方向。顯然,梯度的方向與邊緣方向垂直,而梯度方向表示灰度值變化最劇烈的方向。
若當前點(x,y)處的梯度方向兩邊的點的梯度幅度表示為M′(x,y)和M′(x,y),則可以只對這兩個點進行比較來實現非極大值抑制,可以用圖 2.24 表示,只需要比較當前點與邊緣兩點的幅度大小就可以確定當前點是否是候選邊緣點。當然,我們也可以在2.4.5節之前做這個操作,從而獲取更好的邊緣檢測結果。

圖2.24 局部非極大值抑制
2.4.7 幾種典型的邊緣檢測算子
在真實邊緣檢測算子中,為了避免噪聲的干擾,一般先對圖像進行平滑等預處理,然后再采用上述的檢測過程進行檢測。應用最為廣泛的邊緣檢測算子之一就是John Canny在1986年提出的Canny算子,它與Marr(LoG)邊緣檢測方法類似,也屬于先平滑后求導數的方法。其次采用連續的函數來逼近圖像的局部區域,然后利用連續函數的偏導數來獲取其不連續點(即邊緣點),典型的方式為Haralick算子。第三類就是LoG算子,實際上相當于對圖像進行不同尺度下的平滑操作,然后在對其求差,從而凸顯邊緣操作。
1.Canny邊緣檢測算子
在Canny邊緣檢測中,最顯著的特征在于其采用兩個閾值來進行判斷,高閾值可以按照2.4.5節中的方式來檢測那些更具有可能性的真實邊緣點,然后根據低閾值來檢測高閾值后剩余的點的梯度值,判斷其是否可能將高閾值點連接成閉合邊緣。這樣可以減少噪聲對邊緣檢測的影響。
2.Haralick邊緣檢測算子
另外一類常見的邊緣檢測算子是基于圖像曲面模型,如Haralick用雙三次的多項式來擬合像素的鄰域關系。在圖像的梯度方向上,根據多項式的系數來計算二階和三階導數。在給定像素位置后,可以通過最小二乘法來擬合當前像素鄰域內的像素值。當該點處的二階導數為0且三階導數為負時,判定該點為邊緣點。
例如,若令x,y表示圖像中的行列坐標,其像素值f(x,y)采用坐標的雙三次多項式來進行表示,則有

此時在點(x,y)處的梯度fx與fy可以求出,若將點(0,0)代入,則可得在點(0,0)處的梯度方向θ的正弦與余弦值分別為

在給定方向向量(sinθ,cosθ)后,可求出其一階和二階方向導數,分別為

若令x=ρsinθ,y=ρcosθ代入圖像的雙三次插值公式,則原公式變換為

可知C0=k00,C1=k10sinθ+k01cosθ,C2=k20sin2θ+k11sinθcosθ+k02cos2θ,C3=k30sin3θ+k21sin2θcosθ+k12sinθcos2θ+k03cos3θ。此時若對幅度ρ求導數,則有

由其判斷邊緣點的兩個條件:和
,可得C3<0,2C2+6C3ρ=0,從而有
,注意這里ρ0為閾值。
總結Haralick邊緣檢測算子如下:
(1)根據局部區域的像素值,采用最小二乘法來擬合雙三次多項式的系數kij,0≤i+j≤3;
(2)計算θ、sinθ、cosθ;
(3)計算C2、C3;
(4)判斷是否為邊緣點:若C3<0,則是邊緣點,否則不是。
其中第一步擬合多項式的系數中以當前待處理點為點(0,0),周圍像素點坐標為

若采用一次多項式來擬合像素位置與像素值的關系,則有

這里只需要確定三個系數,將當前像素鄰域坐標代入可得一個超定的線性方程組。若將上述9個像素點的坐標分別用(x1,y1),(x2,y2),…,(x9,y9)表示,其像素點的值分別用(f1,f2,…,f9)表示,則該方程組可表示為

將其表示為f=Ak,采用最小二乘法,可求得k

令B=(ATA)?1AT=(bij),則其為3×9的矩陣,k的每個分量都可以通過卷積的形式來進行計算,如圖2.25所示,其中k00、k10、k01正好表示為卷積核與像素值的卷積操作。

圖2.25 Haralick邊緣檢測算子中通過卷積操作來求擬合系數
應用這樣的方式,對5×5的局部鄰域進行類似的操作,可以求得雙三次擬合中的所有系數k(0ij≤i+j≤3),這里實際上可以形成10個卷積核,分別對應這10個系數。實際上,使用這種檢測邊緣的方式在于其采用連續的曲面模型對圖像的局部區域進行建模,從而形成連續的逼近,然后再采用連續函數的偏導數來檢測灰度級別的不連續性,從而獲取圖像的邊緣。
3.LoG邊緣檢測算子
LoG(Laplacian of Gaussian)算子也稱Marr算子,在計算機視覺相關領域有著廣泛的應用。拉普拉斯(Laplacian)算子是最簡單的各向同性微分算子,具有一定的旋轉不變性。在一維情況下,類似于二階導數操作,在二維時其定義為

可以通過前面邊緣檢測的基本原理來理解,當出現邊緣時,灰度值會發生突變,因此對其一階導數出現較大幅值的概率較大,但需要閾值來進行取舍。而再對一階梯度再次求導數,則這時往往會出現0交叉的情況,然后就可以用0交叉來判斷是否為邊緣點,但該過程容易受噪聲的影響。為了保證檢測免受噪聲影響,首先進行高斯低通濾波去除噪聲。在不同的尺度上獲得不同的表示,然后再應用Laplacian算子進行處理,這就是LoG算子。
假設輸入圖像為f(x,y),尺度為σ的高斯核定義為

LoG算子可表示為

注意:對卷積的導數等于對其中之一的導數求導后再做卷積,并且高斯函數的導數仍然是高斯函數,因此可以定義LoG算子的核函數為

且有

由此可知,兩個不同尺度的高斯函數的差值可以用來近似LoG算子,進而用來檢測邊緣。
4.Difference of Gaussian算子
從2.4.7節介紹可知,采用兩個相鄰尺度的高斯低通濾波對圖像做處理后,然后做差,可以用來近似LoG算子。可以形式化表示為


其中,DoGk=(Gσ1?Gσ2)稱為DoG算子的核函數,然后通過前述的卷積操作可以獲得圖像的邊緣圖。這相當于在需要進行連續尺度操作時極大地簡化了計算過程,該算子在圖像處理中有著廣泛的應用,如角點檢測。
- 數據要素安全流通
- 數據庫基礎與應用:Access 2010
- Visual Studio 2015 Cookbook(Second Edition)
- 分布式數據庫系統:大數據時代新型數據庫技術(第3版)
- Learning Spring Boot
- PySpark大數據分析與應用
- Neural Network Programming with TensorFlow
- 區塊鏈:看得見的信任
- 數亦有道:Python數據科學指南
- Scratch 3.0 藝術進階
- MySQL 8.x從入門到精通(視頻教學版)
- 數據庫設計與應用(SQL Server 2014)(第二版)
- 爬蟲實戰:從數據到產品
- Access數據庫開發從入門到精通
- Access 2016數據庫應用基礎