OpenCV投影点与Unity相机视图之间不匹配

时间:2019-12-17 13:28:46

标签: opencv unity3d computer-vision pose-estimation opencv-solvepnp

我们正在开发一个AR应用程序,其中我们需要在一个对象的视频流上覆盖一个对象的3D模型。 Unity场景包含3D模型,并且照相机正在拍摄3D对象。相机的姿势最初未知。

我们尝试过的事情

我们没有找到直接在Unity中估算相机姿势的好方法。因此,我们使用了OpenCV,它提供了广泛的计算机视觉功能库。特别是,我们找到Aruco tags,然后将其匹配的3D-2D坐标传递到solvePnp

solvePnp返回的相机位置与实际情况相符,可达几厘米。我们还验证了低重投影误差。

Reprojection of Aruco tags

每个用过的标签角都会重新投影,并在图像上显示为红色点。如您所见,差异很小。

这些结果看起来不错,并且对于我们的用例来说应该足够了。 因此,我们根据真实性和OpenCV验证相机的姿势。

问题

但是,当将摄像机放置在Unity场景中的估计姿势时,3D对象的排列不太好。

Unity view of the markers and the video stream

在此Unity屏幕快照上,您可以看到虚拟(Unity对象)绿色标签的视图与视频供稿中的真实绿色标签不匹配。

可能的根本原因

我们确定了不同的可能根本原因,可以解释Unity和OpenCV之间的不匹配:

  • 相机固有参数的差异:我们尝试了不同的参数集,没有一个绝对成功。我们首先使用OpenCV校准了相机,然后尝试backport the parameters到Unity。我们还查看了制造商的数据,但没有提供更好的结果。最后,我们手动测量了视场(FoV),并将其与已知的相机传感器尺寸组合在一起。这些测试之间的结果相差无几。
  • Unity与OpenCV在相机模型上的差异:OpenCV与pinhole camera model一起使用,但是我无法找到关于Unity模拟模型的最终答案。

注释

我们的相机视野开阔(115°)。

传递给OpenCV和Unity的图像都已经很好地失真了。

我们经历了标记为OpenCV和Unity的大多数SO问题。 Most were与不同的坐标系和旋转约定有关。在我们的情况下,这似乎不是问题,因为相机显示在3D Unity场景中的预期位置。

问题

  1. Unity和OpenCV使用的相机型号是否有根本区别?
  2. 您是否看到任何其他可能的原因可以解释Unity和OpenCV之间的投影差异?
  3. 您知道在没有OpenCV的情况下估计相机姿态的任何可靠方法吗?

0 个答案:

没有答案