邊緣檢測(cè)常用算子:
基于一階微分的邊緣檢測(cè)方法:
Roberts 算子考慮圖像的2*2鄰域,,是最簡(jiǎn)單的邊緣檢測(cè)算子,算法過程簡(jiǎn)述: 【1】,,遍歷圖像(除去上邊緣和左邊緣),,對(duì)每個(gè)像素做Roberts模板運(yùn)算。 【2】,,將結(jié)果保存到目標(biāo)圖像,,結(jié)束。
Sobel算子考察的是3*3鄰域,,由兩個(gè)卷積核組成,見上圖,,算法過程簡(jiǎn)述: 【1】,,遍歷圖像(除去邊緣,防止越界),,對(duì)每個(gè)像素做Sobel模板卷積運(yùn)算,。 【2】,比較兩個(gè)計(jì)算結(jié)果的大小,,取較大者復(fù)制到目標(biāo)圖像,,結(jié)束。
Prewitt算子和Sobel算子類似,,所不同的是選用不同的模板而已,,算法過程相同。
Krisch算子同樣考究3*3鄰域,,所不同的是選用了八個(gè)卷積核,,見上圖,,算法過程簡(jiǎn)述: 【1】,遍歷圖像(除去邊緣,,防止越界),,對(duì)每個(gè)像素做Krisch模板卷積運(yùn)算。 【2】,,比較八個(gè)計(jì)算結(jié)果的大小,,取較大者復(fù)制到目標(biāo)圖像,結(jié)束,。
基于二階微分的邊緣檢測(cè)方法:
Laplacian 算子是二階導(dǎo)數(shù)邊緣算子,,考察的是3*3鄰域,上圖是兩種比較常用的模板,,算法簡(jiǎn)述如下: 【1】,,遍歷圖像(除去邊緣,防止越界),,對(duì)每個(gè)像素做Laplancian模板卷積運(yùn)算,,注意是只做其中的一種模板運(yùn)算,并不是兩個(gè),。 【2】,,復(fù)制到目標(biāo)圖像,結(jié)束,。
Gauss-Laplacian考察的是5*5的鄰域,,檢測(cè)的同時(shí),引入了濾波,,是噪聲得以平滑,,上圖是一種常用的算子,算法簡(jiǎn)述,。 【1】,,遍歷圖像(除去邊緣,防止越界),,對(duì)每個(gè)像素做Gauss -Laplancian模板卷積運(yùn)算,。 【2】,,復(fù)制到目標(biāo)圖像,結(jié)束。
Canny邊緣檢測(cè)是非常重要的一種邊緣檢測(cè)算法,,主要過程如下: 【1】,,用高斯濾波器平滑圖像,。 已經(jīng)學(xué)習(xí)過,,根據(jù)高斯函數(shù),構(gòu)造高斯模板,進(jìn)行濾波,,不在贅述,。 【2】,用一階偏導(dǎo)的有限差分來計(jì)算梯度的幅值和方向,; 計(jì)算梯度作用模板,,遍歷像素,進(jìn)行模板運(yùn)算即可,。
幅值和方向:
其中,,Phi 表示是幅值,Theta 是方向,,用圖像副本進(jìn)行保存,。 【3】,對(duì)梯度幅值進(jìn)行非極大值抑制,;
為確定邊緣,,必須保留局部梯度最大的點(diǎn),而抑制非極大值(NMS),。
已經(jīng)求出Theta 的值,梯度的方向用于非極大值的抑制,,將梯度角離散化到0,1,,2,3中的一個(gè)(通過線性映射),,采用近似的算法,。知道了梯度角,也就知道了梯度線方向,。 鄰域的中心像素M與沿著梯度線的兩個(gè)像素相比,。如果M的梯度值不比沿梯度線的兩個(gè)相鄰像素梯度值大,則令M=0,。
【4】,,用雙閾值算法檢測(cè)和連接邊緣。 減少假邊緣段數(shù)量的典型方法是對(duì)N[i,,j]使用一個(gè)閾值,。將低于閾值的所有值賦零值,。但問題是如何選取閾值,? 解決方法: 雙閾值算法。雙閾值算法對(duì)非極大值抑制圖象作用兩個(gè)閾值τ1和τ2,,且2τ1≈τ2,,從而可以得到兩個(gè)閾值邊緣圖象N1[i,j]和N2[i,j]。由于N2[i,,j]使用高閾值得到,,因而含有很少的假邊緣,但有間斷(不閉合),。雙閾值法要在N2[i,,j]中把邊緣連接成輪廓,當(dāng)?shù)竭_(dá)輪廓的端點(diǎn)時(shí),,該算法就在N1[i,j]的8鄰點(diǎn)位置尋找可以連接到輪廓上的邊緣,,這樣,算法不斷地在N1[i,j]中收集邊緣,,直到將N2[i,j]連接起來為止,。
|
|