2015-08-27 74 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