【问题标题】:OpenCV find all significant edges along a lineOpenCV沿着一条线找到所有重要的边缘
【发布时间】:2012-08-21 05:03:44
【问题描述】:

我有一张图像,我曾经在 LabView 中使用称为 Rake 的方法进行分析。基本上,该方法的作用是找到图像上沿平行线的所有重要边缘。 http://zone.ni.com/reference/en-XX/help/370281P-01/imaqvision/imaq_rake_3/(如链接底部的最后一张图片所示)。 这个功能的美妙之处在于它会给你所有大于一定边缘强度的边缘点,并且每条边缘只会生成一个边缘点(边缘线的粗细为1像素)

我想使用 OpenCV 做类似的事情。我可以想象这样做的方式是 - 使用我选择的过滤器解构 Canny 运算符, - 具有两个阈值的边缘值的滞后阈值 - 其次是非极大值抑制 - 读取沿该线的像素并标记所有大于我的阈值的像素

问题是精明是捆绑的,我自己找不到非极大值抑制函数。 有没有人知道一种类似于我描述的操作的方法?

谢谢

【问题讨论】:

    标签: image opencv labview edge-detection


    【解决方案1】:

    不确定我是否完全理解这个问题,但关于未捆绑的非最大抑制部分:

    二维非极大值抑制的一种简单方法是: 放大图像。 OpenCV 中的 Dilation 将每个像素的值设置为局部邻域的 max()。重复几次或使用更大的内核来获得所需的半径。

    然后将扩张后的图像与原始图像进行比较,并将具有不同值的所有像素设置为零。

    剩余的像素是局部最大值。

     # some code I once used in OpenCV/Python
     # given an image, sets all pixels to zero, unless they are local maxima
     def supressNonMaxima(img):
         localMax = cvCreateImage (cvGetSize(img), IPL_DEPTH_16U, 1)
         cvDilate(img, localMax, null, 3)  # max() with radius of 3
    
         mask = cvCreateImage( cvGetSize(img), 8, 1)
         cvCmp(img, localMax, mask, CV_CMP_LT)
    
         cvSet(img,0,mask)
    

    【讨论】:

      猜你喜欢
      • 2021-09-16
      • 1970-01-01
      • 2019-05-19
      • 2021-05-21
      • 2020-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多