2D图像到3D世界坐标

时间:2018-01-29 00:21:36

标签: computer-vision structure-from-motion

我们从Google街景(GSV)API抓取了一组图片。我想从2D图像估计3D世界坐标,给出以下内容:

1。捕捉图像的相机的GPS位置(即纬度和经度)

将GPS坐标转换为平移矩阵:使用了2种类型的转换 获得翻译矩阵的方法 - > UTM转换并转换为笛卡尔坐标。

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

x = Radius * math.cos(纬度)* math.cos(经度)

     

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

     

z = Radius * math.sin(纬度)

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

该库提供 alpha beta gamma 角度(Radian),映射到偏航,< em> pitch 和 roll 角度。旋转矩阵使用公式(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-matrix-for-a-camera/ enter link description here):

  

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世界坐标?

1 个答案:

答案 0 :(得分:0)

单张图像无法实现 - 投影时3D深度信息会丢失。即使您使用多个图像,使用您拥有的数据也很难(或几乎不可能完成任何准确性)。

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

“真实”的方法是将相同车辆收集的LIDAR数据与图像一起注册。谷歌在内部做到这一点,但我不相信他们曾将结果暴露在外部可访问的产品中。