gpt4 book ai didi

c++ - 如何使用 OpenCV triangulatePoints

转载 作者:可可西里 更新时间:2023-11-01 18:39:26 33 4
gpt4 key购买 nike

我正在努力让 OpenCV triangulatePoints 函数正常工作。我使用的是从光流生成的点匹配函数。我正在使用来自单个移动相机的两个连续帧/位置。

目前这些是我的步骤:

内在函数已给出并且看起来像人们期望的那样:

2.6551e+003  0.           1.0379e+003
0. 2.6608e+003 5.5033e+002
0. 0. 1.

然后,我根据(高度准确的)GPS 和相机相对于 GPS 的位置计算两个外部矩阵 ([R|t])。请注意,GPS 数据使用荷兰周围的笛卡尔坐标系,该坐标系使用米作为单位(因此不需要奇怪的纬度/经度数学)。这会产生以下矩阵:

Camera extrinsic matrices

接下来,我简单地删除这些矩阵的底行并将它们与固有矩阵相乘以获得投影矩阵:

projectionMat = intrinsics * extrinsics;

这导致:

Projection matrices

我的图像点只包含第一组的所有像素坐标,

(0, 0)...(1080, 1920)

以及第二组的所有像素坐标 + 它们计算的光流。

(0 + flowY0, 0 + flowX0)...(1080 + flowYN, 1920 + flowXN)

为了计算 3D 点,我将图像点(以 OpenCV 期望的格式)和投影矩阵提供给 triangulatePoints 函数:

cv::triangulatePoints(projectionMat1, projectionMat2, imagePoints1, imagePoints2, outputPoints);

最后,我将 outputPoints 从齐次坐标中除以它们的第四个坐标 (w) 并删除该坐标。

我最终得到的是一些奇怪的锥形点云:

Output 1

现在,我已经尝试了所有我能想到的调整组合(反转矩阵、更改 X/Y/Z 顺序、反转 X/Y/Z 轴、更改乘法顺序...),但一切都会产生类似的奇怪结果. 确实给我带来更好结果的一件事就是将光流值乘以 0.01。这导致以下点云:

Output 2

这仍然不完美(远离相机的区域看起来真的很弯曲),但更符合我的预期。

我想知道是否有人能发现我做错了什么。我的矩阵看起来不错吗?我得到的输出是否与某个问题有关?

我非常确定的是,它与 GPS 或光流无关,因为我测试了多个帧并且它们都产生相同类型的输出。我真的认为这与三角测量本身有关。

最佳答案

triangulatePoints() is for stereo camera , not for monocular camera!

在 opencv 文档中,我阅读了以下表达:

The function reconstructs 3-dimensional points (in homogeneous coordinates) by using their observations with a stereo camera. Projections matrices can be obtained from stereoRectify()

关于c++ - 如何使用 OpenCV triangulatePoints,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42271739/

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