gpt4 book ai didi

opencv - 相机框架相对于基准的世界坐标

转载 作者:行者123 更新时间:2023-12-02 17:48:52 30 4
gpt4 key购买 nike

我试图根据场景中找到的基准标记来确定相机在世界坐标中相对于基准位置的位置。

我确定viewMatrix的方法描述如下:
Determine camera pose?

我具有从受过训练的标记到场景图像的旋转和平移[R | t]。进行摄像机校准培训,从而获得摄像机固有的结果,我应该能够根据场景图像中找到的标记的 Angular 和方向来识别摄像机在世界坐标中的位置。

有人可以引导我进行与此类似的讨论或示例吗?我想根据基准标记了解相机的位置,并且我敢肯定之前已经做过类似的事情,只是我没有搜索正确的关键字。

感谢您的指导。

最佳答案

在世界坐标下你是什么意思?如果要表示对象坐标,则应使用solvepnp结果的逆变换。
给定一个 View 矩阵[R|t],我们得到了inv([R|t]) = [R'|-R'*t],其中R'R的转置。在OpenCV中:

cv::Mat rvec, tvec;
cv::solvePnP(objectPoints, imagePoints, intrinsics, distortion, rvec, tvec);

cv::Mat R;
cv::Rodrigues(rvec, rotation);

R = R.t(); // inverse rotation
tvec = -R * tvec; // translation of inverse

// camPose is a 4x4 matrix with the pose of the camera in the object frame
cv::Mat camPose = cv::Mat::eye(4, 4, R.type());
R.copyTo(camPose.rowRange(0, 3).colRange(0, 3)); // copies R into camPose
tvec.copyTo(camPose.rowRange(0, 3).colRange(3, 4)); // copies tvec into camPose

更新#1:

solvePnP的结果
solvePnP在给定一组对象点(模型坐标),其对应的图像投影(图像坐标)以及相机矩阵和失真系数的情况下估计对象姿态。

对象姿态由两个 vector rvectvec给出。 rvec是图像上看到的图案 View 的旋转矩阵的紧凑表示。即, rvec与相应的 tvec一起将基准图案从模型坐标空间(在其中指定了对象点)带到了相机坐标空间。

也就是说,我们处于摄影机坐标空间中,它随摄影机一起移动,并且摄影机始终位于原点。相机轴与图像轴的方向相同,因此
  • x轴指向相机
  • 的右侧
  • y轴指向下方,
  • 和z轴指向相机 View
  • 的方向

    这同样适用于模型坐标空间,因此,如果您在基准图案的右上角指定了原点,则
  • x轴指向右侧(例如,沿着图案的较长边),
  • y轴指向另一侧(例如,沿着较短的一侧)
  • 和z轴指向地面。

  • 您可以将世界原点指定为对象点的第一个点,即第一个对象设置为 (0, 0, 0),所有其他点都具有 z=0(在平面图案的情况下)。然后 tvec(组合的 rvec)指向您放置基准图案的世界坐标空间的原点。 solvePnP的输出与对象点具有相同的单位。

    看一下以下内容: 6dof positional tracking。我认为这与您需要的非常相似。

    关于opencv - 相机框架相对于基准的世界坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28402446/

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