邊緣檢測常用運算元

2021-05-25 08:18:52 字數 1802 閱讀 3371

邊緣檢測常用運算元:

基於一階微分的邊緣檢測方法:

roberts 運算元考慮影象的2*2鄰域,是最簡單的邊緣檢測運算元,演算法過程簡述:

【1】,遍歷影象(除去上邊緣和左邊緣),對每個畫素做roberts模板運算。

【2】,將結果儲存到目標影象,結束。

sobel運算元考察的是3*3鄰域,由兩個卷積核組成,見上圖,演算法過程簡述:

【1】,遍歷影象(除去邊緣,防止越界),對每個畫素做sobel模板卷積運算。

【2】,比較兩個計算結果的大小,取較大者複製到目標影象,結束。

prewitt運算元和sobel運算元類似,所不同的是選用不同的模板而已,演算法過程相同。

krisch運算元同樣考究3*3鄰域,所不同的是選用了八個卷積核,見上圖,演算法過程簡述:

【1】,遍歷影象(除去邊緣,防止越界),對每個畫素做krisch模板卷積運算。

【2】,比較八個計算結果的大小,取較大者複製到目標影象,結束。

基於二階微分的邊緣檢測方法:

laplacian 運算元是二階導數邊緣運算元,考察的是3*3鄰域,上圖是兩種比較常用的模板,演算法簡述如下:

【1】,遍歷影象(除去邊緣,防止越界),對每個畫素做laplancian模板卷積運算,注意是只做其中的一種模板運算,並不是兩個。

【2】,複製到目標影象,結束。

gauss-laplacian考察的是5*5的鄰域,檢測的同時,引入了濾波,是雜訊得以平滑,上圖是一種常用的運算元,演算法簡述。

【1】,遍歷影象(除去邊緣,防止越界),對每個畫素做gauss -laplancian模板卷積運算。

【2】,複製到目標影象,結束。

canny邊緣檢測是非常重要的一種邊緣檢測演算法,主要過程如下:

【1】,用高斯濾波器平滑影象。

已經學習過,根據高斯函式,構造高斯模板,進行濾波,不在贅述。

【2】,用一階偏導的有限差分來計算梯度的幅值方向

計算梯度作用模板,遍歷畫素,進行模板運算即可。

幅值和方向:

其中,phi 表示是幅值,theta 是方向,用影象副本進行儲存。

【3】,對梯度幅值進行非極大值抑制;

為確定邊緣,必須保留區域性梯度最大的點,而抑制非極大值(nms)。

解決辦法是,利用梯度的方向:

已經求出theta 的值,梯度的方向用於非極大值的抑制,將梯度角離散化到0,1,2,3中的乙個(通過線性對映),採用近似的演算法。知道了梯度角,也就知道了梯度線方向。

鄰域的中心畫素m與沿著梯度線的兩個畫素相比。如果m的梯度值不比沿梯度線的兩個相鄰畫素梯度值大,則令m=0。

【4】,用雙閾值演算法檢測和連線邊緣。

減少假邊緣段數量的典型方法是對n[i,j]使用乙個閾值。將低於閾值的所有值賦零值。但問題是如何選取閾值?

解決方法

雙閾值演算法。雙閾值演算法對非極大值抑制圖象作用兩個閾值τ1和τ2,且2τ1≈τ2,從而可以得到兩個閾值邊緣圖象n1[i,j]和n2[i,j]。由於n2[i,j]使用高閾值得到,因而含有很少的假邊緣,但有間斷(不閉合)。雙閾值法要在n2[i,j]中把邊緣連線成輪廓,當到達輪廓的端點時,該演算法就在n1[i,j]的8鄰點位置尋找可以連線到輪廓上的邊緣,這樣,演算法不斷地在n1[i,j]中收集邊緣,直到將n2[i,j]連線起來為止。

邊緣檢測 Sobel運算元

依賴opencv來做一些資料結構和顯示的工作,但主要的計算法部分是自己實現的。後面爭取依次給出常見的集中邊緣提取的演算法實現。下次補上原理推到說明。sobel.cpp 定義控制台應用程式的入口點。include stdafx.h include cv.h include highgui.h incl...

邊緣檢測運算元

看了很多邊緣檢測的文章,有些不夠詳細,有些不算綜合,所以打算總結一下!以下內容均為個人理解,如有問題,望指正!首先,我想要解釋一下什麼是邊緣。通俗地講,灰度值變化劇烈的地方就是邊緣。那麼如何判斷灰度值變化?如何度量 劇烈 各類演算法給出了自己的規範或者說是原則。所以,各類運算元就跳出來了。由於各類運...

Laplacian iOS 運算元 邊緣檢測

基本概念 laplacian運算元是n維歐幾里德空間的乙個二階微分運算元,定義為梯度grad的散度div,因此如果f是二階可微的函式,則其定義為 計算拉普拉斯變換 laplacian void laplacian inputarray src,輸入影象,及源影象,mat類即可,且須為單通道8位影象 ...