如何找到增强现实的相机矩阵?

Sum*_*dal 7 3d opencv augmented-reality pose-estimation

我想在x,y,z米相机上增加一个虚拟对象.OpenCV有摄像机校准功能,但我不明白我究竟能以米为单位给出坐标

我尝试在Unity中模拟相机,但没有得到预期的结果.

我按如下方式设置投影矩阵,并在z = 2.415 + 0.5处创建单位立方体.2.415是眼睛和投影平面之间的距离(针孔摄像机模型)由于立方体的面位于前剪裁平面,它的尺寸是单位,它不应覆盖整个视口吗?

    Matrix4x4 m = new Matrix4x4();
    m[0, 0] = 1;
    m[0, 1] = 0;
    m[0, 2] = 0;
    m[0, 3] = 0;

    m[1, 0] = 0;
    m[1, 1] = 1;
    m[1, 2] = 0;
    m[1, 3] = 0;

m[2, 0] = 0;
    m[2, 1] = 0;
    m[2, 2] = -0.01f;
    m[2, 3] = 0;

    m[3, 0] = 0;
    m[3, 1] = 0;
    m[3, 2] = -2.415f;
    m[3, 3] = 0;
Run Code Online (Sandbox Code Playgroud)

Fra*_*ari 5

校准的全局范围(即3D空间坐标的测量单位)由您使用的校准对象的几何形状决定.例如,当您使用平板棋盘图像在OpenCV中进行校准时,校准过程的输入是3D点P的对应对(P,p)及其图像p,3D的(X,Y,Z)坐标根据您使用的目标尺寸(以及对其进行成像的光学元件)的要求,点以毫米,厘米,英寸,英里等表示,并且图像的2D坐标以像素为单位.校准例程的输出是一组参数(投影矩阵P的分量和非线性失真参数k),其将以这些度量单位表示的3D坐标"转换"为像素.

如果你不知道(或者不想使用)校准目标的实际尺寸,你可以捏造它们但保持它们的比例不变(例如,即使真正的长度,正方形仍然是正方形它的一面可能是未知的).在这种情况下,您的校准将确定为未知的全球范围.这实际上是常见的情况:在大多数虚拟现实应用程序中,只要结果在图像中看起来正确,您就不关心全局比例.

例如,如果你想在安吉丽娜朱莉的视频中添加一对更加蓬松的3D嘴唇,并将它们与原始视频合成,这样全新的假嘴唇保持贴合并且在她的脸上看起来"自然",你只需要重新缩放假嘴唇的3D模型,使其正确地重叠嘴唇的图像.无论模型是距离CG渲染复合材料1码还是1英里,都完全无关紧要.


Mar*_*mos 5

要查找增强对象,您需要找到相机姿势和方向.这与寻找相机外在因素相同.您还必须首先计算相机内在函数(称为calibraiton).

OpenCV允许你完成所有这些,但不是微不足道的,它需要你自己的工作.我给你一个线索,你首先需要识别场景中你知道它看起来如何的东西,这样你就可以通过分析这个物体来计算相机的姿势,称之为标记.你可以从典型的基准点开始,它们很容易被发现.

看看这个帖子.


Sum*_*dal 4

我最终手动测量了视野。一旦了解了 FOV,您就可以轻松创建投影矩阵。无需担心单位,因为最终投影的形式为 ( X*d/Z, Y*d/Z )。无论 X、Y、Z 的单位是什么,X/Z 的比率保持不变。