目錄算法
一、介紹函數
二、通常步驟spa
三、canny算子3d
四、sobel算子對象
五、拉普拉斯算子blog
六、scharr濾波器ci
邊緣檢測也是一種濾波,不一樣的算子有不一樣的提取效果。比較經常使用的算子是canny、soble、Laplacianio
一、濾波圖像處理
邊緣檢測的算法主要是基於圖像強度的一階和二階導數,導數對噪聲很敏感,所以必須採用濾波器來改善。opencv
主要有高斯濾波,採用離散化的高斯函數產生一組歸一化的高斯核,而後基於高斯核函數對圖像灰度矩陣的每個點進行加權求和。
二、加強
加強邊緣的基礎是肯定圖像各點鄰域強度的變化值。
加強算法能夠將圖像灰度點鄰域強度值有顯著變化的點凸顯出來,經過計算梯度幅值來肯定。
三、檢測
通過加強的圖像,每每鄰域中有不少點的梯度值比較大,在特定的應用中,這些點不是咱們要找的邊緣點,因此採用某種方法對這些點進行取捨,經常使用的方法是閾值化來檢測。
離散差分算子,結合了高斯平滑和微分求導(結果具備更多的抗噪性),計算圖像灰度函數的近似梯度,在圖像任何一點使用此算子,都將會產生對應的梯度矢量或法矢量。
對灰度漸變和噪聲較多(有平滑做用)的圖像處理效果較好,sobel算子對邊緣定位不是很準確,圖像的邊緣不止一個像素;當對精度要求不是很高時,是一種較爲經常使用的邊緣檢測方法。
水平變化:將圖像I與一個奇數大小的內核進行卷積(圖像中的卷積實際上是協相關操做,對應位置相乘求和),例如:
垂直變化:將I與一個奇數大小的內核進行卷積,例如:
或者這個公式:
梯度方向:
Canny邊緣檢測是從不一樣視覺對象中提取有用的結構信息並大大減小要處理的數據量的一種技術,目前已普遍應用於各類計算機視覺系統。
Canny發現,在不一樣視覺系統上對邊緣檢測的要求較爲相似,所以,能夠實現一種具備普遍應用意義的邊緣檢測技術。邊緣檢測的通常標準包括:
爲了知足這些要求,Canny使用了變分法。Canny檢測器中的最優函數使用四個指數項的和來描述,它能夠由高斯函數的一階導數來近似。在目前經常使用的邊緣檢測方法中,Canny邊緣檢測算法是具備嚴格定義的,能夠提供良好可靠檢測的方法之一。因爲它具備知足邊緣檢測的三個標準和實現過程簡單的優點,成爲邊緣檢測最流行的算法之一。
Canny方法不容易受噪聲干擾,可以檢測到真正的弱邊緣。優勢在於,使用兩種不一樣的閾值分別檢測強邊緣和弱邊緣,而且當弱邊緣和強邊緣相連時,纔將弱邊緣包含在輸出圖像中。
儘量減小噪聲對邊緣檢測結果的影響,因此必須濾除噪聲以防止由噪聲引發的錯誤檢測,使用高斯濾波器與圖像進行卷積。
其中i,j是像素點的橫縱座標;
高斯核大小爲(2k+1)x(2k+1);
σ:自行設定,通常1.5左右。
獲得權值矩陣後歸一化(sigma = 1.4,尺寸爲3x3的高斯卷積核的例子):
使用該權值矩陣(高斯核)對圖像作「卷積」(協相關,對應位置相乘最後求和獲得一點的像素值),獲得新的圖像矩陣。
運用一對卷積陣列(分別做用於x方向和y方向):
使用下面公式計算梯度幅值和方向:
梯度方向通常爲:0,45,90,135
一種邊緣稀疏技術,非極大值抑制的做用在於「瘦」邊。對圖像進行梯度計算後,僅僅基於梯度值提取的邊緣仍然很模糊。對於標準3,對邊緣有且應當只有一個準確的響應。而非極大值抑制則能夠幫助將局部最大值以外的全部梯度值抑制爲0,對梯度圖像中每一個像素進行非極大值抑制的算法是:
一般爲了更加精確的計算,在跨越梯度方向的兩個相鄰像素之間使用線性插值來獲得要比較的像素梯度,現舉例以下:
將梯度分爲8個方向,分別爲E、NE、N、NW、W、SW、S、SE,其中0表明00~45o,1表明450~90o,2表明-900~-45o,3表明-450~0o。像素點P的梯度方向爲θ,則像素點P1和P2的梯度線性插值爲:
NMS以後,剩餘的像素能夠更準確地表示圖像中的實際邊緣。然而,仍然存在因爲噪聲和顏色變化引發的一些邊緣像素。爲了解決這些雜散響應,必須用弱梯度值過濾邊緣像素,並保留具備高梯度值的邊緣像素,能夠經過選擇高低閾值來實現。
閾值的選擇取決於給定輸入圖像的內容。
是n維歐裏幾德空間中的一個二階微分算子,定義爲梯度grad的散度div。因爲使用了圖像梯度,內部代碼調用了sobel算子。根據圖像原理可知,二階導數能夠進行邊緣檢測,由於圖像是二維,須要在兩個方向上求導,使用laplacian算子會使求導過程變得很簡單。
定義
讓一幅圖減去它的laplacian算子能夠加強對比度。
其中:
所以卷積模板(協相關運算)是:
在opencv中主要是配合sobel算子的運算存在的。計算x或y方向的圖像查分,參數變量和sobel基本同樣。