1

我们从 Google Street View (GSV) API 抓取了一组图像。我想从 2D 图像估计 3D 世界坐标给定以下:

1. 摄像头拍摄图像的GPS位置(即经纬度)

GPS坐标到平移矩阵的转换:使用2种转换方法得到平移矩阵-> UTM转换和转换为笛卡尔坐标。

  • UTM 转换:使用 Python 的 UTM 库将 GPS 坐标转换为 UTM 坐标。使用具有固定高度的北和东值来创建平移矩阵。
  • 笛卡尔转换 - 使用以下公式生成平移矩阵:

x = 半径*math.cos(纬度)*math.cos(经度)

y = 半径*math.cos(纬度)*math.sin(经度)

z = 半径*math.sin(纬度)

2.使用openSFM(即SFM算法)计算的旋转矩阵。

该库提供alphabetagamma角(以弧度为单位),它们分别映射到yawpitchroll角。使用公式( http://planning.cs.uiuc.edu/node102.html)构造旋转矩阵

旋转矩阵 (R):R(alpha, beta, gamma)= R_z (alpha) * R_y (beta) * R_x (gamma)

3. 根据视场角和图像尺寸,我们估计校准矩阵如下(https://codeyarns.com/2015/09/08/how-to-compute-intrinsic-camera-矩阵换相机/在此处输入链接描述):

K = [[f_x s X], [0 f_y Y], [0 0 1]]

x 和 y 是图像尺寸的一半(即 x = 宽度/2 和 y = 高度/2)

GSV API 提供视场角 θ(例如,45 或 80),因此焦距可以计算为

f_x= x/tan⁡(θ/2)

f_y= y/tan⁡(θ/2)

使用矩阵 T、R 和 K,我们如何估计 2D 图像中每个像素的 3D 世界坐标?

4

1 回答 1

1

单张图像不可能 - 3D 深度信息在投影中丢失。即使您使用多张图像,也很难(或几乎不可能以任何准确度)处理您拥有的数据。

GSV API 不会为您提供原始图像数据,而是已经投影到立体全景图中的图像,经过一系列转换,其目标是增强最终全景图的视觉外观。此外,原始图像本身是使用滚动快门相机从移动平台捕获的,因此标准针孔模型不适用于它们,无论非线性镜头失真如何。尝试在街景图像上进行“从运动中构造”肯定会令人失望,除非您确切地知道自己在做什么,并且在谷歌工作并且可以访问内部数据。

“真正”的做法是将同一车辆收集的激光雷达数据与图像进行注册。谷歌在内部这样做,但我不相信他们曾经将结果暴露在外部可访问的产品中。

于 2018-01-29T21:56:41.447 回答