对2D坐标进行排序

时间:2011-04-05 09:58:26

标签: opencv computer-vision

我遇到了在同一校准工件的多个视图中找到相应点的问题。 您可以在下面看到校准目标的示例图像。

enter image description here enter image description here

我需要对所有圆形标记的2D坐标进行排序,并确保所有视图中相应的(相同)标记在标记的矢量中具有相同的索引。 任何人都可以告诉我如何处理这样的事情? 非常感谢。

2 个答案:

答案 0 :(得分:2)

我不确定我完全明白你想要什么,但我可以帮忙。

你的神器很好,因为它是一个平面,所以你可以用单应素从一张图像转到另一张图像。获得homography后,您的问题或多或少就会完成。

我曾经编写了一个程序来做到这一点:

  • 加载图片(cv::imread()
  • 计算SURF功能(cv::surf()
  • 将功能匹配在一起(使用功能之间的最小平方)
  • 将openCV的findHomography()CV_RANSAC
  • 一起使用

基本上,你最终会得到类似的东西:http://blogs.oregonstate.edu/hess/files/2010/10/sift_demo_screenshot1.jpg

我认为这就是你想要的:你有一个与你的两个图像之间的标记匹配的转换。 (这个变换,一个单应性,比我给出的链接中的一串线要小得多。它是一个小矩阵,“吞下”image1中标记的坐标,并“返回”相应标记的坐标在image2)(使用SIFT而不是SURF,但它们几乎完全相同)

答案 1 :(得分:1)

您仍然可以使用类似的方法。

与Fezvez结合特征检测(图像中的点很有趣)和特征描述(该点的独特之处)的方法不同,您自己的代码已经提供了检测部分(圆心的位置)。

现在你需要生成一组假定的匹配(猜测集合对应于哪个集合)。您可以使用每个圆圈位置的特征描述符(可能有一个大窗口)来完成此操作。有关在特定位置提取描述符的示例,请参阅此vl_sift section on custom frames。请注意,您可能需要重新规范化图像以解决本地仿射变形问题。使用SIFT的距离比测试或其他系统可能的其他距离度量。

一旦你有匹配,你可以将它输入一个强大的单应性解算器,如OpenCV的findHomography来拒绝异常值(由于噪音/其他问题而不可避免地出现的无效匹配)。

或者,您可以手动建立矩形等角点的对应关系,并将其输入到单应性求解器中。

所有平面(如校准目标)的透视投影可通过单应性相关联。您可以从转换中退出您在标记标识方面要做的任何事情。