gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 20:45:10 25 4
gpt4 key购买 nike

我想用相机在 x、y、z 米处增强虚拟对象。 OpenCV 具有相机校准功能,但我不明白如何以米为单位给出坐标

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

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

    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;

最佳答案

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

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

例如,如果您想在安吉丽娜·朱莉的视频中添加一对更加丰盈的 3D 嘴唇,并将其与原始视频合成,以便全新的假唇保持附着并在她的脸上看起来“自然”,您只需要重新缩放假唇的 3D 模型,使其与嘴唇的图像正确重叠。模型距离您渲染复合 Material 的 CG 摄像机是 1 码还是 1 英里完全无关紧要。

关于opencv - 如何找到增强现实的相机矩阵?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10977800/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com