稀疏重建-->密集重建的过渡文件

1。bundle.out


文件包含了一些经过估算得到的场景和相机几何信息。文件的格式如下:  

//---------------------------------------------------------------------------------------------------------------------开始
# Bundle file v0.3

<num_cameras> <num_points> [相机个数]  [点个数]   [2个整数]

<camera1> [相机1]
<camera2> [相机2]
...
<cameraN> [相机N]
<point1> [点1]
<point2> [点2]
...
<pointM> [点M]
//每一个相机实体<cameraI> 的值是估算得到的相机内部和外部参数,形式为:

<f> <k1> <k2>   [焦距,后面跟着两个径向畸变多项式系数]

  <R>             [一个3X3矩阵:代表相机旋转]
  <t>             [一个3维向量:描述摄像机平移]
    
  //每个相机的排序根据其在图片列表中的出现顺序来指定。
  //每个点实体<pointI>格式为:
<position>      [3向量描述该点的三维位置]
 <color>         [ 3向量描述该点的RGB颜色]
<view list>     
//其中,view list存放的是每一个点所在的场景列表的信息,
1.开头第一个数是每个场景列表的长度信息,(有几个图像  对应  该点)
2.然后紧接着分别是相机索引信息、(第一图像的)

3.该点所在的SIFT关键点序列的索引信息,
4.以及该关键点所在的位置。(在图像中的位置)(对应于中心位置的距离坐标)

再第二、第三...图像的(与第一相同)
//---------------------------------------------------------------------------------------------------------------------结束


  根据这些bundle.out文件内容以及小孔成像模型,我们就可以大致得到每台相机的参数:
  焦距 (f),
  两个径向畸变参数(K1和K2),
  旋转矩阵 (R),
  平移矩阵 (t)。


  按照下面的法则我们可以将一个3D点X 投影到参数为(R,t,f)的相机中:

   P = R * X + t       (从世界到相机坐标转换)

   p = -P / P.z        ( 透视除法)

   p' = f * r(p) * p   (转换到像素坐标)

  其中,P.z是P的z坐标值。r(p)是一个用来计算出径向畸变校正的尺度变量值的函数:
   r(p) = 1.0 + k1 * ||p||^2 + k2 * ||p||^4.
  最后,利用上面的公式还可以得到相机的方向为:
    R' * [0 0 -1]'    (其中,' 表示一个矩阵或者向量的转置)

而相机的空间位置就为:
    -R' * t .


//-=-=-=-=-=-=-=-=-=-=-==-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

2。0000xxx.txt

-------------------------------------------
CONTOUR
P[0][0] P[0][1] P[0][2] P[0][3]
P[1][0] P[1][1] P[1][2] P[1][3]
P[2][0] P[2][1] P[2][2] P[2][3]
-------------------------------------------

"CONTOUR" (轮廓)只是一个标题。P[3][4]表示一个3x4投影矩阵,其定义如下:

( x y z 1 )表示一个点的齐次三维坐标,

( u v 1 )表示其图像投影的齐次的二维坐标,

然后( x y z 1 )和( u v1 )与以下等式相关:


          x
  u      y
d(v)=(P)(z)
  1      1

其中d是关于照相机的点的深度。

(注意,图像坐标系统的原点位于图像的左上角(严格地说,原点位于图像左上角的像素的中心)。

x轴指向右边,y轴指向底部。

稀疏重建-->密集重建的过渡文件

因此,左上角像素的2d图像坐标是( 0,0 ),

并且右下角像素的2d图像坐标是( w,h),

其中w和h分别是图像的宽度和高度。)