胡 松,黃志遠(yuǎn),鄧 磊,李壯豪,范潔瀅,曾 維
(成都理工大學(xué),四川 成都 610000)
對(duì)圖像通過(guò)技術(shù)手段進(jìn)行一系列的處理,從而得到想要的圖像或達(dá)到預(yù)期的目的稱為圖像處理?,F(xiàn)如今,圖像處理已經(jīng)應(yīng)用到了各個(gè)領(lǐng)域,比如生活當(dāng)中的PS技術(shù)、科研中的遙感攝像技術(shù)、軍事中的間諜衛(wèi)星技術(shù)、工業(yè)中的CAD技術(shù)、安防中的監(jiān)控技術(shù)等等??梢园l(fā)現(xiàn),圖像處理已經(jīng)存在于生活的方方面面,也使得人們的生活質(zhì)量得到了極大的提高。
在圖像處理中,圖像分割是圖像處理技術(shù)中的一顆皇冠,而邊緣檢測(cè)則是圖像分割中的一顆明珠,邊緣檢測(cè)技術(shù)是通過(guò)搜索圖像區(qū)域中的各個(gè)邊界,從而達(dá)到圖像分割的目的。圖像邊緣提取是圖像分割的基礎(chǔ),也是圖像識(shí)別中的一個(gè)重要屬性。
邊緣上的信息在進(jìn)行圖像處理時(shí)是重要的圖像特征信息,因此在圖像分析研究中,邊緣檢測(cè)方法研究是一個(gè)特別引人注目的課題。在圖像處理中,當(dāng)對(duì)圖像進(jìn)行分割時(shí),應(yīng)用如Sobel算子、梯度算子、Prewitt算子等的時(shí)候,因?yàn)檫吘壣系男畔⒑蛨D像中存在的噪聲都屬于高頻信號(hào)[1],有時(shí)會(huì)將噪聲和邊緣上的信息一起過(guò)濾掉,這樣會(huì)遺失重要的邊緣信息,并不能達(dá)到進(jìn)行圖像處理的目的——得到想要的信息。
所以Canny于1986年提出了一個(gè)特別經(jīng)典并且有效的算子——Canny最佳邊緣檢測(cè)算子。這個(gè)算法的本質(zhì)是一個(gè)多級(jí)邊緣檢測(cè)算子,通過(guò)設(shè)置雙閾值檢測(cè)方法來(lái)達(dá)到既不會(huì)因?yàn)殚撝颠^(guò)高檢測(cè)出圖像重要邊緣的同時(shí)存在過(guò)多的異常值,也不會(huì)因?yàn)殚撝颠^(guò)低檢測(cè)出圖像所有邊緣的同時(shí)存在過(guò)多的孤立點(diǎn)即不重要的邊緣這兩個(gè)目的。
可是原始的Canny算子在進(jìn)行第一步——高斯濾波的時(shí)候,因?yàn)楦咚篂V波在去除噪聲平滑邊緣的時(shí)候,不可避免地會(huì)使圖像的邊緣信息損失掉一些,使邊緣減弱[2],那么在最后得到的邊緣圖像中,會(huì)損失掉一些重要的邊緣。當(dāng)然,也可以由此推論出,若將高斯濾波的半徑不斷增大,在最后得到的邊緣圖中,看見(jiàn)的邊緣也將會(huì)越來(lái)越少,所以基于這個(gè)原因,提出了Canny算法第一步的改進(jìn)思路——選擇性平滑濾波。也注意到,Canny算子在選擇閾值時(shí)是靠經(jīng)驗(yàn)選擇的,這樣選擇閾值比較困難也不具有適應(yīng)性,所以提出了采用迭代算法來(lái)改進(jìn)閾值選擇問(wèn)題。
Canny算法是John F. Canny在1986年提出的一個(gè)基于Sobel算子的最佳邊緣檢測(cè)算子[3],該算子被他收錄在他所寫(xiě)的邊緣檢測(cè)計(jì)算理論中。Canny算子中最精華的一點(diǎn)是使用一個(gè)高閾值和一個(gè)低閾值來(lái)確定圖像中哪些點(diǎn)是屬于邊緣的。
一般的二值圖像有兩個(gè)缺點(diǎn)[4],第一缺點(diǎn)是:選取的閾值過(guò)低會(huì)包含許多偽邊緣,不能準(zhǔn)確地檢測(cè)出重要邊緣,而如果選取的閾值過(guò)高,又會(huì)漏掉一些邊緣,造成邊緣破裂。第二個(gè)缺點(diǎn)是檢測(cè)出來(lái)的邊緣過(guò)粗而導(dǎo)致不能準(zhǔn)確地得到某些細(xì)節(jié)邊緣,無(wú)法完成圖像的精確定位。
Canny為了解決上述問(wèn)題,提出了Canny邊緣檢測(cè)算法。
Canny算法的一般步驟為:首先對(duì)圖像進(jìn)行高斯濾波[5],即去掉圖像中的噪聲,然后利用差分一階偏導(dǎo)計(jì)算出圖像梯度的幅值與方向,接著對(duì)圖像進(jìn)行非極大值抑制,最后利用雙閾值法對(duì)閾值進(jìn)行滯后并連接邊緣,形成一個(gè)完整的邊緣輪廓[6]。
流程框圖如圖1所示。
圖1 Canny算法流程
1.2.1 高斯濾波(去噪聲)
高斯濾波是一種線性平滑濾波,它使用高斯函數(shù)進(jìn)行濾波,是一種低通濾波,雖然效率比不上其他的濾波方法,但是由于它對(duì)噪聲優(yōu)越的處理能力使得人們將它視作是一種優(yōu)秀的濾波方法。
高斯濾波的核心原理依然是鄰域平均法[7]。首先設(shè)定一個(gè)模板,然后對(duì)這個(gè)模板內(nèi)的像素灰度求加權(quán)平均值,再將這個(gè)加權(quán)平均值賦值給中心像素點(diǎn)的灰度,按照這個(gè)步驟,高斯濾波掃描整個(gè)圖像的像素點(diǎn),然后分別進(jìn)行加權(quán)平均,由于高斯濾波經(jīng)過(guò)傅里葉變換得到另一種不一樣的高斯函數(shù),所以高斯濾波是一種低通濾波。由于高斯濾波不斷減弱了圖像邊緣的頻率變化,所以對(duì)消除正態(tài)分布形狀的噪聲效果很好。
1.2.2 梯度計(jì)算
計(jì)算梯度幅值和方向的步驟如下所示:
(1)使用X方向和Y方向的卷積陣列。
(1)
(2)
(2)計(jì)算梯度幅值與方向。
(3)
(4)
1.2.3 非極大值抑制
使用3×3窗口在8個(gè)方向的鄰域?qū)(i,j)的所有元素沿梯度方向進(jìn)行梯度幅值的插值。對(duì)每個(gè)點(diǎn),將鄰域中心元素M(i,j)與沿梯度方向的2個(gè)梯度插值進(jìn)行比較,如果M(i,j)的值小于梯度上的兩個(gè)插值結(jié)果,則將M(i,j)上的邊緣標(biāo)志位賦值為0。
至于為什么要在沿梯度方向進(jìn)行插值,是因?yàn)樵贑anny提出的方法中,非極大值抑制[8]是在0,45,90,135四個(gè)梯度方向上進(jìn)行[9],每個(gè)像素點(diǎn)的梯度方向按照相近程度用這四個(gè)梯度方向來(lái)代替,所以,非極大值抑制比較的相鄰兩個(gè)像素就是:0:左邊和右邊;45:右上和左下;90:上邊和下邊;135:左上和右下。
1.2.4 雙閾值檢測(cè)
雙閾值檢測(cè)[10]又稱為雙門(mén)限方法檢測(cè)。用一個(gè)低閾值和一個(gè)高閾值對(duì)經(jīng)過(guò)非極大值抑制的圖像進(jìn)行幅值處理,將梯度低于閾值的像素點(diǎn)灰度值置為0[11],由此將圖像的邊緣提取出來(lái)。設(shè)低閾值提取出來(lái)的邊緣圖像為T(mén)1,高閾值提取出來(lái)的邊緣圖像為T(mén)2。因?yàn)門(mén)1為低閾值提取出來(lái)的圖像,所以包含的邊緣比較連續(xù),但是也含有較多的虛假邊緣;T2為高閾值提取出來(lái)的圖像,包含的邊緣比較斷斷續(xù)續(xù),但不含虛假邊緣,因此需要結(jié)合T1和T2來(lái)得到一個(gè)完整的邊緣圖像(見(jiàn)圖2),T1圖像為圖(a),T2圖像為圖(b),具體步驟如下:先在T2圖像中找到一個(gè)灰度值不為0的P點(diǎn),然后沿著邊緣線一直延續(xù)到終點(diǎn)Q,在T1圖像的Q'附近的8-鄰域?qū)ふ曳橇阆袼豏',把它填充到T2圖像中作為R,接著把R點(diǎn)作為起始點(diǎn)繼續(xù)重復(fù)上述的步驟,一直循環(huán),直到在T1和T2圖像中都無(wú)法進(jìn)行,這樣一個(gè)以P點(diǎn)為起始點(diǎn)的完整邊緣線形成(Deriche et al. 1987)。然后在T2圖像中尋找新的邊緣線,重復(fù)上述步驟,直到T2中再也找不到新的邊緣線為止。
圖2 邊緣圖像
2.1.1 高斯濾波會(huì)將邊緣信息減弱,造成重要信息的丟失
Canny邊緣檢測(cè)算法采用的高斯濾波[12]方法是一種非常優(yōu)秀的濾波方法,能夠很好地濾除掉高斯噪聲和椒鹽噪聲,可是,高斯濾波有一個(gè)不可避免的缺陷,就是它在進(jìn)行圖像去噪處理的時(shí)候,會(huì)將圖像的邊緣信息減弱。
如果邊緣信息被減弱,那么在后續(xù)的處理中,這些重要的邊緣會(huì)被當(dāng)作和噪聲一樣的信息被之后的雙閾值處理和連通計(jì)算過(guò)濾掉,尤其是有一些比較弱的邊緣和孤立邊緣。那么這樣最后得到的邊緣圖像會(huì)漏掉一些重要的邊緣,不利于對(duì)其進(jìn)行分析。
基于這個(gè)原因,現(xiàn)在考慮,既然是所有的高頻信息都會(huì)參與平滑濾波[12],那么可以設(shè)置一個(gè)合理的閾值,讓鄰域內(nèi)的像素點(diǎn)的灰度值與中心點(diǎn)像素灰度值的差值小于這個(gè)閾值的像素點(diǎn)進(jìn)行平滑濾波,而不是讓鄰域內(nèi)所有的像素點(diǎn)參與濾波,這樣便使得邊緣信息不會(huì)參與計(jì)算,避免了邊緣信息的削弱,也很好地濾去了噪聲。基于這個(gè)想法,提出了具有保留邊緣信息的選擇性平滑濾波方法。
2.1.2 憑借經(jīng)驗(yàn)選取閾值,會(huì)造成誤差
Canny算法的雙閾值步驟中,閾值是自己憑經(jīng)驗(yàn)選擇,一般將高閾值的0.5倍或者0.4倍作為所選取的低閾值。可是憑經(jīng)驗(yàn)選擇不一定是準(zhǔn)確的,有時(shí)需要多次試驗(yàn)才能確定一個(gè)最好的高低閾值。這樣選取的閾值是不能很好地適應(yīng)每一次邊緣提取的要求的,所以需要找到一個(gè)有很好適應(yīng)性的閾值算法,于是想到了利用迭代算法[13]來(lái)得到合理的閾值。
這里設(shè)定Canny算法中高閾值為100,低閾值為50,增大高斯半徑,增大值分別為2,3,5,得到的Canny邊緣檢測(cè)圖像如圖3所示。
高斯半徑為2 高斯半徑為3 高斯半徑為5
明顯看到,隨著高斯半徑不斷增大,所得到的邊緣數(shù)量在不斷減少。從中證明了,在進(jìn)行高斯濾波的同時(shí),也將邊緣信息削弱了。
在使用均值選擇性濾波后,同樣設(shè)定Canny算法中高閾值為100,低閾值為50,設(shè)定均值選擇性濾波閾值為30,增大均值選擇性濾波半徑,增大值分別為:2,5,15,這里得到的Canny邊緣檢測(cè)圖像如圖4所示。
高斯半徑為2 高斯半徑為5 高斯半徑為15
從中可以看出,在使用均值選擇性濾波之后,設(shè)定了均值選擇性濾波的閾值并保持這個(gè)閾值不變的情況下,增大均值半徑,最后所得到的Canny邊緣檢測(cè)圖像的邊緣細(xì)節(jié)差別并無(wú)太大區(qū)別。
而若是保持均值半徑不變,Canny算法高低閾值不變,增大設(shè)定的均值選擇性濾波閾值,得到的Canny邊緣檢測(cè)圖像如圖5所示。
圖5 Canny邊緣檢測(cè)圖
因?yàn)閷⒃O(shè)定的閾值增大,表明有更多的像素點(diǎn)參與了平滑濾波,受到削弱的邊緣信息也就更多,所以這里增大設(shè)定的閾值,可以看到設(shè)定閾值為40的圖像的邊緣細(xì)節(jié)比設(shè)定閾值為50的圖像的邊緣細(xì)節(jié)更好。
最后,通過(guò)這種方法,能夠很好地解決高斯濾波使得邊緣信息減弱的問(wèn)題,同時(shí),這種方法在選擇鄰域半徑方面的要求也明顯沒(méi)有高斯濾波選擇鄰域半徑的要求嚴(yán)格。
Canny算法在最后一步雙閾值法中,閾值是依靠經(jīng)驗(yàn)選擇,而且高低閾值比值是固定的。在實(shí)際操作中,受環(huán)境、光照等原因制約,原始Canny算法的高低閾值比值因?yàn)槭枪潭ǖ牟⒉贿m用于所有需要進(jìn)行邊緣提取的場(chǎng)合。所以需要找到一個(gè)能計(jì)算出最佳高低閾值的算法,這時(shí)想到了迭代算法。
迭代算法總的思路如下:
假設(shè)一幅混有噪聲的圖像G(x,y)由原始圖像f(x,y)和噪聲z(x,y)組成,即:
G(x,y)=f(x,y)+z(x,y)
(5)
通過(guò)閾值分割將這幅混有噪聲的圖像分為G1(x,y)和G2(x,y),由于噪聲是隨機(jī)分布的,所以依然認(rèn)為這兩部分圖像是混有噪聲的,表達(dá)式如下:
G1(x,y)=f1(x,y)+z(x,y)
(6)
G2(x,y)=f2(x,y)+z(x,y)
(7)
進(jìn)行迭代運(yùn)算的時(shí)候,要將這兩部分圖像分別求它們的灰度均值,即:
E{G1(x,y)}=E{f1(x,y)+z(x,y)}=
E{f1(x,y)}
(8)
E{G2(x,y)}=E{f2(x,y)+z(x,y)}=
E{f2(x,y)}
(9)
從這兩個(gè)表達(dá)式可以得出,進(jìn)行迭代運(yùn)算的次數(shù)增加時(shí),所求得平均灰度值越來(lái)越接近真實(shí)值,也證明了采用迭代運(yùn)算計(jì)算出來(lái)的最佳高低閾值是不會(huì)受到噪聲的干擾的。
在進(jìn)行迭代運(yùn)算時(shí),總的步驟是:先用直方圖統(tǒng)計(jì)出圖像的最小灰度值和最大灰度值,然后將這個(gè)最小灰度值和最大灰度值求和求均值,求出來(lái)的均值作為這次閾值分割的最原始閾值。這個(gè)原始閾值將圖像分為高于這個(gè)閾值的部分和低于這個(gè)閾值的部分。然后將高于這個(gè)閾值部分的圖像求出它的灰度均值,同樣的,將低于這個(gè)閾值部分的圖像求出它的灰度均值,之后將求出的這兩個(gè)灰度均值求和求均值,新求出來(lái)的均值和最原始的閾值進(jìn)行比較,若是等于最原始的閾值或者說(shuō)和最原始的閾值的差值等于某個(gè)值,便結(jié)束這次迭代運(yùn)算。這次得到的閾值和最原始的閾值便是最佳高低閾值。若是不滿足,便將這次得到的這個(gè)閾值再次將圖像進(jìn)行分割,按照上述步驟再次計(jì)算,直到得出最佳高低閾值。
具體步驟為[14]:
(1)使用直方圖統(tǒng)計(jì)出最小灰度和最大灰度,計(jì)算出最原始閾值T0。
T0={TK|K=0}
(10)
(11)
其中,K表示進(jìn)行迭代的次數(shù),Zmax和Zmin分別表示最大灰度值和最小灰度值。
(2)用得出來(lái)的閾值TK將圖像分為兩部分H1和H2。
H1={f(x,y)| ≥TK}
(12)
H2={f(x,y)}
(13)
(3)計(jì)算H1和H2這兩部分圖像的灰度均值[15]。
(14)
(15)
其中,f(i,j)是圖像中各個(gè)點(diǎn)的灰度值,NH(i,j),NL(i,j)滿足:
(16)
(17)
(4)計(jì)算新的閾值TK+1。
(18)
(5)如果TK=TK+1或者說(shuō)滿足指定的要求時(shí),迭代結(jié)束,否則,K=K+1,再次按照步驟2進(jìn)行迭代計(jì)算。
(6)迭代算法停止,求得的M1和M2即為最佳高低閾值。
根據(jù)前文所述,可以把Canny邊緣檢測(cè)算法的步驟修改為:
(1)對(duì)圖像進(jìn)行濾波處理;
(2)計(jì)算梯度的幅值和方向;
(3)進(jìn)行非極大值抑制;
(4)運(yùn)用迭代算法求出最佳高低閾值;
(5)將求出來(lái)的最佳高低閾值代入到雙閾值法中進(jìn)行圖像處理。
將Canny算法和改進(jìn)的Canny算法分別用Matlab求邊緣圖像[15],效果如圖6所示。
圖6 邊緣圖像
可以看到,直接運(yùn)用Canny算子得到的邊緣圖像會(huì)存在雙邊緣的情況,而改進(jìn)后的Canny算法較好地去除掉了雙邊緣的情況。
不漏檢真實(shí)存在的邊緣,也不把非邊緣點(diǎn)作為邊緣點(diǎn)檢出,使輸出的信噪比最大。
信噪比的數(shù)學(xué)表達(dá)式為:
(19)
計(jì)算兩張圖片的信噪比,結(jié)果如表1所示。
表1 傳統(tǒng)Canny算子與改進(jìn)Canny算子信噪比對(duì)比
分析表1可以知道,改進(jìn)后算法信噪比提高了14%,去噪效果更好。
該文采取林卉等人提出的邊緣檢測(cè)評(píng)價(jià)方法[16],計(jì)算出圖片的邊緣像素總數(shù)、四連通域數(shù)八連通域數(shù),并對(duì)其值進(jìn)行比較。容易推斷,比值1為八連通域數(shù)和邊緣點(diǎn)數(shù)的比值,比值越小,表示邊緣連續(xù)性越好;比值2為八連通域數(shù)和四連通域數(shù)的比值,比值越小,表明單像素邊緣所占比例越大,越符合單邊緣響應(yīng)準(zhǔn)則。
計(jì)算兩張圖片的相關(guān)信息,結(jié)果如表2所示。
表2 傳統(tǒng)Canny算子與改進(jìn)Canny算子實(shí)驗(yàn)結(jié)果
分析表2易知,改進(jìn)后的Canny算子,其連續(xù)性和準(zhǔn)確性都比原來(lái)有了很大幅度的提升。
能夠得出,通過(guò)迭代算法改進(jìn)的Canny算法,不僅能夠改善原始Canny算法高低閾值選擇的困難與不確定性,還能夠?qū)anny算法提取的邊緣進(jìn)行優(yōu)化,去除掉一些不必要的雙邊緣,更有利于分析圖像。
在圖像處理中,圖像分割是圖像處理中最關(guān)鍵的步驟之一,而邊緣檢測(cè)是圖像分割中的一種方法,通過(guò)搜索圖像區(qū)域中的各個(gè)邊界,從而達(dá)到圖像分割的目的。圖像的邊緣提取是圖像分割領(lǐng)域的基礎(chǔ),同時(shí)在圖像識(shí)別中,也是提取圖像特征的一個(gè)重要屬性。而在邊緣提取中,最引人矚目的無(wú)意是最優(yōu)檢測(cè)算子——Canny邊緣檢測(cè)算法,它在處理高斯白噪聲方面明顯優(yōu)于其他算子,所以提取出的邊緣又細(xì)又銳利,并且邊緣連續(xù)。然而由于原始Canny算子采取的高斯濾波不僅能濾去噪聲,也能將邊緣平滑,弱化邊緣信息,所以采取選擇性濾波方式,設(shè)定一個(gè)閾值,讓和中心像素灰度差值小于這個(gè)閾值的像素參與計(jì)算,和中心像素灰度差值大于這個(gè)閾值的像素被認(rèn)為是有效信息,不會(huì)被當(dāng)作噪聲除去,從而保留了這個(gè)高頻信號(hào),邊緣信息也得以保留。從上述實(shí)驗(yàn)可以看出,選擇性濾波效果很優(yōu)秀,在設(shè)定的閾值不變的情況下,無(wú)論選擇的模糊半徑多大,最終保留下來(lái)的邊緣細(xì)節(jié)并無(wú)明顯差別,這很好地彌補(bǔ)了原始Canny算法的缺點(diǎn),同時(shí),由于初始Canny算子的閾值選擇比較困難和不確定性,采取的迭代算法能夠很好地解決這些問(wèn)題,同時(shí)還能去除掉Canny邊緣檢測(cè)中一些不必要的邊緣。