Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opencv 二维坐标排序_Opencv_Computer Vision - Fatal编程技术网

Opencv 二维坐标排序

Opencv 二维坐标排序,opencv,computer-vision,Opencv,Computer Vision,在同一校准工件的多个视图中查找对应点时,我遇到了一个问题。 下面可以看到校准目标的示例图像 我需要对所有圆形标记的二维坐标进行排序,并确保所有视图中的对应(相同)标记在标记向量中具有相同的索引。 有谁能给我一个处理这种事情的线索吗? 非常感谢。我不确定我是否完全理解你想要什么,但我可以帮你 你的人工制品很好,因为它是一个平面,所以你可以用单应性从一个图像转到另一个图像。一旦你有了答案,你的问题就差不多完成了 我曾经写过这样一个程序: 加载图像(cv::imread()) 计算冲浪功能(cv

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

我需要对所有圆形标记的二维坐标进行排序,并确保所有视图中的对应(相同)标记在标记向量中具有相同的索引。 有谁能给我一个处理这种事情的线索吗?
非常感谢。

我不确定我是否完全理解你想要什么,但我可以帮你

你的人工制品很好,因为它是一个平面,所以你可以用单应性从一个图像转到另一个图像。一旦你有了答案,你的问题就差不多完成了

我曾经写过这样一个程序:

  • 加载图像(
    cv::imread()
  • 计算冲浪功能(
    cv::SURF()
  • 将特征匹配在一起(在特征之间使用最小二乘法)
  • 将openCV的
    findHomography()
    CV\u RANSAC
基本上,你会得到这样的结果:


我想这就是你想要的:你已经得到了一个变换,在你的两个图像之间匹配你的标记。(这是一种单应变换,比我给出的链接中的一堆线要简单得多。这是一个小矩阵,它“吞咽”了图1中标记的坐标,并“返回”了图2中相应标记的坐标)(使用SIFT而不是SURF,但它们几乎相同)您仍然可以使用类似的方法

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

现在您需要生成一组假定的匹配(猜测哪个集合对应哪个集合)。您可以在每个圆位置(可能有一个大窗口)使用特征描述符来实现这一点。有关在特定位置提取描述符的示例,请参见此。注意,您可能需要重新规范化图像以考虑局部仿射扭曲。对SIFT使用距离比测试,或可能对其他系统使用其他距离度量

一旦有了匹配项,就可以将其输入到一个健壮的单应解算器(如OpenCV的findHomography)中,以拒绝异常值(由于噪声/其他问题而不可避免地出现的无效匹配)

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


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

我认为我的问题有点不同。我已经得到了计算圆形标记的2D像素坐标并返回point2D向量(标记位置)的程序。我需要的是对标记进行排序,并确保(例如)第一张图像索引I=5中的标记与所有其他图像中的标记I=5相同。太棒了!如果我理解正确,对于每个图像,您可以得到一个
向量
,每个向量表示图像I中标记的二维坐标。现在,对于每个图像,你都有一个
向量
,你想知道在索引i处,它是否总是相同的标记?我将为两幅图像提供一种方法:直接对两个向量应用
cv::findHomography()
。现在您得到了一个
H
矩阵。对于第一个图像的每个点2d(我们称之为
vec1[i]
),必须具有
常量*vec2[i]~=H.vec1[i]
。(请记住在每个
vec[i]
的末尾添加1)这些是管道的开口?不。此目标仅用于图像处理目的。