【问题标题】:Using OpenCV to Solve for Transform between non planar object Points and image points使用OpenCV求解非平面对象点和图像点之间的变换
【发布时间】:2019-05-03 05:19:14
【问题描述】:

转贴问题以增加清晰度

我正在使用 OpenCV 尝试校准激光扫描仪。

我有一组由扫描仪捕获的二维点。为了这个例子,让我们将这些点表示如下:

IMAGE POINTS
{(0.08017784, -0.08993121, 0)}
{(-0.1127666, -0.08712908, 0)}
{(-0.1117229, 0.1782855, 0)}
{(0.09053531, 0.198439, 0)}

我知道这些点对应于以下现实世界点:

OBJECT POINTS
{(0, 0, 0)}
{(190, 0, 0)}
{(190, 260, 0)}
{(0, 260, 122)}

我一直在使用 OpenCV 来求解一个旋转和平移矩阵,这将允许我给出一个世界点(例如 100、200、20)并取回捕获坐标系中的 2d 点。

到目前为止,我的结果表明,如果对象点是共面的,那么 OpenCV 几乎可以完美地找到旋转/平移结果。

但是,在我上面给出的示例中,并非所有点都位于同一平面上的问题中,我得到的答案非常错误。

我知道这是可能的(不一定使用 openCV),因为我有另一个可以做到这一点的商业软件。供参考,上述问题的解决方案是矩阵:

SOLUTION
[-0.99668, 0.03056, 0.07543]
[ 0.05860, 0.91263, 0.40454]
[-0.05647, 0.40762,-0.91140]
[79.34385, -89.63855,-982.25938]

我使用均方根误差来确定结果的有效性。我提供的解决方案的均方根误差是 1.61560。而OpenCV的结果超过1000。

问题:

使用给定的图像点和对象点如何使用 OpenCV(或其他方法)来获得解决方案。

我已经尝试过的:

我已经尝试过 OpenCV 中的基本 SolvePNP,如下所示:

Cv2.SolvePnP(objectPoints, imagePoints, camMatrix, dist, out double[] rvec, out double[] tvec, false, SolvePnPFlags.Iterative);

Documentation on SolvePNP Here

如上所述,如果我的对象点都是平面的,则此解决方案有效。但是对于其他平面上的点,解决方案会失效并且非常错误。

提前致谢!

【问题讨论】:

  • SolvePnP 适用于任何 3d 点,您确定图像点和对象点具有相同的坐标系统吗?并且你有正确的对应关系
  • @MartinBeckett 我敢肯定,是的。我在对象点是平面且没有问题的情况下使用完全相同的解决方案。一旦对象点不是平面的,就会出现问题。
  • SolvePnP 可以提供翻转的解决方案。检查旋转矩阵的行列式(),您可以使用它来正确翻转轴。
  • 你能再具体一点吗?取行列式后,我得到了双倍的价值。我应该在这个 double 值中寻找什么,我应该翻转什么以使解决方案正确
  • @MartinBeckett 所以我做了一些实验,我确实看到我的轮换矩阵上有一些不正确的迹象(但只是有时)。一个好的解决方案和一个坏的解决方案的决定因素都是 1(或接近 1,例如 0.99999997)

标签: opencv computer-vision augmented-reality opencvsharp


【解决方案1】:

(抱歉忘记跟进了)

计算旋转矩阵的determinant。对于“正确”的答案,它应该是 =1,对于翻转的答案应该是 -1。然后只需将旋转乘以 identity 矩阵,其中最后一项是行列式。如果 det() =1 则无任何作用,但如果 det() = -1 则将其翻转回正确答案

您可能会发现POSE ESTIMATION FOR PLANAR TARGET 上的代码/讨论很有用

【讨论】:

  • 我已经接受了这个答案。它解决了反向旋转的问题,但它并没有解决偶尔出现明显错误解决方案的问题。出于某种原因,当竞争软件收敛于 1 时,它偶尔会选择收敛于 ~10 的 rmse。
  • @Kikootwo 你找到解决方案了吗?
猜你喜欢
  • 1970-01-01
  • 2012-10-10
  • 2015-05-05
  • 2022-12-11
  • 1970-01-01
  • 2017-08-27
  • 2015-03-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多