8

我有一个目标图像要搜索沿其边缘的曲线以及包含该曲线的模板图像。我需要实现的是在目标图像中找到模板图像中曲线的最佳匹配,并根据得分找出是否匹配。这还包括曲线的旋转和大小调整。目标图像可以是Canny边缘检测器的输出,如果这样做更容易。将曲线图案与图像的边缘匹配

我正在考虑使用OpenCV(通过使用Python或Processing/Java,或者如果那些对所需功能的访问受限,那么通过使用C)使事情变得切实有效,但无法找到我是否可以使用任何在OpenCV中可用于完成这项工作的函数(或它们的组合)。我一直在阅读OpenCV文档,并开始思考Contours可以完成这项工作,但所有示例都显示封闭的形状,而不是我的情况,我需要将开放曲线与边缘的一部分进行匹配。

那么有没有办法通过使用OpenCV或任何已知的代码或算法,你会建议做到这一点?

这里有一些图片来说明这个问题:

Template image containing the curve to be searched for

Input image to be searched for the template curve and to be matched to its edges; this can also be an edge-image, the output of a Canny Edge detector rather than the unprocessed input image

Resulting match - includes rotation and resizing

回答

2

我首先想到的是Generalized Hough Transform。但是我不知道有什么好的实现。

我会先在Canny边缘图像上尝试SIFT或SURF。它通常用于查找二维区域,而不是一维轮廓,但是如果在轮廓周围采用最小边界框并将其用作搜索图案,则应该起作用。

OpenCV的有一个实现: Features2D + Homography to find a known object

的问题可能会得到良好的边缘图像,在后面的那些黑色的形状可能会分散注意力。

也看到这个答案#1: Image Processing: Algorithm Improvement for 'Coca-Cola Can' Recognition

+0

谢谢,我会尝试这些,回来在这里给我的结果或结果信息。 – ali 2012-08-03 13:59:44

+1

阿里,运气好吗? 另请参阅此问题,其中引用您的: http://stackoverflow.com/questions/14530790/image-processing-match-curves-from-one-image-to-another – Rethunk 2013-01-26 18:42:22

+0

谢谢Rehunk,还没有看到你的直到现在评论;很长一段时间......我没有真正的解决办法,但是那时做的工作越来越少了。慢速和无旋转:我使用简单的相关匹配,将模板调整为不同的大小,但不是直接使用图像上的曲线,而是使用颜色编码的边缘图像,其中每个边缘点的斜率都有对应的颜色基于每个点上曲线的斜率对模板曲线进行颜色编码。然后我通过相关性比较这些颜色,结果对于有限/实用的解决方案是可以的。 – ali 2014-07-15 16:28:07