高级上下文:
在 Unity3D AR 项目中,系统使用机器学习提供图像中的一组 2D 像素坐标与世界坐标中的同一组 3D 点之间的对应关系。根据这两组之间的对应关系,我想估计导致该图像的相机姿势。
要实现的低级目标:
我的研究结果建议我使用 PnP-Ransac 算法。Perspective-n-Points 是我遇到的这个问题的名称:从匹配的 2D-3D 点中找到相机姿势。PnP 问题定义:https ://en.wikipedia.org/wiki/Perspective-n-Point
我试过的
1)我试图在 ARKit 中找到一个 PnP 求解器,但我找不到它,所以我猜它没有暴露。2) 我尝试使用商店中的 EmguCV 资产,这应该允许我在我的 Unity 项目中使用 openCV。OpenCV solvePnP 文档:https ://docs.opencv.org/3.3.0/d9/d0c/group__calib3d.html#ga50620f0e26e02caa2e9adc07b5fbf24e
问题:
ARKit 框架中是否有 PnP 求解器,如果没有,我如何在 Unity 项目中使用 EmguCV C# 包装器正确使用 openCV 的 PnP 求解器(要注意坐标系,正确的函数参数以提供像相机内在矩阵,如何解释输出以使相机姿势正确)?
我在尝试回答问题时遇到的问题:
使用 SolvePnPRansac 会导致 Unity-Editor 自身崩溃,即使我将它放在 try-catch 块中(可能我的输入参数有意外的格式)。仅使用solvePnP,我取得了更大的成功,但结果不是我所期望的。该文档指出,输出向量 rvec 和 tvec 对应于将对象从模型坐标系带到相机坐标系的平移和旋转。因此,如果我将相机置于 (0,0,0) 并观察 -z 方向,使对象位于 tvec 且具有欧拉旋转 rvec,我希望渲染的对象与我用于像素坐标对应的图像相似. 我误会了吗?
我的怀疑:openCV 的坐标系表明图像坐标 y 从上到下,而 z 和 x 保持向前向右。我尝试在 y 轴上反转 2D 和 3D 坐标,但它没有用
编辑 [我在这里删除了我的代码,因为自从我提出问题让它工作以来我改变了很多]
(许多中的一些)相关帖子 我看了其他 41 个带有标签 opencv-solvePnP 的 stackoverflow 问题,但没有一个与 Unity3D 或 c# 相关
没有答案
如何估计具有 3d 到 2d 点对应的相机姿势(使用 opencv)
区别:我需要在 unity3D c# 项目中进行
我明白了,我需要使用数学算法,这就是理论,但现在我如何使用我可以使用的库