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