2015-08-27 121 views
0

使用edge函數可以在Matlab中執行各種邊緣檢測器濾波器。但是這個函數在輸出上應用一個閾值。是否可以禁用這種閾值?如果沒有,是否還有其他方法可以在沒有閾值的情況下計算濾波器的原始值(canny和sobel)?Matlab中邊緣檢測器的非閾值編碼值

回答

1

對於你非常明確的問題的答案是肯定的。因爲所有的邊緣函數都在某些強度梯度上應用閾值,所以不應該看邊緣函數本身,而應該在底層梯度上。爲此,您可以應用imfilter()函數。所以,例如對於索貝爾X方向,你會做到以下幾點:

I=imread('Img.jpg'); 
I=rgb2gray(I); 
sobX=[1 0 -1, 2 0 -2, 1 0 -1]; 
GradientX = imfilter(I,sobX); 
imshow(GradientX); 

你可以用SobelY做,只是用

sobY=[1 2 1, 0 0 0, -1 -2 -1]; 

當然,你可以通過採取聯合SobelX和SobelY的大小相同hypothenuse。

後者給出了幽靈效果:

I=imread('Img.jpg'); 
I=rgb2gray(I); 
sobX=[1 0 -1, 2 0 -2, 1 0 -1]; 
GradX = imfilter(I,sobX); 
sobY=[1 2 1, 0 0 0, -1 -2 -1]; 
GradY = imfilter(I,sobY); 
Magn=(double(GradX.^2 + GradY.^2)).^0.5; 
Magn=Magn*255/max(Magn(:)) 

UDDATE:Canny算子開始與索貝爾(如上),但隨後應用非最大抑制和滯後。後面這些步驟涉及選擇/取消選擇單個像素的局部操作,因爲邊緣(n.m.s.)分別遞歸地跟隨閾值邊緣(滯後)。因此,這些後處理步驟與全局灰度矩陣不再一致。

+0

謝謝。你是否也知道如何以類似的方式應用Canny Edge Detection? – Hamed