问题标签 [pose-estimation]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
opencv - 相对相机位姿估计:使用噪声估计获得度量平移
我目前正在使用opencv对一个相机相对于另一个相机进行姿态估计,在一个camera1固定并且camera2可以自由移动的设置中。我知道这两个相机的内在特性。我有使用对极几何的姿势估计模块和使用五点算法计算基本矩阵来计算camera2相对于camera1的R和t;但我想获得公制转换。为了帮助实现这一点,我有两个 GPS 模块,一个在 camera1 上,一个在 camera2 上。现在,如果我们假设 camera1 的 GPS 完美无缺且准确;camera2 的 GPS 表现出一些 XY 噪声,我需要一种方法在这个嘈杂的 GPS 之上使用 opencv 姿态估计来获得最终的准确翻译。
鉴于这些信息,我的问题有两个部分:
- 由于相机之间的外部因素不断变化,是否可以使用捆绑调整来优化我的姿势?
- 我能否以某种方式将我的(嘈杂的)GPS 测量结果纳入捆绑调整框架中作为初始估计,并获得更准确的度量转换估计作为我的最终结果?
opencv - 姿态估计:solvePnP 和对极几何不一致
我有一个相对相机姿势估计问题,我正在看一个场景,其中不同方向的相机间隔一定距离。最初,我使用 5 点算法计算基本矩阵并将其分解以获得相机 2 wrt 相机 1 的 R 和 t。
我认为通过将两组图像点三角化为 3D 进行检查是个好主意,然后在 3D-2D 对应关系上运行solvePnP,但我从solvePnP 得到的结果很差。我正在尝试这样做以“优化”我的姿势,因为比例可以从一帧变为另一帧。无论如何,在一种情况下,我在相机 1 和相机 2 之间沿 Z 轴旋转了 45 度,对极几何部分给了我这个答案:
另一方面,solvePnP..
camera2 的 rvecs 和 camera 1 的 tvec 出现了令人不安的问题。我的涉及点三角测量和 solvePnP 的代码如下所示:
然后我通过 Rodrigues 转换 rvecs 以获得欧拉角:但由于 rvecs 和 tvecs 本身似乎是错误的,我觉得我的过程有问题。任何指针都会有所帮助。谢谢!
opencv - 尽管图像是从同一位置拍摄的,为什么我的极线变化如此之大?
我通过 OpenCV 2.4.11 中的 findEssentialMat() 函数使用五点算法来计算一个相机相对于另一个相机的相对位姿。对于初始测试,我将两个相机分开放置在 X 中并拍摄了多张照片。如图所示,图像之间检测到的(和匹配的)特征基本保持不变,因为没有运动;然而,基本矩阵和极线变化很大:这反过来又影响了我的姿势。为了提高 E 矩阵的准确率,我还尝试了两次运行该算法:首先使用 RANSAC 过滤掉异常值,然后使用 LMEDS 算法,但我看不到很多改进。尤其是在图 1 和图 2 之间,发生了巨大的变化。
关于可能发生变化/出错的任何指示?我知道 RANSAC 选择可能会导致每次都拾取不同的样本,但是由于所有特征都应该具有相同的“转换”,可以这么说,无论哪些是最终的内点,极线不应该仍然相似? 此外,五点算法论文指出,在所有点共面的情况下,它不存在故障问题。有什么办法可以改进基本的矩阵计算?
谢谢你的时间!
opencv - 来自相同姿势的点的两视图三角测量漂移
我在 openCV 的三角测量功能中遇到了一个奇怪的问题。对于我的两视图姿态估计测试,我这样做:
案例 1:单个相机从两个视图拍摄场景,然后计算基本矩阵并对场景进行三角剖分:效果相当好。
案例 2:我正在尝试使用两台相机(均已校准)进行此操作,但三角测量失败。对于来自相同姿势的图像对,三角点应该或多或少相同(实际上它们在情况 1 中是相同的),但现在它们正在漂移。
例子:
我在这里做错了什么?对于下一组点,triangulatePoints 提出了另一个奇怪的估计。
opencv - 立体三角测量的奇怪问题:两个有效的解决方案
我目前正在使用 OpenCV 进行与姿势估计相关的工作,其中我正在对对之间的点进行三角测量以进行重建和比例因子估计。我在处理这个问题时遇到了一个奇怪的问题,尤其是在 opencv 函数recoverPose() 和 triangulatePoints() 中。
假设我有摄像头 1 和摄像头 2,它们在 X 中间隔开,cam1 在 (0,0,0) 处,cam2 在它的右侧(正 X)。我有两个数组 points1 和 points2 是两个图像之间的匹配特征。根据 OpenCV 文档和代码,我注意到了两点:
- recoverPose() 假设 points1 属于 (0,0,0) 处的相机。
triangulatePoints() 被调用了两次:一次来自 recoverPose(),告诉我们四种 R/t 组合中的哪一种是有效的,然后再次从我的代码中调用,文档说:
/li>
因此,与recoverPose() 的情况一样,可以安全地假设P1 是[I|0] 而P2 是[R|t]。
我实际发现的是:它不是那样工作的。虽然我的 camera1 为 0,0,0 而 camera2 为 1,0,0(1 符合比例),但如果我运行,则获得唯一正确的配置
这应该是不正确的,因为 points2 是 R|t 的集合,而不是 points1。我在房间里测试了一个场景的图像对,其中在三角测量后有三个明显的物体:一个监视器和它后面墙上的两张海报。这是三角测量产生的点云(请原谅 MS Paint)
如果我按照 OpenCV 规定的方式进行操作:(海报点分散在空间中,看起来很奇怪)
如果我这样做(错误?)方式:
任何人都可以分享他们对这里发生的事情的看法吗?从技术上讲,这两种解决方案都是有效的,因为所有点都落在两个摄像头的前面:而且我不知道要选择什么,直到我将它渲染为点云。我做错了什么,还是文档中的错误?我对计算机视觉理论不是很了解,所以我可能在这里遗漏了一些基本的东西。谢谢你的时间!
opencv - 旋转矩阵的微小变化完全破坏了立体重建
我正在尝试基于两个摄像机的 iamge 特征和投影矩阵(通过特征匹配和基本矩阵计算计算)重建 3D 场景,所有这些都在 OpenCV 中。我遇到了一个奇怪的问题。
主要是点三角剖分和场景重建的精度对R矩阵极为敏感。为了对此进行测试,我使用通过两个投影矩阵传播的模拟对象点进行了测试(以模拟立体)。对象点是一个 6x6 的正方形;x:{0 到 1,步长为 0.2},y:{0 到 1,步长为 0.2},z:{全部 10}。P1 在这两种情况下都是 [I|0],P2 是 [R|t],其中:
我认为这两个 R 矩阵足够接近,可以认为是准确的。但三角剖分结果似乎不这么认为..
使用 R1|t1:
使用 R2|t2:
t 的准确度不会引起任何这种量级的问题。当然,旋转中约 0.01 的差异不应该导致如此糟糕的重建。任何人都可以阐明这里可能出了什么问题吗?我尝试了两种三角测量方法,一种内置于 opencv (cv::triangulatePoints()) 中,另一种是在 Hartley 和 Zisserman 书中解释的迭代最小二乘法。我的管道是这样的:输入图像点 -> 使用 K 矩阵进行均质化 -> 三角测量 -> “非均质化”获得 4d 点以获得 3d。谢谢你的时间!
opencv - 查找具有 2D 和 3D 对应关系的两个摄像机之间的相对位姿
我有两张经过校准的相机从两个不同的姿势获得的图像。我也有图像之间的二维点的对应关系。有些点有深度信息,所以我也知道它们的 3D 坐标。我想计算图像之间的相对姿势。
我知道我可以从二维点计算基本矩阵或基本矩阵。我也知道 PnP 可以找到具有 2D 到 3D 对应关系的姿势,并且只获取 3D 点的对应关系也是可行的。但是,我不知道有任何算法可以利用所有可用信息。有没有?
opencv - 如何使用 OpenCV 通过solvePnP 估计距离?
我试图估计我的相机和我用于校准的棋盘之间的距离。但是对于棋盘上的点,我的 Z 值(993 - 1021 毫米)有很大不同。棋盘平行于相机,所以我希望相机中心和棋盘平面上任何点之间的 Z 值应该相同。
我做错了什么?
代码:
与棋盘的图像
opencv - 用 R 和 t 计算新的 PixelCoordinates 点
我知道对于 3d 重建,您可以从两个图像中获得除比例因子之外的所有内容。
但是你能计算出第一张图像中的一个点在第二张图像中的位置吗?比例因子在这里不应该是有趣的吗?!
我通过用 recoverPose() 分解 Essential Mat 得到 R 和 t;但是新的 Point 甚至不在图像中。
如果我想错了,有人可以告诉我吗?谢谢
编辑
我只知道 checkPoint 的像素坐标而不是真正的 3d 坐标
编辑2
如果您知道 R 和 t 但不知道 t 的长度。应该可以假设两个图像中已知的点 M 的 z1,然后得到结果 t。对?然后应该可以重新计算第一个图像中它位于第二个图像中的每个点。
z2 则对应于 t。但是 z2 和 t 之间的依赖关系是什么?
编辑3
如果我只是假设 M1 的 z=1。我从这两个图像中计算出 R 和 t。然后我就知道什么是绿色了。因此我需要求解这个线性方程来得到 s 并得到真正的 t。
我使用前两行两个解决两个变量。但结果似乎没有写出来。
等式不正确吗?
opencv - 使用 PNP 进行姿势估计:奇怪的错误结果
我正在尝试使用 Open CV(EPNP、迭代等)中的 PNP 算法实现来获取两个摄像机对中摄像机的度量姿态估计(不是传统的立体装置,摄像机可以相互独立地自由移动) . 我目前的图像来源是机器人模拟器(Gazebo),其中两个摄像头在物体场景中进行模拟。图像几乎是理想的:即零失真,无伪影。
所以首先,这是我的第一对图像。
我假设正确的相机是“原点”。在公制世界坐标中,左相机位于 (1,1,1),右相机位于 (-1,1,1)(沿 X 的 2m 基线)。使用特征匹配,我构造了基本矩阵,从而构造了左相机的 R 和 t 右对齐。这就是我得到的。
这是正确的,因为位移仅沿相机框架中的 X 轴。对于第二对,左侧相机现在位于 (1,1,2)(向上移动 1m)。
现在左右的 R 和 t 变为:
这又是有道理的:没有旋转;沿 Y 轴的位移是基线(沿 X)的一半,依此类推,尽管这个 t 并没有给我真正的度量估计。
因此,为了在案例 2 中获得姿态的度量估计,我在案例 1 中使用来自摄像机 1 和摄像机 2 的点构建了 3D 点(考虑到已知基线:即 2m),然后使用这些点运行 PNP 算法案例 2 中的 3D 点和图像点。奇怪的是,ITERATIVE 和 EPNP 算法都给了我类似且完全错误的结果,如下所示:
我在这里缺少一些基本的东西吗?我认为这对于 PNP 来说应该是一个相对简单的计算,因为没有失真等。任何意见或建议都会非常有帮助,谢谢!