邊緣檢測matlab算法匯總
邊緣檢測matlab算法匯總
1. 基於一階微分算子檢測邊緣圖像
一階微分邊緣算子又稱梯度邊緣算子,它是利用圖像在邊緣處的階躍性,及圖像梯度在邊緣去得極大值得特征性進行邊緣檢測。
Sobel算子:image =edge(in_image,’sobel’,threshold,direction);
Prewitt算子: image = edge(in_image,’prewitt’,threshold,direction);
Roberts算子: image = edge(in_image,’sobel’,threshold);
其中,in_image 是灰度圖像,threshold是閾值,direction是方向。
優點:實現簡單、運算速度快
缺點:易受噪音影響,主要原因其一是實際邊緣灰度與理想邊緣灰度存在差異,有可能檢測出多個邊緣;其二是算子尺度固定不利於檢測出不同尺度的邊緣。
Canny算子:image = edge(in_image,’canny’,threshold);
其中,in_image 是灰度圖像,threshold是閾值。
canny算子主要在原一階微分算子基礎上進行了擴展,增加了非最大值抑制和雙閾值兩項改進。利用非最大值抑制不僅可以有效地抑制多響應邊緣,而且還可以提高邊緣的定位精度。利用雙閾值可以有效減少邊緣的漏檢率。主要分為4步進行:高斯平滑去噪、計算梯度與方向角、非最大值抑制、滯後閾值化。
2. 基於二階微分算子檢測邊緣圖像
二階微分邊緣檢測算子是利用圖像在邊緣處的階躍性導致圖像二階微分在邊緣處出現零值這一特性進行邊緣檢測的,因此該算法又稱零點算子和拉普拉斯算子。
高斯拉普拉斯方法(laplacian of Gaussian, LoG):image = edge(in_image,’log’,threshold);
其中,in_image 是灰度圖像,threshold是閾值。
Log算子檢測邊緣的結果要由於roberts和sobel算子,檢測出來的邊緣比較完整,且抗噪能力較好。
3. 基於SUSAN特征檢測算子的邊緣提取
SUSAN(Smallest Univalue Segment AssimilatingNucleus),又稱最小核值相似區。它使用一個原型模板和一個圓的中心點,通過圓心點像元值與模板圓內其他像元值的比較,統計出圓中心點像元值近似的像元數量,並與所設定的閾值進行比較,以確定是否是邊緣。
- function image_out = susan(im,threshold)
- % 功能:實現運用SUNSAN算子進行邊緣檢測
- % 輸入:image_in-輸入的待檢測的圖像
- % threshold-閾值
- % 輸出:image_out-檢測邊緣出的二值圖像
- % 將輸入的圖像矩陣轉換成double型
- d = length(size(im));
- if d==3
- image=double(rgb2gray(im));
- elseif d==2
- image=double(im);
- end
- % 建立SUSAN模板
- mask = ([ 0 0 1 1 1 0 0 ;0 1 1 1 1 1 0;1 1 1 1 1 1 1;1 1 1 1 1 1 1;1 1 1 1 1 1 1;0 1 1 1 1 1 0;0 0 1 1 1 0 0]);
- R=zeros(size(image));
- % 定義USAN 區域
- nmax = 3*37/4;
- [a b]=size(image);
- new=zeros(a+7,b+7);
- [c d]=size(new);
- new(4:c-4,4:d-4)=image;
- for i=4:c-4
- for j=4:d-4
- current_image = new(i-3:i+3,j-3:j+3);
- current_masked_image = mask.*current_image;
- % 調用susan_threshold函數進行閾值比較處理
- current_thresholded = susan_threshold(current_masked_image,threshold);
- g=sum(current_thresholded(:));
- if nmax<g
- R(i,j) = g-nmax;
- else
- R(i,j) = 0;
- end
- end
- end
- image_out=R(4:c-4,4:d-4);
- susan_threshold函數
- function thresholded = susan_threshold(image,threshold)
- % 功能:設定SUSAN算法的閾值
- [a b]=size(image);
- intensity_center = image((a+1)/2,(b+1)/2);
- temp1 = (image-intensity_center)/threshold;
- temp2 = temp1.^6;
- thresholded = exp(-1*temp2);
優點:抗噪能力好、計算量小速度快、可以檢測邊緣的方向信息。
來源: http://blog.csdn.net/sunyun04826937/article/details/48932493
來自為知筆記(Wiz)
邊緣檢測matlab算法匯總