【问题标题】:Adaptive Canny Edge Detection Algorithm自适应 Canny 边缘检测算法
【发布时间】:2018-06-29 13:37:32
【问题描述】:

我正在尝试使用 python 从头开始​​实现 Canny 算法。

我正在按照步骤进行

  1. 对图像进行双边过滤

  2. 使用面向 4 个不同方向的高斯一阶导数进行梯度计算

def deroGauss(w=5,s=1,angle=0):

    wlim = (w-1)/2
    y,x = np.meshgrid(np.arange(-wlim,wlim+1),np.arange(-wlim,wlim+1))
    G = np.exp(-np.sum((np.square(x),np.square(y)),axis=0)/(2*np.float64(s)**2))
    G = G/np.sum(G)
    dGdx = -np.multiply(x,G)/np.float64(s)**2
    dGdy = -np.multiply(y,G)/np.float64(s)**2

    angle = angle*math.pi/180 #converting to radians

    dog = math.cos(angle)*dGdx + math.sin(angle)*dGdy

    return dog
  1. 所有 4 个梯度图像中的非最大抑制

def nonmaxsup(I,gradang):

    dim = I.shape
    Inms = np.zeros(dim)
    weak = np.zeros(dim)    
    strong = np.zeros(dim)
    final = np.zeros(dim)
    xshift = int(np.round(math.cos(gradang*np.pi/180)))
    yshift = int(np.round(math.sin(gradang*np.pi/180)))
    Ipad = np.pad(I,(1,),'constant',constant_values = (0,0))
    for r in xrange(1,dim[0]+1):
        for c in xrange(1,dim[1]+1):
            maggrad = [Ipad[r-xshift,c-yshift],Ipad[r,c],Ipad[r+xshift,c+yshift]]
            if Ipad[r,c] == np.max(maggrad):
                Inms[r-1,c-1] = Ipad[r,c]
    return Inms
  1. 双阈值和滞后:现在真正的问题来了。

我正在使用 Otsu 的方法来计算阈值。

我应该使用灰度图像还是梯度图像来计算阈值?

因为在梯度图像中,像素强度值在双边滤波后被降低到非常低的值,然后在与高斯导数卷积后进一步降低。例如 :: 28, 15

使用灰度计算的阈值远高于使用梯度图像计算的阈值。

此外,如果我使用灰度甚至梯度图像来计算阈值,则结果图像不够好并且不包含所有边缘。

所以实际上,我没有什么可以应用滞后了。

我试过了

img_edge = img_edge*255/np.max(img_edge)

按比例放大值但结果保持不变

但如果我使用与cv2.Canny 相同的阈值,结果非常好。

实际上可能有什么问题?

【问题讨论】:

    标签: python image-processing computer-vision edge-detection


    【解决方案1】:

    从原始图像应用 Otsu 阈值没有意义,它与梯度强度完全无关。

    梯度强度的 Otsu 并不完美,因为噪声和边缘的统计分布偏斜且重叠很多。

    您可以尝试 Otsu 的小倍数或平均值的小倍数。但在任何情况下,您都不会通过简单或滞后阈值获得完美的结果。边缘检测是一个不适定问题。

    【讨论】:

    • 但是cv2.Canny 函数需要两个输入,即根据灰度图像计算的下阈值和上限阈值。它如何提供如此好的输出?
    • 但是必须有某种方法可以从梯度图像的低像素值中获得正确的阈值。在我的情况下,即使我将 otsu 的方法应用于渐变图像,它也会返回一个不适合该目的的阈值,但如果我将其除以 3 或 4,然后将其设置为上限阈值,效果会更好。
    • @Siladittya:就像我说的那样。
    • 但问题是,虽然我得到了边缘,但它们并没有像cv2.Canny 那样变薄。有像东西一样的小边缘在与边缘正交的方向上延伸出来。边缘并不完全完美。非最大抑制的后处理步骤无济于事。此外,在这种情况下,滞后是没有用的。滞后前后的图像是一样的。
    猜你喜欢
    • 1970-01-01
    • 2014-03-30
    • 1970-01-01
    • 2013-10-20
    • 1970-01-01
    • 2018-10-04
    • 2012-09-22
    • 2017-04-22
    • 1970-01-01
    相关资源
    最近更新 更多