我们从 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算法)计算的旋转矩阵。
该库提供alpha、beta、gamma角(以弧度为单位),它们分别映射到yaw、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-矩阵换相机/在此处输入链接描述):
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 世界坐标?