使用线而不是点的 OpenCV 相机校准(计算 [R|T])

OpenCV camera calibration(compute [R|T]) with lines instead of points

我正在与 this tutorial 一起开发足球机器人。 我的机器有2个摄像头,而地面地图在球门前有6个点可以识别。

我在做什么:

  1. 拍照并获取内在参数(焦距、畸变);
  2. 移动时,找到点并使用 solvePnP 得到 [R|T];
  3. 使用projectPoints得到它的真实坐标。

正如我所尝试的那样,(在一个 6*9 内角的棋盘中)10 分很好,但只有 5 分我得到了非常糟糕的结果(甚至没有考虑视力不好或球时挡住了它的视线)。

我正在考虑预设一个好的 [R|T](具有完整地图的良好视野),并在移动时利用其旧的 [R|T](作为初始近似值)来帮助获得更好的 [R|T]。但一段时间后,由于 [R|T] 变得不太准确,我不太可能得到大约。价值。

另一种解决方案是尝试使用线条生成 [R|T]。例如,在检测到一条线上的一组点后,将其与 x=0 或 y=0... 相关联,并使用它们来计算 [R|T],这可能会产生更好的结果。有没有办法做到这一点?

还是我理解错了?任何想法或帮助表示赞赏!

我想投稿,但我对设置有一些疑问:

(i.) 我假设相机固定在机器人上。然后,[R|t] 相对于字段(参考)发生变化。您是否在现场跟踪上述点(特征)?在这种情况下,当机器人在场地周围移动时,它们的旋转和平移会发生变化。

(ii.) 你检查过 Hartley's paper 线对应校准了吗?这可能会让您对第二个提案有所了解。

现在,假设我在 i. 项上进行了假设,尝试对每个相机独立进行相机校准,以首先获得镜头和切向畸变参数。这些你希望在从运动中重新校准时修复它们。使用线似乎更可行,因为它们可能对遮挡具有鲁棒性。

如果您提供更多详细信息并丰富此讨论,我可以编辑此答案。

我会把它作为评论,但我没有足够的信誉。