攝像機(jī)的外參數(shù):旋轉(zhuǎn)向量(大小為1×3的矢量或旋轉(zhuǎn)矩陣3×3)和平移向量(Tx,Ty,Tz)。
這里我們講解一下旋轉(zhuǎn)向量:
旋轉(zhuǎn)向量是旋轉(zhuǎn)矩陣緊湊的變現(xiàn)形式,旋轉(zhuǎn)向量為1×3的行矢量。
上述公式中r就是旋轉(zhuǎn)向量,1、旋轉(zhuǎn)向量的方向是旋轉(zhuǎn)軸 2、旋轉(zhuǎn)向量的模為圍繞旋轉(zhuǎn)軸旋轉(zhuǎn)的角度。通過上面的公式三,我們就可以求解出旋轉(zhuǎn)矩陣R。同樣的已知旋轉(zhuǎn)矩陣,我們也可以通過下面的公式求解得到旋轉(zhuǎn)向量:
內(nèi)參數(shù)(fx,fy,cx,cy)與棋盤所在空間的3D幾何相關(guān)(即外參數(shù))
畸變參數(shù)則與點(diǎn)集如何畸變的2D幾何相關(guān)。
1、5個(gè)畸變系數(shù)的求解:已知模式(我們可以認(rèn)為是黑色方格,含有四個(gè)角點(diǎn))的三個(gè)角點(diǎn)所產(chǎn)生的6組信息(在理論上)可以求解5個(gè)畸變參數(shù)。
2、內(nèi)參數(shù)fx,fy,cx,cy,和(ψ,φ,θ),(Tx,Ty,Tz)共10個(gè)參數(shù)的求解將在下面詳細(xì)講述。
首先說明:求解上述2中10個(gè)參數(shù)的前提是先假設(shè)每次的畸變參數(shù)為0。
求解4個(gè)內(nèi)參數(shù)和6個(gè)外參數(shù)的分析:
假設(shè)有N個(gè)角點(diǎn)和K個(gè)棋盤圖像(不同位置),需要多少個(gè)視場(chǎng)和角點(diǎn)才能提供足夠的約束來求解這些參數(shù)呢?
1、K個(gè)棋盤,可以提供2NK的約束,即2NK的方程。(乘以2是因?yàn)槊總€(gè)點(diǎn)都由x和y兩個(gè)坐標(biāo)值組成)
2、忽略每次的畸變,那么我們需要求解4個(gè)內(nèi)參數(shù)和6K個(gè)外參數(shù)。(因?yàn)閷?duì)于不同的視場(chǎng),6個(gè)外參數(shù)是不同的)
3、那么有解的前提是方程的總數(shù)應(yīng)該大于等于未知參數(shù)的總數(shù)即2NK>=6K+4,或者寫成(N-3)K>=2。
為了方便理解,下圖是一個(gè)3×3大小的棋盤,紅色圈標(biāo)記出了它含有的內(nèi)角點(diǎn):
如果我們令N=5,K=1,帶入到上述不等式,是滿足不等式,這就是意味著我們僅需要一個(gè)視場(chǎng)和帶有5個(gè)內(nèi)角點(diǎn)的棋盤就可以求解出10個(gè)參數(shù)了。其實(shí)不然,為了描述投影視場(chǎng)的所有目標(biāo)只需要4個(gè)點(diǎn),即一次性在四個(gè)方向上延展正方形的邊,把它變成任意四邊形。因此,無論一個(gè)平面上檢測(cè)到多少個(gè)角點(diǎn),我們只能得到4個(gè)有用的角點(diǎn)信息。如上圖所示是一個(gè)3×3大小的棋盤,有4個(gè)內(nèi)角點(diǎn)。
對(duì)于每一個(gè)視場(chǎng),我們僅能給出4個(gè)有用的角點(diǎn)信息,那么上述的公式中K就約束為4,即公式變?yōu)?4-3)K>=2,即K>=2。即要求解10個(gè)參數(shù)最少需要兩個(gè)視場(chǎng)。
考慮到噪聲和數(shù)值穩(wěn)定性要求,對(duì)大棋盤需求收集更多的圖像。
為了得到高質(zhì)量結(jié)果,至少需要10幅7×8或者更大棋盤的圖像(而且只在移動(dòng)棋盤在不同圖像中足夠大以從視場(chǎng)圖像中得到更加豐富的信息)。
數(shù)學(xué)是怎么應(yīng)用于標(biāo)定的?
OpenCV選著那些能夠很好工作于平面物體的方法。OpenCV中使用的求解焦距和偏移的算法是基于張的方法,但求解畸變參數(shù)則是另外一個(gè)基于Brown的方法。
首先我們假定求解標(biāo)定參數(shù)時(shí),攝像機(jī)沒有畸變。對(duì)于每一個(gè)棋盤視場(chǎng),我們得到一個(gè)前面描述的單應(yīng)性矩陣H,大小為3×3。將H寫成列向量的形式,即H=[h1 h2 h3],每個(gè)h是3×1向量,根據(jù)前面單應(yīng)性的介紹,我們知道單應(yīng)性矩陣H是物理變換(旋轉(zhuǎn)、平移)和相機(jī)內(nèi)參數(shù)組成。我們的目的就是分解這個(gè)H,能夠從中分解出這些成分。由單應(yīng)性一節(jié),我們知道:
M是攝像機(jī)內(nèi)參數(shù)矩陣,r1,r2是旋轉(zhuǎn)矢量3×1,t是平移矢量,對(duì)應(yīng)項(xiàng)相等得到如下:
這里λ=1/s。
我們知道R=[r1,r2,r3],r3消失,是因?yàn)槲覀兞鞿=0。R是一個(gè)正交陣,即R的轉(zhuǎn)置等于R的逆。正交陣的每個(gè)列向量是兩兩正交且單位化的(即模為1),那么r1和r2是相互正交。
正交的含義有兩個(gè):兩個(gè)矢量的點(diǎn)積為0,兩個(gè)矢量的長度相等。下面我們就用這兩個(gè)約束來進(jìn)行求解。
我們將r1和r2帶入到上述的公式的:

另:
即:
其中M公式如下:
將M帶入公式,可以得到矩陣B的通用形式的封閉解:
這里 重新寫一下兩個(gè)約束:
由于B是對(duì)稱真,那么B可以僅有對(duì)角線下半元素或者對(duì)角線上半元素表示,即可以有6個(gè)元素表示。我們將通用形式展開,并且提取出B成分,那么通用形式可以寫成含有旋轉(zhuǎn)成分和含有B成分的6個(gè)元素組成的向量的點(diǎn)積(注意:是點(diǎn)積,不是兩個(gè)矩陣相乘),如下:
從上述公式,我們已知單應(yīng)性矩陣H,那么它其中的每一個(gè)元素我們都是已知的,那么上述Bij是我們要求解的值,公式:即可以理解為:a1x1+a2x2+a3x3..+a6x6=0,等式的求解。
我們可以組合兩個(gè)約束為如下的形式:
從上述可知對(duì)于每一個(gè)視場(chǎng)我們可以得到形如上面描述的2個(gè)公式(上述黃色部分),那么對(duì)于K的視場(chǎng),我們可以得到2K個(gè)這樣的公式。
我們堆積這些方程有:
那么b是要求解未知數(shù)矢量大小為6×1,V是2K×6的矩陣,如果K>=2,那么方程有解b=[B11,B12,B22,B13,B33]T,看到這里,你或許會(huì)暈一下,我們要求解B,B是一個(gè)含有6個(gè)元素的矢量,而當(dāng)K=2時(shí),我們只能獲得4個(gè)方程呀?其實(shí),我們忘了一點(diǎn),那就是內(nèi)參數(shù)矩陣中只有4個(gè)未知數(shù),四個(gè)方程,4個(gè)未知數(shù),那么就可以求解出cx,cy,fx,fy,而b就是由這四個(gè)參數(shù)組合而成的。攝像機(jī)內(nèi)參數(shù)可以從B矩陣的封閉解中直接得到:
外參數(shù)(旋轉(zhuǎn)和平移)可以由單應(yīng)性條件計(jì)算得到:
上述公式中,λ,M,H,都是求解的得到的作為已知量,r3=r1×r2,這是因?yàn)閞1,r2,r3兩兩正交。
需要小心的是,當(dāng)我們使用真實(shí)的數(shù)據(jù)求解時(shí),將計(jì)算得到的r向量放在一起(R=(r1,r2,r3)),我們并不能得到精確的旋轉(zhuǎn)矩陣R,使得R為正交陣。
為了解決這個(gè)問題,我們常使用強(qiáng)制的方法,即對(duì)R進(jìn)行奇異值分解,R=UDVT,U,V為正交陣,D為對(duì)角陣,如果R是正交陣,那么奇異值分解后的對(duì)角陣D是單位陣,那么我們將單位陣I代替對(duì)角陣D,進(jìn)而重構(gòu)出滿足正交條件的R.
處理透鏡畸變
在前面的工作中,我們總是先忽略透鏡畸變,然后求解得到的系統(tǒng)。如果針孔模型是完美的,另(xp,yp)為點(diǎn)的位置,令(xd,yd)為畸變的位置,那么有:
上述公式中左邊第二行是錯(cuò)誤的,應(yīng)該將X換成Y;
通過下面的替換,可以得到?jīng)]有畸變的標(biāo)定結(jié)果:
就像先前描述的那樣,上述5個(gè)畸變參數(shù):k1,k2,k3,p1,p2,需要3個(gè)角點(diǎn)構(gòu)成的6組方程就可以求解。我們猜測(cè)一下,上述第一個(gè)公式,我們通過前面的計(jì)算已經(jīng)求解出相機(jī)的內(nèi)參數(shù):fx,fy,cx,cy,棋盤平面上角點(diǎn)的坐標(biāo)為世界坐標(biāo),其中X,Y我們可以理解為在其平面上的坐標(biāo),Z是一個(gè)尺度,因?yàn)槲覀冎狼蠼鈫螒?yīng)性矩陣H,也是一個(gè)尺度,所以具體怎么控制,先不用管,我們就可以通過上述公式一求解出xp和yp,xd,yd就是成像儀上角點(diǎn)的真實(shí)位置,那么就可以由xp,yp和xd,yd的點(diǎn)對(duì),帶入到上述的公式二,求可以求解出5個(gè)畸變系數(shù)。
愛華網(wǎng)



