【问题标题】:not-threshold-ed value of edge detectors in MatlabMatlab中边缘检测器的非阈值
【发布时间】:2015-08-29 05:15:04
【问题描述】:

可以在 Matlab 中使用edge 函数执行各种边缘检测过滤器。但是这个函数在输出上应用了一个阈值。是否可以禁用此类阈值?如果没有,是否有其他方法可以在不进行阈值处理的情况下计算过滤器(canny 和 sobel)的原始值?

【问题讨论】:

    标签: matlab edge-detection


    【解决方案1】:

    您非常明确的问题的答案是肯定的。因为所有边缘函数都在某些强度梯度上应用阈值,所以您不应查看边缘函数本身,而应查看底层梯度。为此,您可以应用 imfilter() 函数。所以,例如对于 Sobel 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 的大小。

    后者给人一种幽灵般的效果:

    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 从 Sobel 开始(如上),但随后应用非最大抑制和滞后。这些后面的步骤涉及选择/取消选择单个像素作为边缘(n.m.s.)的局部操作,分别递归地遵循阈值边缘(滞后)。因此,这些后处理步骤不再与灰度值的全局矩阵一致。

    【讨论】:

    • 谢谢。你也知道如何以类似的方式应用 Canny 边缘检测吗?
    猜你喜欢
    • 2012-12-31
    • 1970-01-01
    • 1970-01-01
    • 2012-04-16
    • 2012-09-17
    • 1970-01-01
    • 2012-09-22
    • 1970-01-01
    • 2016-01-08
    相关资源
    最近更新 更多