- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
假设我在两张图片之间有很好的对应关系,并尝试恢复它们之间的相机运动。我可以为此使用 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
和 t
的实际含义。它们是将坐标从相机空间 1 映射到相机空间 2 所需的变换,如 p_2 = R * p_1 + t
中那样吗?
考虑这个例子,带有手动标记的对应关系
我得到的输出是这样的:
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
。现在,在您的例子中,右侧图像(前 View )来自相机 1,左侧图像(侧 View )来自相机 2。
看看这个等式,我们看到首先应用了旋转。所以成像你的相机当前拍摄的是左边的画面。现在您的 R 指定绕 y 轴旋转约 46 度。由于按角度 alpha 旋转点与按此角度反向旋转坐标轴相同,因此您的 R 告诉您向左旋转。正如您自己指出的那样,如果看图片,这似乎是正确的。由于围绕其他轴的旋转很小且难以成像,因此我们在这里省略它们。因此,在应用旋转后,您仍然站在拍摄左帧的相同位置,但您的相机或多或少指向汽车后部或汽车正后方的空间。
现在让我们看看翻译 vector 。您对向右移动和更远移动的解释也是正确的。让我试着解释一下为什么。想象一下,从您当前的位置,使用新的相机方向,您只能向右移动。您会直接撞到汽车或需要将相机放在发动机罩上方。因此,向右移动后,您还需要移动得更远才能到达您拍摄正确照片的位置。
我希望这个解释能帮助您想象您的 R 和 t 描述的运动。
关于c++ - 相机姿态估计 : How do I interpret rotation and translation matrices?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31447128/
我有这部分代码将 div 围绕一个圆圈对齐: angle = 0; mangle = 0; for(i = 1; i<= count; i++) { $("#p" +i).css
为什么平衡得到一个AVL树的过程叫做旋转 ? (当你在它时,什么是 单 和 双 旋转?) 我的每一本教科书都公然使用这个词,没有任何解释。 最佳答案 这是在你的树的子树中改变根的操作,这是非常简单的操
作为进入处理的一个小作业,我必须编写一些代码才能获得以下内容: 使用 public void setup() { size(300,200); noFill(); rect(100,
我遇到了 Google Chrome 控制台报告的问题。我使用的是 Ubuntu 12.04。控制台中的问题是: Uncaught TypeError: Cannot read propert
在统一编辑器中,当我启用“Pivot”时,游戏对象将围绕“枢轴点”位置旋转,当我启用“Center”时,游戏对象将围绕“中心点”旋转 但是如果我使用脚本旋转,它总是围绕“中心点”旋转,例如,这是我的场
rotate() 算法会从左边选择序列的元素。它的工作机制如图 1 所示。 图 1 rotate()算法的工作方式(点此查看大图) 为了理解如何旋转序列,可以将序列中的元素想象成手镯上的珠子。rota
在三个JS中,是否可以用鼠标旋转对象而不是用OrbitControls.js旋转相机( https://threejs.org/docs/#examples/controls/OrbitControl
我正在学习 CSS 过渡和转换。这是 HTML: Transformatons and Transitions animate animate2 d
我们有一个图像,它似乎在旋转时消失了一秒钟。这个问题存在于 IE8 中,但在 IE9 和其他支持 HTML5 的浏览器中工作正常。我们使用了 jQuery 旋转插件。 HTML CSS #obj {
作为评估的一部分,我被赋予了这项任务......“‘旋转’按钮应该翻转元素的纵横比。” 为了完成这个,我定位了元素并切换了一个类名(旋转),然后添加了这个 CSS... .main-inner.rot
我从 Unity 插件 Final IK 中看到了这行代码。 整个函数是这样的: //Limits rotation to a single degree of freedom (along axis
我正在尝试在动画关键帧内同时应用 -webkit-filter:hue-rotate() 和 -webkit-transform:rotate()。不幸的是,即使是 Chrome Canary 也无法
我正在尝试制作看起来像这样的波斯尼亚和黑塞哥维那国旗。 我正在努力实现星星的排列方式。它们位于 45 度倾斜轴上,但星星本身没有旋转。 以下是我正在尝试的最低限度代码,但它也会旋转星星。 有什么办法可
我正在尝试使用 ratcave for python 创建一个项目。但是当我导入 ratcave 时,出现以下错误: AttributeError: 'scipy.spatial.transform.
我正在尝试使用 ratcave for python 创建一个项目。但是当我导入 ratcave 时,出现以下错误: AttributeError: 'scipy.spatial.transform.
我的问题是我使用支持 CSS2 和 javascript 但不支持 css3 的 html 到 pdf 生成器 (acts_as_flying_saucer),所以我不能使用 transform: r
我做了以下转换: // Translate my cube to origin myCubeModelMatrix = glm::translate( myCubeModelMatrix, vec3(
我正在将一些基于 PIL 的代码转换为 NumPy,但我发现 skimage.transform.rotate函数比 PIL 的 Image.rotate 慢显着。 作为一个粗略的比较,使用 skim
前言 .我知道过去曾多次问过这个问题,但没有一个解决方案实际上对我有用。自从提出类似问题(根据耗时过滤的 Google 搜索)以来,也已经有好几年了,因此大多数较旧的答案都已过时。如果有任何方法可以让
我试图将元素从其起始旋转点旋转 360 度,而不是从 0deg。例如,如果起点是 90deg,它会从 90deg 旋转到 90deg(整圈)。 我的目标是使用简单的@keyframes 动画来旋转元素
我是一名优秀的程序员,十分优秀!