【轉】bundle.out文件的格式
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維向量:描述攝像機平移]
//每個相機的排序根據其在圖片列表中的出現順序來指定。
<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文件的格式