0
使用edge
函數可以在Matlab中執行各種邊緣檢測器濾波器。但是這個函數在輸出上應用一個閾值。是否可以禁用這種閾值?如果沒有,是否還有其他方法可以在沒有閾值的情況下計算濾波器的原始值(canny和sobel)?Matlab中邊緣檢測器的非閾值編碼值
使用edge
函數可以在Matlab中執行各種邊緣檢測器濾波器。但是這個函數在輸出上應用一個閾值。是否可以禁用這種閾值?如果沒有,是否還有其他方法可以在沒有閾值的情況下計算濾波器的原始值(canny和sobel)?Matlab中邊緣檢測器的非閾值編碼值
對於你非常明確的問題的答案是肯定的。因爲所有的邊緣函數都在某些強度梯度上應用閾值,所以不應該看邊緣函數本身,而應該在底層梯度上。爲此,您可以應用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.)分別遞歸地跟隨閾值邊緣(滯後)。因此,這些後處理步驟與全局灰度矩陣不再一致。
謝謝。你是否也知道如何以類似的方式應用Canny Edge Detection? – Hamed