前言
邊緣檢測(cè)是圖像處理和計(jì)算機(jī)視覺(jué)中,尤其是特征提取中的一個(gè)研究領(lǐng)域。有許多方法用于邊緣檢測(cè),它們的絕大部分可以劃分為兩類:
基于一階導(dǎo)數(shù)
首先計(jì)算邊緣強(qiáng)度, 通常用一階導(dǎo)數(shù)表示, 例如梯度模,然后,用計(jì)算估計(jì)邊緣的局部方向, 通常采用梯度的方向,并利用此方向找到局部梯度模的最大值。
即:圖像一階導(dǎo)數(shù)中的最大和最小值來(lái)檢測(cè)邊界,通常是將邊界定位在梯度最大的方向。
一階:Roberts Cross算子,Prewitt算子,Sobel算子, Kirsch算子,羅盤(pán)算子;
基于 零穿越/零交叉 的一類:二階導(dǎo)數(shù)
基于零穿越的方法通過(guò)尋找圖像二階導(dǎo)數(shù)零穿越來(lái)尋找邊界,通常是Laplacian過(guò)零點(diǎn)或者非線性差分表示的過(guò)零點(diǎn)。
基于二階導(dǎo)數(shù):Marr-Hildreth,在梯度方向的二階導(dǎo)數(shù)過(guò)零點(diǎn),Canny算子,Laplacian算子。
一、邊緣檢測(cè)
為什么要進(jìn)行邊緣檢測(cè)呢?因?yàn)檫@是穩(wěn)定的視覺(jué)特征,是人類經(jīng)驗(yàn)的結(jié)果。邊緣檢測(cè)的目的是標(biāo)識(shí)數(shù)字圖像中亮度變化明顯的點(diǎn)。圖像屬性中的顯著變化通常反映了屬性的重要事件和變化。主要包括:
深度上的不連續(xù)(物體處在不同的物平面上);
表面方向不連續(xù)(如正方體的不同的兩個(gè)面)
物質(zhì)屬性變化(會(huì)導(dǎo)致光的反射系數(shù)不同)
場(chǎng)景照明變化(陰影)

那么,對(duì)于下面這張圖像進(jìn)行邊緣檢測(cè)時(shí),沿著這條紅色的水平線,得到其每個(gè)像素點(diǎn)上的強(qiáng)度(也就是灰度值),由此可知邊緣就是在像素值發(fā)生突變的地方。那么如果從一個(gè)信號(hào)中找到突變的地方呢?


顯然,根據(jù)數(shù)學(xué)知識(shí),對(duì)信號(hào)曲線進(jìn)行求一階導(dǎo)數(shù),對(duì)于邊緣來(lái)說(shuō),并不需要關(guān)注方向,只需要關(guān)注極值即可,所以可以通過(guò)求導(dǎo)得到邊緣所在位置。
由此將這跟紅色的水平線從上至下滑動(dòng)即可得到整個(gè)圖像的豎直方向上的邊緣。

對(duì)于一個(gè)二元函數(shù)f(x,y) ,響應(yīng)的的求導(dǎo)公式:

在圖像處理過(guò)程中,對(duì)于像素值的位置的最小單位是 1 px,因此令 ε=1 ,使用這種近似來(lái)作為點(diǎn)前位置的導(dǎo)數(shù),則有:

其實(shí)由這個(gè)公式可以看出,就是右面一個(gè)像素減去左面一個(gè)像素,作為當(dāng)前位置的導(dǎo)數(shù),這樣簡(jiǎn)化之后其實(shí)就可以把這個(gè)過(guò)程使用卷積代替,即卷積核為:這就是檢測(cè)豎直方向上邊緣的卷積核。同理也可以得到水平方向上邊緣的卷積核。

那么接下來(lái)舉個(gè)例子,下面這兩個(gè)邊緣檢測(cè)結(jié)果哪個(gè)是水平方向卷積核檢測(cè)到的?
哪個(gè)是豎直方向卷積核檢測(cè)到的?因?yàn)橹挥兴骄矸e核檢測(cè)的是左右差異較大的像素值,自然而然連成線之后就是豎直方向的線條。

接下來(lái),解釋一下梯度(一維叫導(dǎo)數(shù),高維叫梯度),對(duì)于一副圖像的一個(gè)像素點(diǎn)



這個(gè)幅值越大說(shuō)面這點(diǎn)附近像素值變化越劇烈,就越有可能是邊緣。
其實(shí)梯度對(duì)于一副圖像來(lái)說(shuō)就是圖像變化劇烈的方向。而且梯度方向與邊緣是垂直的。
二、邊緣檢測(cè)流程
由于在實(shí)際應(yīng)用過(guò)程中信號(hào)的采集往往伴隨著噪聲的出現(xiàn),假設(shè)有下面這么一個(gè)一維信號(hào),很顯然邊緣就在突變的地方。但是由于真實(shí)點(diǎn)附近存在噪聲,如果直接使用邊緣濾波器(邊緣卷積)得到的結(jié)果會(huì)是什么樣?


顯然,通過(guò)邊緣檢測(cè)器之后得到導(dǎo)數(shù)(梯度)是無(wú)法確定極大值極小值的,因此無(wú)法判斷邊緣位置。所以,往往在進(jìn)行邊緣檢測(cè)前首先要進(jìn)行濾波。
這是因?yàn)檫吘墮z測(cè)算子主要是基于圖像強(qiáng)度的一階導(dǎo)數(shù)和二階導(dǎo)數(shù),但是通常情況下導(dǎo)數(shù)對(duì)噪聲十分敏感,因此必須使用濾波器來(lái)進(jìn)行平滑噪聲。

因此對(duì)于一維圖像f使用高斯卷積核 g進(jìn)行濾波,通過(guò)將f*g(卷積)得到的結(jié)果可以看出,最左邊和最右面為什么沒(méi)了呢?這就是因?yàn)榫矸e過(guò)程中如果不對(duì)邊界補(bǔ)充的話,卷積結(jié)果相比原來(lái)圖像會(huì)小一圈。
經(jīng)過(guò)高斯卷積之后的圖像就相對(duì)平滑很多,在這個(gè)基礎(chǔ)上再進(jìn)行邊緣檢測(cè),得到結(jié)果如下。很顯然求極值就十分簡(jiǎn)單了。

因此,我們?cè)趯?duì)圖像進(jìn)行邊緣檢測(cè)前首先用高斯卷積對(duì)圖像進(jìn)行平滑就是了,因?yàn)槲覀円矡o(wú)法確定圖像是否包含噪聲。
雖然上面這個(gè)過(guò)程實(shí)現(xiàn)了邊緣檢測(cè),但是在這個(gè)過(guò)程中使用了兩次卷積,首先是濾波過(guò)程的卷積,然后是求導(dǎo)過(guò)程的卷積,顯然卷積是十分耗時(shí)的,那么能否使用一次卷積完成這個(gè)操作呢?

這個(gè)公式成立是因此卷積是滿足交換律,結(jié)合律和分配率的。所以使用右面的公式,先對(duì)高斯卷積核進(jìn)行求導(dǎo),這個(gè)模板一般比較小,求導(dǎo)也相對(duì)簡(jiǎn)單,然后再進(jìn)行卷積。這樣就能加速運(yùn)算過(guò)程了。


雖然,使用平滑對(duì)圖像進(jìn)行去噪,但是它也會(huì)模糊圖像,因此我們可以考慮在不同的scale下進(jìn)行邊緣檢測(cè)。
也就是選擇響應(yīng)的窗寬和標(biāo)準(zhǔn)差即可對(duì)圖像進(jìn)行平滑并邊緣檢測(cè),由于窗寬一般默認(rèn)經(jīng)驗(yàn)值3σ,因此只需要指定參數(shù)σ即可執(zhí)行這兩個(gè)過(guò)程。所以可以考慮使用不用的σ在不同的scale下進(jìn)行邊緣檢測(cè)。
因此,接下來(lái)對(duì)比重新認(rèn)識(shí)一下高斯卷積核與高斯一階導(dǎo)數(shù)核的區(qū)別:
高斯卷積核(smoothing filters):高斯卷積實(shí)際上是濾除高頻信號(hào),是低通濾波器,濾波器模板中的數(shù)值沒(méi)有負(fù)數(shù),而且這些值相加和為1。

高斯一階導(dǎo)數(shù)核(derivative filters):濾波器模板中的數(shù)值一定有負(fù)數(shù),而且這些相加為0。

總結(jié)一下,對(duì)于一副圖像進(jìn)行邊緣檢測(cè)的流程
濾波
增強(qiáng),增強(qiáng)算法可以將圖像灰度點(diǎn)鄰閾強(qiáng)度值有顯著變化的點(diǎn)凸顯出來(lái)。
邊緣檢測(cè),經(jīng)過(guò)增強(qiáng)的圖像,往往鄰域中有很多點(diǎn)的梯度值比較大,而在特定應(yīng)用中,這些點(diǎn)并不是要找的邊緣點(diǎn),所以應(yīng)該采用某些方法對(duì)這些點(diǎn)進(jìn)行取舍。實(shí)際工程中,常用的方法是通過(guò)閾值化的方法進(jìn)行檢測(cè)。
三、Canny邊緣檢測(cè)

對(duì)于這樣一張圖像進(jìn)行邊緣檢測(cè)時(shí),首先第一步,對(duì)圖像進(jìn)行濾波處理,然后計(jì)算兩個(gè)方向的梯度,先計(jì)算每個(gè)像素點(diǎn)的梯度,然后計(jì)算幅值,得到下面這張圖像。

在進(jìn)行梯度計(jì)算時(shí),梯度較大的地方可能是邊緣也有可能是噪聲,雖然已經(jīng)進(jìn)行過(guò)一次平滑濾波,但是仍然還會(huì)有一些高強(qiáng)度的噪聲無(wú)法濾除,因此在這里選擇使用閾值對(duì)其進(jìn)行第二次過(guò)濾,去除一些梯度相對(duì)較小的點(diǎn)。

然而經(jīng)過(guò)閾值處理后,還是會(huì)有一些小問(wèn)題,就是圖像中的邊緣會(huì)很寬,這是由于圖像中的邊緣像素值都是緩慢變化的,不會(huì)是一個(gè)垂直的突變,即使原始圖像中的邊緣是一個(gè)垂直的突變,經(jīng)過(guò)高斯平滑之后它就會(huì)變得不那么垂直了,所以這就是為什么邊會(huì)那么寬。那如何解決呢?
接下來(lái)就介紹了一個(gè)著名的算法:NMS非極大值抑制。它的一個(gè)主要思想就是,首先確定邊上的一個(gè)點(diǎn),然后沿著邊的梯度方向比較跟相鄰點(diǎn)的梯度進(jìn)行比較,也即是右圖中的q和Ρ,γ進(jìn)行比較。如果 q 最大則保留,如果不是則舍去。

經(jīng)過(guò)抑制以后:顯然這就細(xì)化了很多,但是也會(huì)存在一定的問(wèn)題,比如脖子下面的邊緣消失了,出現(xiàn)了斷斷續(xù)續(xù)的情況,出現(xiàn)這種情況的原因是什么呢?
這是因?yàn)樵O(shè)置的閾值太高了,導(dǎo)致這部分梯度被濾除掉了,但是如果閾值設(shè)置的較低又會(huì)出現(xiàn)很多“假邊”,因此這里需要對(duì)剛剛設(shè)置閾值過(guò)濾這一步進(jìn)行改進(jìn)。

改進(jìn)的思路:就是使用雙閾值法,首先使用一個(gè)較高的閾值去將那些確定度較高的邊檢測(cè)出來(lái),稱為“強(qiáng)邊”,然后再使用一個(gè)較小的閾值顯露更多的邊,稱為“弱邊”,此時(shí)選擇保留那些跟強(qiáng)邊有連接關(guān)系的邊。這個(gè)想法就很巧妙。

左邊是高閾值,中間是低閾值,右邊是雙閾值
關(guān)于Canny邊緣檢測(cè)是有嚴(yán)格意義上的數(shù)學(xué)推導(dǎo)的,這個(gè)后續(xù)補(bǔ)充一下!
審核編輯 :李倩
-
機(jī)器視覺(jué)
+關(guān)注
關(guān)注
163文章
4719瀏覽量
124959 -
邊緣檢測(cè)
+關(guān)注
關(guān)注
0文章
94瀏覽量
18604 -
數(shù)字圖像
+關(guān)注
關(guān)注
2文章
121瀏覽量
19505
原文標(biāo)題:機(jī)器視覺(jué)學(xué)習(xí)—邊緣檢測(cè)
文章出處:【微信號(hào):vision263com,微信公眾號(hào):新機(jī)器視覺(jué)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
機(jī)器視覺(jué)檢測(cè)PIN針
#硬聲創(chuàng)作季 機(jī)器視覺(jué)技術(shù)與應(yīng)用:基于微分的邊緣檢測(cè)
#硬聲創(chuàng)作季 機(jī)器視覺(jué)技術(shù)與應(yīng)用:canny邊緣檢測(cè)算子
機(jī)器視覺(jué)算法與應(yīng)用(雙語(yǔ)版)
機(jī)器視覺(jué)檢測(cè)設(shè)備的優(yōu)勢(shì)
深圳機(jī)器視覺(jué)檢測(cè)項(xiàng)目包括哪些?
高性能的機(jī)器學(xué)習(xí)讓邊緣計(jì)算更給力
基于機(jī)器視覺(jué)定位技術(shù)之產(chǎn)品邊緣輪廓檢測(cè)
探究機(jī)器視覺(jué)定位技術(shù)之產(chǎn)品邊緣輪廓檢測(cè)
OpenCV使用深度學(xué)習(xí)做邊緣檢測(cè)的流程

機(jī)器視覺(jué)學(xué)習(xí)—邊緣檢測(cè)
評(píng)論