相机姿态估计:如何解释旋转和平移矩阵?

2023-11-27

假设我在两个图像之间具有良好的对应关系,并尝试恢复它们之间的相机运动。 我可以使用 OpenCV 3 的新工具来实现此目的,如下所示:

 Mat E = findEssentialMat(imgpts1, imgpts2, focal, principalPoint, RANSAC, 0.999, 1, mask);

 int inliers = recoverPose(E, imgpts1, imgpts2, R, t, focal, principalPoint, mask);

 Mat mtxR, mtxQ;
 Mat Qx, Qy, Qz;
 Vec3d angles = RQDecomp3x3(R, mtxR, mtxQ, Qx, Qy, Qz);

 cout << "Translation: " << t.t() << endl;
 cout << "Euler angles [x y z] in degrees: " << angles.t() << endl;

现在,我很难理解什么R and t实际上的意思是。它们是否是将坐标从相机空间 1 映射到相机空间 2 所需的变换,如p_2 = R * p_1 + t?

考虑这个例子,带有真实的手动标记的对应关系

enter image description here

我得到的输出是这样的:

Translation: [-0.9661243151855488, -0.04921320381132761, 0.253341406362796]
Euler angles [x y z] in degrees: [9.780449804801876, 46.49315494782735, 15.66510133665445]

我尝试将其与我在图像中看到的内容相匹配并提出解释,即[-0.96,-0.04,0.25]告诉我,我已向右移动,因为坐标已沿负 x 轴移动,但它也会告诉我,我已移得更远,因为坐标已沿正 z 轴移动。

我还围绕 y 轴旋转了相机(向左旋转,我认为这将是围绕负 y 轴逆时针旋转,因为在 OpenCV 中,y 轴指向下方,不是吗?)

问题:我的解释正确吗?如果不正确,正确的解释是什么?


其实你的解释是正确的。

首先,关于 y 轴的方向,你是正确的。有关 OpenCV 相机坐标系的说明,请参见here.

您的代码会将 R 和 t 从第二个相机返回到第一个相机。这意味着如果 x1 是第一幅图像中的点并且 x2 是第二幅图像中的点,则以下等式成立x1 = R*x2 + t。 现在,在您的情况下,右侧图像(前视图)来自摄像机 1,左侧图像(侧视图)来自摄像机 2。

看看这个方程,我们发现首先应用了旋转。因此,您的相机当前拍摄的是左框。现在,您的 R 指定绕 y 轴旋转约 46 度。由于按角度 alpha 旋转点与将坐标轴反向旋转该角度相同,因此您的 R 告诉您向左旋转。正如您自己指出的,如果查看图片,这似乎是正确的。由于围绕其他轴的旋转很小并且难以成像,因此我们在这里忽略它们。 因此,在应用旋转后,您仍然站在拍摄左帧的相同位置,但您的相机或多或少指向汽车后部或汽车正后方的空间。

现在让我们看看平移向量。您关于向右移动并远离的解释也是正确的。让我尝试解释一下原因。想象一下,从您当前的位置开始,使用新的摄像机方向,您只能向右移动。您可能会直接撞到汽车,或者需要将相机放在发动机罩上方。因此,向右移动后,您还需要进一步移动才能到达拍摄正确照片的位置。

我希望这个解释能帮助您想象 R 和 t 所描述的运动。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

相机姿态估计:如何解释旋转和平移矩阵? 的相关文章

随机推荐

  • 在头文件与实现文件目标 c 中定义属性

    在基于页面的应用程序模板中 我在实现 m 文件中经常看到这种情况 interface ModelController property readonly strong nonatomic NSArray pageData end 为什么不在
  • 需要使用虚拟化和按需加载的 WPF TreeView 搜索示例

    我需要在WPF中实现搜索功能TreeView 基本上我需要记住最后的用户选择 我尝试过建议的各种方法 但没有任何效果virtualization已在我的中启用TreeView并且子节点仅在父节点展开时才加载 延迟加载 有人知道有一个示例同时
  • 将计算机加入工作组

    如何查询特定工作组中所有可访问的计算机 您可以使用活动目录 API 检查目录项类 不要忘记添加对System DirectoryServices dll 这是一个简短的例子 using DirectoryEntry workgroup ne
  • 通过管道发送多个文件

    我们正在使用express 4 现在我有这样的东西 var express require express router express Router router get local modules function req res ne
  • 谷歌地图 API,提供的 API 密钥无效

    这是我第一次在堆栈溢出上发布问题 真心希望大家能帮忙 我第一次尝试使用谷歌地图地理编码 api 但无法让它工作 我使用的网址格式是 https maps googleapis com maps api geocode json addres
  • Qt 应用程序 UI 元素在 Docker 中随机呈现为空白/黑色

    我准备了Dockerfile构建我的 Docker 镜像Qt应用程序 要运行应用程序 我使用 X 我启用对 X 服务器的访问 xhost local root 然后我使用以下命令来运行它 docker run it env DISPLAY
  • 保留的 Python 模块/包名称是什么?

    我在使用 Python 单元测试时遇到了一个奇怪的错误 我的项目中有两个文件夹 project code init py empty app py defines my App class test test py contains my
  • 快速 firestore 检查文档是否存在

    使用 swift 和 firestore 我想检查 已使用的用户名 集合以查看用户名是否已被使用 以及它是否已提醒用户它已被使用 否则如果它仍然可用 我想创建该文件 我想要做的要点概述如下 我可以毫无问题地保存数据 尽管它检查其文档是否存在
  • 如何让RACSignal变热?

    ReactiveCocoa 可以通过调用它的方法将信号转换为 热 信号 subscribeCompleted 但我认为如果您不关心结果 即没有订阅者 则此方法非常冗长 RACDisposable animationDisposable se
  • notifyDataSetChanged 更新ListView失败

    I have a DialogFragment which has a list view with CheckedTextView and a checkbox at the top to Check and uncheck all th
  • 如何使用 Soundcloud Javascript SDK 进行流式传输,在上一个曲目完成后自动移至下一个声音?

    我是 Javascript 和 Soundcloud SDK 的新手 所以如果我当前的解决方案偏离基础 请告诉我如何改进它 我正在构建一个自定义 Soundcloud 播放器 而不是使用预构建的小部件 我正在寻找自动地一首曲目播放完毕后移至
  • numpy 是否自动针对树莓派进行优化

    Raspberry Pi armv7l 架构 具有 neon vfpv4 支持 可用于优化 标准版numpy在安装命令时是否包含这些优化pip3 install numpy or apt get python3 numpy 我不是在谈论 b
  • 显示段落的第一行

    我有一个带有多行段落的 DIV 有什么方法 也许使用 jQuery 只显示段落的第一行并隐藏其他行 这是一种 某种程度上 将段落设置为白底白字的方法 除了 第一行 http jsbin com usora4 2 edit CSS 片段 p
  • 如何在带有 VS 2019 预览版的 Windows 10 中安装 boost

    我搜索了很多 但没有找到任何有用的分步指南来在带有 VS 2019 Preview 的 Windows 10 中安装 配置和构建 boost 你们中的任何人都可以指导我完成这项任务吗 我已经下载了 boost 1 70 但是当我执行 boo
  • 使用 Swift 从 AppDelegate 更改 UINavigationBar 后退按钮文本和字体

    我需要更改 UINavigationBar 后栏按钮文本AppDelegate将更改应用到所有Views在我的应用程序中 我使用以下方法更改了标题字体样式 UINavigationBar appearance titleTextAttrib
  • Maven Spring Boot 插件:如何从另一个项目运行 spring boot

    https docs spring io spring boot docs current maven plugin usage html 我有一个项目 有 2 个模块 Parent pom xml SpringBoot2App pom x
  • UISearchDisplayController 未正确显示自定义单元格

    所以我有一个包含部分和行的 tableView 并且它使用自定义单元格类 自定义单元格有一个图像视图和一些标签 表视图工作正常 搜索工作正常 但搜索不显示我的自定义单元格类中的任何标签 仅显示具有正确图像的 imageView 我很困惑为什
  • 如何在 PowerShell 脚本中指定非位置参数?

    我有以下内容param块在脚本的开头 param string command string version 1 1 0 这很好 只有我需要 version to not是一个位置参数 所以如果你输入 script ps1 run argu
  • 动态 JQuery 日期选择器代码

    我需要创建动态过滤器来动态添加 删除行 它包含一个下拉框 根据所选的下拉框值 我创建一个动态 td 可能有一个文本字段或下拉列表 如果它是文本字段 那么我必须为该文本字段添加日期选择器 我已经这样做了 除了动态生成的文本字段的日期选择器 如
  • 相机姿态估计:如何解释旋转和平移矩阵?

    假设我在两个图像之间具有良好的对应关系 并尝试恢复它们之间的相机运动 我可以使用 OpenCV 3 的新工具来实现此目的 如下所示 Mat E findEssentialMat imgpts1 imgpts2 focal principal