1. 程式人生 > >【轉】bundle.out文件的格式

【轉】bundle.out文件的格式

camera2 一個 csdn tar 法則 out 高度 描述 ras

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分別是圖像的寬度和高度。)

【轉】bundle.out文件的格式