gpt4 book ai didi

python - OpenCV 使用不对应点的 solvePnPRansac 找到对象的位置

转载 作者:行者123 更新时间:2023-11-28 07:05:26 27 4
gpt4 key购买 nike

我试图通过跟踪物体上已知的 2D LED 图案来找到物体相对于现实世界坐标中的相机位置的位置。

我做了相机校准。我能够成功地检测到图案中的 LED,并在图像帧中找到它们的确切坐标。然而,这些点与图案中的已知坐标并不完全一一对应,它们是随机排列的。对应关系在 solvePnPRansac 等函数中很重要或 findHomography ,这将是我的首选。

我怎样才能找到这些点集之间的对应关系,或者我是否应该像 solvePnPRansac 那样使用其他函数来计算变换?

最佳答案

由于您没有询问估计物体和相机之间相对位姿的方法,我将把这个话题放在一边,重点讨论如何找到每个 LED 与其 2D 投影之间的对应关系。

为了获得唯一的一对一对应集,您使用的 LED 图案在旋转方面应该是明确的。例如,您可以使用常规的 NxN 网格,左上角的单元格包含一个额外的 LED,或者 LED 位于一个圆圈上,一个额外的 LED 在一个 LED 下方,等等。然后,找到对应关系的方法取决于模式你选择了。

对于圆形图案,您可以执行以下操作:

  1. 估计点的重心
  2. 找到唯一不在圆上的消歧点,并将其他点中最近的点定义为第一个观测点
  3. 通过增加相对于重心的角度对剩余的点进行排序(即顺时针顺序)

对于规则的网格图案,您可以尝试以下操作:

  1. 找到网格的四个角(具有最小/最大坐标的角)
  2. 估计将这四个角转换为规则 NxN 正方形(具有正交角)的角的单应性
  3. 使用这个单应性变换其他点
  4. 找到消歧点,这是唯一一个 X-floor(X)Y-floor(Y) 接近 0.5 的点,并定义四个初始角点中最接近的一个作为第一个观察点
  5. 通过增加相对于网格中心的角度并减小到网格中心的距离来对剩余的点进行排序

您还可以研究函数 findChessboardCorners(请参阅 calib3D 模块中的 calibinit.cpp)使用的算法,它使用类似的方法对检测到的角进行排序。

关于python - OpenCV 使用不对应点的 solvePnPRansac 找到对象的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21838230/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com