簡明稀疏重建(SFM)教程

UTF8gbsn

本文主要做一個簡要的稀疏點雲重建方法的梳理,
梳理的粒度比較大.略去了非常多的技術細節.
其實這項技術也叫做SFM(Structured From Motion).

特徵

在3D重建中, 我們的輸入是一系列的照片.
這些圖片通常是圍繞一個物體並拍攝的一系列照片.
實際上對於同一個物體所拍攝的照片中存在一些特徵點. 這些特徵點,
和拍攝角度位置無關. 我們可以通過算法去計算出這些特徵點.
這個方法就是SIFT方法, 注意SIFT方法, 只是一個函數. 他的作用如下.

features=SIFT(image)features=SIFT(image)

它通過一個圖像的輸入,
計算出這個圖像的不變形特徵.這些特徵是一個集合features={f1,f2,,fn}features = \{f_1,f_2,\cdots , f_n\}.
fi={position,scale,direction}f_i=\{position, scale, direction\}. 由此可見.
每一張圖片都有一個這樣的features向量. 在圖像與圖像之間.
這些特徵實際上有一個對應關係.
但是我們通過SIFTSIFT計算,並不知道這個對應關係.
我們只是樸素的提取每一張圖片的不變性特徵.
這些特徵在不同圖片之間怎麼一一對應的, 我們目前不得而知.

特徵匹配

特徵比配的策略主要是比較SFIT特徵.
這些特徵靠計算歐拉距離和優化算法可以得到一個個一一對應的關係.形式化表示就可以.對於任意兩張圖片上的2D點ximg1,ximg2\mathbf{x}^{img_1}, \mathbf{x}^{img_2}.會有一個對應關係.
也就是說, 有一個這樣的列表.

(x1img1x1img2x2img1x2img2xnimg1xnimg2)\left( \begin{array}{cc} \mathbf{x}^{img_1}_1 & \mathbf{x}^{img_2}_1 \\ \mathbf{x}^{img_1}_2 & \mathbf{x}^{img_2}_2\\ \vdots & \vdots \\ \mathbf{x}^{img_1}_n & \mathbf{x}^{img_2}_n \end{array} \right)

稀疏重建過程

對於上一步獲得對應2D點.
我們可以利用這個對應關係一步一步計算出很多東西.其中包括K,R,T,X\mathbf{K, R, T, X}.
我們慢慢來看這些東西是什麼.

  1. x=(xy1)\mathbf{x}=\left( \begin{array}{c} x \\ y \\ 1 \end{array} \right), 2D點座標的齊次表示形式. 數據是成對的.
    因爲2D點對是一一對應關係.

  2. K\mathbf{K} 相機內參. (fx0cx0fycy001)\left( \begin{array}{ccc} f_x & 0 & c_x \\ 0 & f_y & c_y \\ 0 & 0 & 1 \end{array} \right) 相機內參的初始化方式可以有兩種.
    一種是讀取輸入圖片中的exif信息.另一種是設一個初始的值.
    然後這些設置僅僅是初始值. 後面會有算法來優化它們.
    也就是說到目前爲止, 可以人爲K\mathbf{K}是已知的

  3. X\mathbf{X}, 爲世界座標系下的3D點的齊次座標X=(xyz1)\mathbf{X}=\left( \begin{array}{c} x\\ y \\ z \\ 1 \end{array} \right)

  4. R,T\mathbf{R, T}, 相機外參. R3×3\mathbf{R}_{3\times 3}是一個旋轉矩陣.
    T3×1\mathbf{T}_{3\times 1}是一個位移向量.
    實際上[RT]X[\mathbf{R}|\mathbf{T}]\cdot \mathbf{X}
    的作用就是把3D點變換到攝像機座標系中.

再次強調:到目前爲止, 我們可以說我們的已知爲x\mathbf{x}點對,
K\mathbf{K}, 而未知的東西位X,R,T\mathbf{X, R, T}.
我們來看看怎麼來求這些東西.

求解R,T\mathbf{R, T}

實際上, 我們還需要另外的知識. 也就是essential matrix 本質矩陣.
對於兩張圖片攝像機座標系中的配對點理論上存在一個本質矩陣E3×3\mathbf{E}_{3\times3}使得
x~1TEx~2=0\tilde{\mathbf{x}}^{T}_{1} \mathbf{E} \tilde{\mathbf{x}}_{2}=0

其中x~\tilde{\mathbf{x}}\in 第一張圖片的攝像機座標系.
x~2\tilde{\mathbf{x}}_{2} 屬於第二張圖片的攝像機座標系. 又因爲

x~=K1x\tilde{\mathbf{x}}=K^{-1}x 也就是說, 把2D點逆變換到攝像機座標系裏面.
通過上面的變換x~\tilde{\mathbf{x}} 就變爲已知了.
那麼我們同樣可以解方程組接觸E\mathbf{E}.
注意E\mathbf{E}是一個選對旋轉矩陣.
所以我們這裏要假設圖片1的攝像機座標系位R=I,T=0\mathbf{R=I, T=0}.
這樣我們對E\mathbf{E}做SVD分解就可以解出一個RE,TE\mathbf{R}_E, \mathbf{T}_E.
因爲我們假設第一個相機位基準相機.
所以雖然E\mathbf{E}是一個相對旋轉矩陣.
是從第一章圖的攝像機座標系旋轉到第二張圖的攝像機座標系.
可是由於第一張圖是基準R=I,T=0\mathbf{R=I, T=0}.
那麼我們從E\mathbf{E}中分離出來的RE,TE\mathbf{R}_E, \mathbf{T}_E
就是第二張圖的攝像機座標系R2,T2\mathbf{R}_2, \mathbf{T}_2.

再次強調: 到目前爲止,我們知道了K,R,T,x\mathbf{K, R, T, x},
注意x\mathbf{x}是點對. 要求的對象變爲X\mathbf{X}

求解X\mathbf{X}

現在求解X\mathbf{X}就變得十分的簡單了. 就是一個線性優化問題.
而且變成一個線性最小二乘法.
假設我們有N張圖片中含有同一個X\mathbf{X}那麼,可以把優化函數寫爲
X=argminXi=1NPiXxi22,Pi=Ki[Ri,Ti]\mathbf{X}=\arg \min_{\mathbf{X}} \sum_{i=1}^{N}\| \mathbf{P}_{i} \mathbf{X}-\mathbf{x}_{i} \|^{2}_2, \mathbf{P}_i=K_i[R_i,T_i]

下標ii,表示第幾張圖片. 用這個方法可以成功的解出一個X\mathbf{X}.
也就是一個3D點. 最後, 解若干個這樣的方程.
你可以恢復出一個3D點雲.也就是2D像素對應的3D點雲. 至此我們的目的就完成了.
我們最終解出了X\mathbf{X}. 可是遺憾的是, 還不夠.
因爲誤差和匹配錯誤的問題. 效果不夠好. 所以最後還需要做一次優化.

優化K,R,T,X\mathbf{K, R, T, X}

[P,X]=argminP,Xi=1Nj=1DPiXjxj22[\mathbf{P, X}] = \arg \min_{\mathbf{P, X}} \sum_{i=1}^{N}\sum_{j=1}^{D} \|\mathbf{P}_i\mathbf{X}_j-x_j\|^2_2
其中P={P1,P2,,PN},X={X1,X2,,XD}\mathbf{P}=\{\mathbf{P_1, P_2, \cdots , P_N}\}, \mathbf{X}=\{\mathbf{X}_1, \mathbf{X}_2, \cdots, \mathbf{X}_D\},
其中NNN是圖像數量. DD是特徵點數量. 這個優化是一個非線性最小二乘法.
優化具體細節在這裏暫時不提. 不過至此我們就完成了所有SFM過程.
注意我這裏簡化了變量實際上Pi=Ki[Ri,Ti]\mathbf{P_i=K_i[R_i,T_i]}. 具體來說,
非線性最小二乘是怎麼優化這些參數的.還要具體詳細的查閱這方面的資料.
加粗樣式

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章