我有一个用于在LabView中使用名为Rake的方法进行分析的图像。基本上,该方法的作用是找到图像上沿平行线的所有重要边缘。 http://zone.ni.com/reference/en-XX/help/370281P-01/imaqvision/imaq_rake_3/(如链接底部的最后一张图片所示)。 这个函数的优点在于它将为您提供大于某个边缘强度的所有边缘点,并且每个边缘将仅生成一个边缘点(边缘线的粗细为1个像素)
我想用OpenCV做类似的事情。我这样想的方式是 - 使用我选择的过滤器解构Canny运算符, - 具有两个阈值的边缘值的滞后阈值 - 然后是非最大限度抑制 - 读取该行的像素并标记所有大于我的阈值的像素
问题是canny是一个捆绑,我无法自己找到nonmaxima抑制函数。 有没有人知道一种类似于我所描述的操作的方法?
由于
答案 0 :(得分:0)
不确定我是否完全理解这个问题,但关于非捆绑的非最大抑制部分:
2d非最大抑制的一种简单方法是: 扩大图像。 OpenCV中的扩张将每个像素的值设置为本地邻域的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)