魏 雨,黃玉蕾
(西安培華學院 智能科學與信息工程學院,西安 710125)
隨著互聯網技術和移動通信技術的不斷發展,萬物互聯已成為可以預見的必然趨勢。物聯網終端將產生海量的圖像視頻數據,在此背景之下,模擬人類視覺系統的計算機視覺技術應運而生,即賦予計算機“看”和“認知”的能力,是計算機認識世界的基礎。邊緣檢測作為計算機視覺中非常重要且實用的圖像處理方法,通常用于圖像特征的提取,其目的就是為了找到邊緣點的集合。
邊緣點往往是灰度變化最劇烈的點,基于梯度的邊緣檢測算法比較經典的有Prewitt, Sobel,Canny,Robinson,Roberts等[1-2]。但是,在傳統邊緣檢測算法中,Prewitt只有檢測水平邊緣和垂直邊緣的兩個模板,容易造成邊緣點的誤判或丟失。Sobel算子根據周圍像素點位置的不同設定了不同的權值,提高了邊緣的清晰度。在Sobel算子的研究基礎上,Robinson算子增加了檢測模板數量,由原來的兩個方向擴展到了八個方向。Canny算子對于邊緣像素只能標識一次,且易出現偽邊緣[3]。Roberts算子沒有經過圖像平滑計算,不能抑制噪聲,且易造成邊緣信息丟失。Kirsch算子對8個方向邊緣信息進行檢測,具有較好的邊緣定位能力,并且對噪聲有一定的抑制作用,但計算量大。
針對以上問題,2017年,文獻[4]提出一種新的Kirsch邊緣檢測算法,該邊緣檢測算法具有較好的抗噪聲能力和自適應能力[4]。2020年,文獻[5]限制型自適應SUSAN邊緣檢測算法提出了結合自適應門限算法和閾值選擇策略的限制型自適應SUSAN邊緣檢測算法[5]。2021年,文獻[6]提出一種改進的彩色遙感圖像邊緣檢測算法研究,該算法采用分數階微分和Canny算子相結合,得到一種更優的彩色遙感圖像邊緣檢測方法[6]。2020年,文獻[7]提出自適應閾值Prewitt的石榴病斑檢測算法,采用雙邊濾波減少噪聲干擾;通過高頻強調濾波提高圖像高頻分量,增強局部細節;根據高斯噪聲概率分布設置算子卷積掩膜元素權重,利用對稱性改進像素點梯度計算的方法,改善了傳統Prewitt算法在石榴外表病斑及石榴輪廓檢測精準度不高、抗噪聲能力不強以及存在偽邊緣等問題[7]。2021年,為了提高帶鋼表面缺陷檢測的效率和準確率,文獻[8]提出一種基于Sobel算子的帶鋼表面缺陷圖像邊緣檢測算法。首先運用改進的四方向Sobel算子以及自適應動態閾值對圖像進行二值化圖里,然后將二值化圖像進行基于Hilditch算法的邊緣細化處理,得到最終檢測圖像[8]。2021年,文獻[9]變壓器輸變電設備邊緣檢測的改進算法,在變壓器輸變電設備的邊緣檢測中運用大津法來動態獲取最優閾值,從而降低Prewitt算子對于邊緣點的誤判[9]。
另外,還有眾多學者將模糊邏輯、多尺度聚類、圖論以及基于數學形態等方法運用在圖像邊緣檢測中。2016年,文獻[10]基于多視圖聚類的自然圖像邊緣檢測,將圖像局部特征與稀疏編碼結合在一個統一的多視圖聚類框架中,從而有效提高邊緣檢測的魯棒性[10]。2018年,文獻[11]提出了一種融合小波變換模極大值法和新型改進的數學形態學的含噪圖像邊緣檢測方法[11]。2018年,文獻[12]提出基于Pal和King模糊理論的邊緣檢測改進算法[12]。2022年,文獻[13]采用計算歐式距離強化圖像塊中心間相關性從而達到降噪的方式,實現了圖像邊緣的有效提取[13]。2022年,文獻[14]提出一種基于改進K-means聚類算法的自適應Canny算子工件邊緣檢測算法,在工件邊緣檢測時,首先通過改進K-means算法進行分割與融合圖像,然后采用Otsu閾值分割處理,使用最小二乘法擬合工件孔洞鋸齒邊界,提高了復雜相似工件邊緣檢測的識別度[14]。
隨后,機器學習和人工智能技術也被用于圖像邊緣檢測中。2019年,文獻[15]提出基于卷積神經網絡的艦船圖像邊緣檢測算法[15]。2021年,文獻[16]提出的機器學習的光照不均圖像邊緣檢測系統,采用支持向量機模式將不能被線性分類的圖像,通過非線性映射至高維特征空間,利用回歸訓練的核函數進行非線性擬合。最后通過零交叉檢測法完成圖像邊緣檢測[16]。2022年,文獻[17]為解決衛星遙感圖像邊緣模糊噪點過多,導致圖像清晰度過低的問題,提出基于深度學習的衛星遙感圖像邊緣檢測方法[17]。參考文獻[18]針對海岸線動態監測管理中,由于自然環境復雜多變,拍攝的遙感圖像中海陸邊界界限不明顯,導致提取到的海岸線邊緣定位不準確的現象,提出融合深度卷積神經網絡與語義分割的方法來檢測海岸線邊緣[18]。
綜合以上分析可以看出,在圖像檢測方面,尚不存在一種通用的方法理論,現有的算法都是以處理特定場景或特定情況下的問題為目的。針對以上問題,本文對不同色彩空間下的圖像,利用Kirsch算子[19-22]聯合高低雙閾值進行邊緣檢測,實驗結果表明,本文算法在保持圖像細節和抗噪聲干擾方面都有較好的效果。
Kirsch是由R.Kirsch提出的一種邊緣檢測算子,可以對像素周圍8個方向上的邊緣信息進行檢測,是一種離散的一階微分算子。由于可檢測8個方向的邊緣,因此Kirsch算子對于邊緣的定位能力較好,而且在噪聲抑制方面效果較為理想,對灰度漸變和噪聲較多的圖像處理效果較好。
Kirsch算子利用0,π/4,π/2,3π/4,π,5π/4,3π/2,7π/4這8個方向的(如圖1所示)羅盤核模板對圖像上的每個像素點進行卷積運算,從而得到每個像素點八個方向的梯度幅值與方向,并以其中的最大值作為該點的邊緣輸出。

圖1 模板方向
八個模板分別代表八個方向,模板矩陣如下所示。
假定某個像素點為P(i,j),這個像素點及其周圍0,π/4,π/2,3π/4,π,5π/4,3π/2,7π/4這八個方向上像素點的像素值組成的矩陣為P(i,j)。
方向k對應的Kirsch算子模板為:
利用Pi,j與Mk進行卷積,可得到坐標(i,j)處像素點在方向k上的梯度值fk(i,j),如式(1)所示。

(1)
其中:k=0,π/4,π/2,3π/4,π,5π/4,3π/2,7π/4。
取八個方向上的最大梯度作為點(i,j)最終的梯度值GRAi,j如式(2)所示。
GRAi,j=max{fk(i,j)}
(2)
在Kirsch的8個方向模板中,以π/2方向和3π/2方向為例,π/2方向與3π/2方向得到的梯度強度方向相反,但是宏觀來說,這兩個方向模板得到的實際邊緣形態是一致的。以圖1中的方向為基準,π/2方向模板和3π/2方向模板得到的邊緣都是垂直方向的。同理,π方向模板和0方向模板得到的邊緣都是水平的。由此可以將8個方向的梯度強度縮減到4個方向。改進的Kirsch算子流程如圖2所示。

圖2 改進Kirsch算子
設圖像為A,取坐標(i,j)處及其相鄰像素點的灰度矩陣Ai,j,如式(3)所示。Kirsch羅盤核為Mk(k=0,π/4,π/2,3π/4,π,5π/4,3π/2,7π/4)。

(3)
利用8個羅盤核分別與圖像進行卷積運算求得各個方向模板對應的圖像梯度Gi=(0,π/4,π/2,3π/4,π,5π/4,3π/2,7π/4),然后分別求取Gi與Gi+π中的絕對值最大值。令:
G1=max(|G0|,|Gπ|)
(4)
G2=max(|G(π/4) |,|G(5π/4) |)
(5)
G3=max(|G(π/2) |,|G(3π/2) |)
(6)
G4=max(|G(3π/4) |,|G(7π/4) |)
(7)
然后再分別求的兩垂直方向上圖像梯度的二范數F,如式(8)式(9)所示。

(8)

(9)
最后取F的最大值作為窗戶中心像素(i,j)處的邊緣強度,如式(10)所示。
e(i,j)=max(F13,F24)
(10)
其中:e(i,j)表示采用Kirsch算子計算得到的坐標(i,j)處像素的邊緣強度。
在傳統的基于閾值的邊緣檢測方法中,往往人為預先設定二值化的閾值,這樣的方式準確性較差。后來,研究人員提出了各種自動閾值生成的想法。2016年,文獻[23]以FPGA作為圖像處理的核心機,采用中值濾波與快速排序算法相結合的方式,計算得到像素點周圍的局部邊緣閾值,然后通過該局部閾值得到圖像的邊緣信息[23]。2019年,文獻[24]利用FPGA并行處理的特性,采用多方向模板與自適應閾值相結合的方式,提出了改進的Sobel邊緣檢測算法[24]。但是單閾值的邊緣檢測方法經常會出現邊緣檢測率低或者出現偽邊緣的現象,因此本文提出一種采用雙閾值的邊緣檢測方法。文獻[25]針對絕緣子航拍圖像存在的邊緣檢測結果較差的現象,在Canny算子的基礎上提出了一種二維最大熵閾值優化的邊緣檢測算法。從圖像信息熵的角度出發,利用最大圖像熵法,將一維圖像熵提升到二維圖像熵,然后再去計算閾值,這樣提高了邊緣檢測的準確率[25]。
由式(10)可得圖像A所有像素的邊緣強度矩陣E,如式(11)。
E=[e(x,y)]m×n
(11)
其中:x=1,2,…,m,y= 1,2,…,n。
為了提高邊緣檢測結果的連續性和算法的自適應能力,本文設定兩個閾值,高閾值TH和低閾值TL,而高低閾值由整幅圖像邊緣強度的平均值Tavg來確定,average()函數用于求取整幅圖像的平均邊緣強度,分別如式(12)~(14)所示。
TL=Tavg/3
(12)
TH= 2TL
(13)
Tavg=average(E)
(14)
利用雙閾值算法將E中所有像素點劃分為邊緣和背景兩大類,如果某位置處像素點的邊緣強度值大于較高的閾值,則確定該像素肯定是邊緣點;如果某位置處像素點的邊緣強度值小于較小的閾值,則確定該像素肯定是背景點;如果某位置處像素點的邊緣強度高于較低閾值且低于較高閾值,那么此像素點可能是邊緣點也可能是背景點。那究竟是邊緣點還是像素點,要根據像素點周圍八個鄰域點中邊緣點的個數來判定。如果其周圍鄰域內邊緣點的個數大于或者等于4,即數量超過50%,則判定該像素點為邊緣點,標記為0;相反地,如果其周圍鄰域內邊緣點的個數小于4,可判定該像素點為背景像素點,標記為1,如公式(15)所示。高閾值和低閾值由圖像的邊緣強度矩陣E來決定。
(15)
函數f(x,y)的表達如式(16)所示。

(16)
其中:θ(x,y)為像素點(x,y)周圍一周內8個相鄰點中為邊緣點的像素的個數。
RGB色彩模型是一種表示顏色的模式或者標準,RGB色彩空間中,所有圖像都是由紅、綠、藍三原色組成,或者說RGB圖像可以分為三通道,R(red)是紅色通道,G(green)是綠色,B(blue)是藍色通道。這3種顏色以不同的量進行疊加,就可以顯示出五彩繽紛的色彩,如圖3所示。

圖3 RGB圖像原理圖
可以把RGB圖片看做是3個二維數組的層層疊加。每一層中的二維數組都代表一種顏色通道。對于一幅RGB彩色圖像而言,每一種顏色對應一幅分量圖像,而這幅彩色圖像就相當于由紅色分量圖、藍色分量圖和綠色分量圖疊加而成。
對于一幅圖像來說,其在R、G、B分量中的信息各有偏重,如圖4所示,RGB三個不同色彩空間下突出的人物特色是不同的。而合成過程中,由于色彩的疊加作用,會對各分量下偏重有效的信息造成削弱。為保證邊緣檢測中有效信息的最大化保留,本文提出利用上述邊緣檢測算法對各色彩空間下的圖像分量分別進行處理。

圖4 圖像的RGB分量圖
Kirsch聯合高低雙閾值的RGB圖像邊緣檢測算法處理過程包含色彩分量提取、圖像去噪、圖像增強、計算像素點強度、計算閾值、劃分邊緣、融合邊緣幾大步驟,具體流程如圖5所示。

圖5 邊緣檢測流程
在RGB圖像中,一個彩色像素點的顏色由紅(R)、綠(G)、藍(B)三原色組合而來,因此RGB圖像的每一個像素的顏色值由R、G、B三個分量表示。圖像中每個像素的顏色值直接存放在圖像的像素矩陣中。
對于M行N列大小的圖像,需要3個M×N的二維矩陣分別表示各個像素的R、G、B顏色分量。提取原圖對應的RGB不同分量下的分量圖,即提取各分量對應的二維矩陣,將各分量圖轉化為灰度圖。
在圖像數字化或者圖像傳輸的過程中,由于受到周圍外界環境的影響,圖像中會產生一些不必要的或多余的干擾信息,稱作噪聲。就圖像噪聲本身來說,它并不是空域的,即不是指某一點相對于周邊點顯得突兀,就說該點是噪聲點。而是指在連續的時間內,在同一位置產生的像素點如果誤差較大,則稱之為噪聲點,即噪聲本質是時域的。一幅圖像在實際應用中可能存在各種各樣的噪聲,這些噪聲可能在傳輸中產生,也可能在量化等處理中產生。
噪聲會影響圖像質量。邊緣檢測主要是基于圖像像素強度的導數,而導數通常對噪聲很敏感,在邊緣檢測中噪聲很可能會引起邊緣的誤判或邊緣的偏移,因此圖像去噪是邊緣檢測中預處理的首要過程。
目前來說圖像去噪分為三大類:基于濾波器的方法(Filtering-Based Methods)、基于模型的方法(Model-Based Methods)和基于學習的方法(Learning-Based Methods)。本文選用基于濾波器方法中的高斯濾波對圖像進行預處理。高斯濾波器是一種線性濾波器,對于圖像在輸入時隨機引入的噪聲有很好的抑制效果,對圖像起到平滑作用。在高斯濾波模板中,距離模板中心的越遠,對應的模板系數越小,因此,相比于中值濾波和均值濾波等其他濾波方法,高斯濾波器對圖像的模糊程度較小,對于原圖像的完整程度保持的越好。
在高斯濾波中,認為像素點跟鄰域像素是一種高斯分布的關系,將圖像與高斯核進行卷積操作。
Mσ=M*Gσ
(17)
式(17)中,Mσ是高斯濾波后的結果,M是圖像像素矩陣,Gσ是標準差為σ的二維高斯核,定義為:

(18)
本文中采用σ為1,大小為5的高斯核,計算得到高斯核模板為:

0.0030.0130.0220.0130.0030.0130.0590.0970.0590.0130.0220.0970.1590.0970.0220.0130.0590.0970.0590.0130.0030.0130.0220.0130.003
利用高斯核模板與圖像進行卷積操作,對圖像進行平滑處理,處理過程如圖6所示。
圖像增強簡單來說就是采用一定的圖像處理方法增強圖像的對比度,來強調感興趣的特征,抑制不感興趣的特征,或者說突出圖像中的某些“有用”,壓縮其他“無用”信息,改善圖像的視覺效果,將圖像轉換為更適合人或計算機分析處理的形式。
目前現有的圖像增強方法歸納起來可以分為兩類:空間域法和頻域法。簡單概括起來,空間域就是指包含圖像像素的空間,空間域法是指在圖像像素的空間域中,或者說在圖像本身中,通過對圖像進行線性或非線性運算,達到增強圖像的像素灰度值的目的。頻域法是把圖像看做是一種二維信號,對這種二維信號進行傅里葉變換,從而達到對二維信號的增強。
直方圖均衡化是一種頻域圖像增強算法。對于圖像而言,直方圖反應了圖像中不同灰度級像素出現的個數。由于拍攝或傳輸過程中各種因素的影響,原始圖像的直方圖中圖像像素的灰度值可能會集中在較窄的灰度區間內,造成圖像不夠清晰。例如,過度曝光的圖像,其灰度級集中在高亮度范圍內。采用直方圖均衡化處理方法,可以把原始圖像的像素分布由集中分布變成均勻分布,增加圖像像素之間灰度值差別的動態范圍,從而實現圖像整體對比度的增強。

圖7 直方圖均衡化前后對比
將圖像的灰度值的個數表示成一個一維的離散函數,表達式為:
g(k)=nk,k= 0, 1, …L-1
(19)
式(19)中,nk是圖像中灰度級k的像素的個數,L是圖像中灰度的總級數。那么,對應的圖像灰度直方圖中,每一列的高度為nk。
對直方圖進行歸一化,各個灰度級出現的相對頻率Fr(k)表示為:
Fr(k)=nk/N
(20)
式(20)中,N為圖像的總像素數。
然后,計算圖像灰度的累積分布概率Sk。
(21)
最后,將歸一化的Sk乘以L-1,再四舍五入,得到均衡化后的圖像灰度值。
Tk=Sk×(L-1)
(22)
其中:Tk表示原始圖像中灰度級k經過灰度值均衡化后的灰度值。
利用Kirsch算子的8個羅盤核分別與各個分量圖像進行卷積運算,然后求取每個卷積結果的絕對值,并計算這8個卷積絕對值的最大值,以此最大值作為窗戶中心像素(i,j)處的邊緣強度,最終圖像中所有像素點的邊緣強度為E。
利用式(11)由圖像的邊緣強度E計算所有像素點的平均邊緣強度,再根據公式(12)~(14)由平均強度計算得到高閾值和低閾值。
根據計算得到的高低雙閾值,對各個分量的邊緣強度圖進行劃分處理,確定出各分量圖中的邊緣像素和背景像素,得到R分量邊緣、G分量邊緣和B分量邊緣。
假設在圖像的R、G、B三分量邊緣圖中,R分量圖中邊緣像素點的集合的UR,G分量圖中邊緣像素點的集合的UG,B分量圖中邊緣像素點的集合的UB。如果某個像素點在R、G、B三分量圖中至少在兩幅分量中是邊緣點,則認為該像素點是邊緣點。根據集合的容斥原理,對于RGB不同分量圖得到的邊緣圖像進行融合。
Uedge=UR+UG+UB-UR∩UG-
UR∩UB-UB∩UG+UR∩UG∩UB
(23)
式中,Uedge表示融合后的圖像邊緣。
本文使用基準數據集BSDS500數據集對實驗進行驗證評估。BSDS500數據集有3個互不相交的子集,訓練集(train)有200張圖像,測試集(test)有200張圖像,驗證集(val)有100張圖像。因為本文算法是無監督的算法,因此只選用了測試集中的200張圖像進行實驗驗證。
本文隨機選取BSDS500數據集中的3幅圖來展示實驗效果,如圖8所示。

圖8 邊緣檢測結果對比
由圖8可以看出,對于獨立的不同分量圖,其檢測出的邊緣是有差異的。如第一幅圖右側植物及陰影部分,B分量檢測出的邊緣細節相對更豐富完整。第二幅圖中蝴蝶的背景顏色主體為綠色,但由于顏色變換緩慢,所以在G分量邊緣圖中背景部分檢測到的邊緣像素點較少。第三幅圖中紅色汽車在R分量圖中車身邊緣出現偽邊緣的概率較小,且R分量邊緣更加連貫完整。
針對BSDS500數據集中的3幅圖,分別采用本文算法和其他4種的傳統算法Roberts、Laplacian、Sobel、Prewitt進行邊緣檢測,最終得到的檢測結果如圖9所示。

圖9 本文算法與其他算法的比較
由圖9的邊緣檢測結果可以看出,本文算法相比于其他算法檢測到的邊緣更加清晰,細節更加完整,邊緣連貫性更好,檢測率更高。
本文采用改進的Kirsch算法,利用8個羅盤核模板對圖像進行卷積分別求圖像梯度,然后取其結果最大的絕對值作為最終圖像梯度,提高了邊緣檢測率。其次,以圖像均值為參照,選取雙閾值進行邊緣點的提取分割,極大地降低了偽邊緣的概率。然后,通過對不同色彩空間下分量圖進行檢測處理,得到細節偏重不同的邊緣結果圖。最后,對R、G、B不同分量的檢測結果進行邊緣融合,從而得到最終的檢測結果。
實驗BSDS500數據集中的200張測試集圖像對本文算法進行了驗證,并與其他幾張檢測算法的檢測結果進行了比較,通過比較得出以下幾點結論:
1)本文算法適用于大多數常見的普通圖像,可用于包括人物、植物、建筑、昆蟲等圖像的邊緣檢測,普適性強。
2)由不同色彩空間檢測結果可以看出,同一幅圖像不同彩色空間分量圖的邊緣檢測結果存在差異,有的分量檢測結果偏重細節,有的分量檢測結果偏重主體信息,且細節的偏重存在局部性差異。這些差異均來自圖像整體色調的差異以及照片采集時光照的影響。本文算法正是以此為依據,首先對圖像的各分量圖進行邊緣檢測,再將檢測結果進行融合得到最終的檢測結果。
3)由本文算法與其他算法的比較結果可以看出,本文算法相比于其他算法檢測到的邊緣更加清晰,細節更加完整,邊緣連貫性更好,檢測率更高。