【问题标题】:1D non-maximum suppression in Python/scipyPython/scipy 中的一维非最大抑制
【发布时间】:2011-08-29 13:57:51
【问题描述】:

你是否碰巧有一个用 Python 编写的一维非极大值抑制算法。我需要它来使用 scipy 在 Python 中制作 Canny 边缘检测器,该检测器将一维强度向量作为输入。

我在网上四处查看,有很多描述 Canny 边缘检测器行为的信息和一些用 Java 编写的示例,但它们都描述了 2D 中的边缘检测。

但是 scipy 确实支持 Canny 边缘检测所需的其他算法,即一维的高斯滤波和微分。

提前致谢。

【问题讨论】:

    标签: python scipy edge-detection


    【解决方案1】:

    您只是指最大过滤器吗?如果是这样,请查看scipy.ndimage.maximum_filter1d

    举个简单的例子:

    import numpy as np
    import scipy.ndimage as ndimage
    
    input = np.sin(np.linspace(0, 4*np.pi, 20))
    input = (input * 10).astype(np.int) # Makes it easier to read
    output = ndimage.maximum_filter1d(input, 4)
    
    print 'In: ', input
    print 'Out:', output
    

    这会产生:

    In:  [ 0  6  9  9  4 -1 -7 -9 -8 -3  3  8  9  7  1 -4 -9 -9 -6  0]
    Out: [ 6  9  9  9  9  9  4 -1 -3  3  8  9  9  9  9  7  1 -4  0  0]
    

    【讨论】:

      【解决方案2】:

      我假设您的数据不是周期性的。让我给你一个伪代码,希望这就足够了。

      -- 区分数据

      -- 您正在寻找差异中的符号变化。对于 Max 来说,这将从正面变为负面;零是一个特例。 numpy.sign() 为您提供 -1、0、1 中每个值的符号,分别表示负值、零值和正值。

      -- 你可以再次区分——你正在寻找 -2 和 -1 或最小抑制 2 和 1。正确处理边界。

      祝你好运

      import matplotlib.pyplot as plt
      import numpy as np
      
      dat= np.linspace(1, 5, 5)
      dat2 = np.concatenate([dat, dat[::-1]+.5, dat,dat[::-1]])
      ## ignore above.
      
      res = np.diff(np.sign(np.diff(dat2, prepend=[0])), append=0)
      plt.plot(dat2)  ## NB end conditions, and you can ignore plotting
      plt.plot(res)
      

      干杯,E

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-05-17
        • 2011-10-19
        • 2017-08-10
        • 2014-07-22
        • 1970-01-01
        • 1970-01-01
        • 2013-03-25
        • 1970-01-01
        相关资源
        最近更新 更多