gpt4 book ai didi

algorithm - OpenCV>>运动结构,三角测量

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:23:42 26 4
gpt4 key购买 nike

用例


  1. 使用随机点生成合成 3D 场景
  2. 生成两个合成相机
  3. 获取 2 个摄像头 2D 投影
  4. 推导基本矩阵和基本矩阵
  5. 使用基本矩阵导出旋转和平移
  6. 对 2 个 2D 投影进行三角测量以生成初始 3D 场景

实现


  1. 生成随机 3D 点 ( x, y, z )
  2. 相机固有矩阵是静态定义的
  3. 旋转矩阵是静态定义的(在 Z 轴上旋转 25 度)
  4. 身份翻译矩阵(无翻译)
  5. 综合生成两个投影(K*R*T)
  6. 使用 cv::findFundamentalMat ( F ) 解析基本矩阵
  7. 使用“K.t() * F * K”计算基本矩阵 E
  8. 使用 SVD 提取相机外部参数,产生 4 种可能的解决方案(根据“Hartley & Zisserman Multiple View Geometry”第 9.2.6 章)
  9. 使用 cv::triangulatePoints 按以下方式完成三角测量:cv::triangulatePoints(K * matRotIdentity, K * R * T, v1, v2, points);
  10. 'points' 是具有齐次坐标 (x, y, z, w) 的 4 行 N 列矩阵
  11. 通过将“x、y、z”除以“w”将“点”转换为非齐次(局部)坐标

结果


生成的 3D 点与原始点匹配到一定比例(在我的例子中为 ~144)。

问题

  1. Camera Translation 推导到一定比例(#8),考虑到这一点,假设三角测量结果也符合一定比例是否正确?
  2. 是否可以在没有相机位置或点的绝对大小的任何先验知识的情况下推导出比例?

如有任何帮助,我们将不胜感激。



编辑:

我试图使用与 3D -> 2D 投影完全相同的投影矩阵从 2D 转换回 3D(使用 cv::tirangulatePoints ),令人惊讶的是,这导致了一个空向量(所有 3D 点都有 x ,y,z,w == 0),这最终是因为两个相机仅在旋转方面不同而不是在平移方面不同,因此,两条投影线是正交的(在 3D 空间中)导致零长度基线(对极线而不是平面 ),因此,最小化 x,y,z == 0 处的距离,得到 null 向量。

在两个相机之间添加平移可以正确恢复原始坐标,但是,考虑到我使用完全相同的投影矩阵进行 3D 到 2D 转换,然后从 3D 返回到 2D 三角测量。

在进行相机位姿估计(从点对应关系中提取投影矩阵)时,平移是按比例推导出来的,因此三角测量结果也是按比例缩放的。

问题

是否有可能以公制/像素...单位而不是按比例推导平移差异(相机移动了多少)?需要什么先验知识?

最佳答案

  1. 三角点与用于三角测量的相机位于同一坐标系中...

  2. 从实际意义上来说,不是。

关于algorithm - OpenCV>>运动结构,三角测量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23253857/

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