于曉敏
(四川大學(xué)計算機學(xué)院,成都 610065)
隨著數(shù)碼科技的發(fā)展和相關(guān)產(chǎn)品在生活中的應(yīng)用范圍不斷擴大,相機標(biāo)定技術(shù)的重要性日益增加,并且在機器人視覺、虛擬現(xiàn)實等領(lǐng)域相機標(biāo)定有著廣泛的應(yīng)用,特別是對于在特征點稀疏的簡單場景下的相機標(biāo)定有著越來越大的需求。要解決相機標(biāo)定問題,必須通過一些途徑來獲取空間點和圖像點的對應(yīng)關(guān)系,這種對應(yīng)關(guān)系是由空間中相機的位置及其成像的幾何模型所決定,即由相機的外部參數(shù)和內(nèi)部參數(shù)所決定,這些參數(shù)必須由試驗與設(shè)計來確定。
本文針對上述應(yīng)用本文提出一種只需根據(jù)少量信息就能確定相機外部參數(shù)的方法。因為本文的重點是給出一種優(yōu)化策略,所以假設(shè)已經(jīng)通過某些途徑獲取到了相機外參和特征點深度的初值粗略值。常見的相機外參初值獲取方法是5對點法[1]和8對點法[2]。在此初始化的基礎(chǔ)之上利用三角測量[3]來獲得特征點的初始深度。在獲得相機參數(shù)和特征點深度的初始值之后本文根據(jù)相機與點對的幾何關(guān)系來構(gòu)建最小二乘問題對相機外參和特征點深度做第一步優(yōu)化。與其他方法不同的是本文的第二步優(yōu)化不是利用重投影誤差信息,而是利用光度誤差信息。
考慮一個簡單的最小二乘問題:
這里 x∈Rn,f是任意非線性函數(shù),設(shè)它有m維:f(x)∈Rm。如果 f是個數(shù)學(xué)形式上很簡單的函數(shù),則可以令目標(biāo)函數(shù)的導(dǎo)數(shù)為零,然后求解x的最優(yōu)值,但是在本文中使用李代數(shù)來表示相機的旋轉(zhuǎn)與平移,這將使得不能順利的求解這樣一個復(fù)雜的方程。所以本文利用迭代的方法,從一個初始值出發(fā),不斷的更新當(dāng)前的優(yōu)化變量,使目標(biāo)函數(shù)下降。即對于第k次迭代,尋找一個增量Δxk,使得 f(x+Δxk)達到極小值,若Δxk足夠小,則停止,否則,繼續(xù)迭代。
這讓求解導(dǎo)函數(shù)為零的問題變成了一個不斷尋找梯度并下降的過程,直到某個時刻增量非常小,無法再使函數(shù)繼續(xù)下降,目標(biāo)達到了一個極小,整個過程完成。所以整個過程的關(guān)鍵之處就是Δxk如何確定。
本文使用高斯牛頓法來求解增量。它的思想是將f(x)進行一階的泰勒展開,即:
這里J(x)為 f(x)關(guān)于 x的一階導(dǎo)數(shù),實際上是一個的矩陣,也是一個m×n的雅克比矩陣。要求解的變量Δxk由高斯牛頓方程直接給出:J(x)TJ(x) Δxk=-J(x)Tf(x),至此,對于J(x)的求解已經(jīng)成了本文的關(guān)鍵所在。
本文根據(jù)相機外部參數(shù)與標(biāo)定點對之間的幾何關(guān)系[4]提出一種優(yōu)化策略,以此來做第一步優(yōu)化。此次優(yōu)化只針對旋轉(zhuǎn)矩陣R進行優(yōu)化。
如圖1所示,假定某個標(biāo)定參照物上有n個標(biāo)定點G0,G1,…Gn,它們之間的位置關(guān)系是任意的,且是已知的,在本文中它們的初始位置關(guān)系由特征點深度信息的初始值給出。
圖1 相機與點對的幾何關(guān)系
在圖1中C點表示當(dāng)前幀的相機中心,標(biāo)定點Gi,Gj,Gk的初始位置關(guān)系在參考幀中已知。Gq(q =1,2…n)在當(dāng)前幀相機坐標(biāo)系下的正規(guī)化圖像坐標(biāo)[gqx,gqy,1]T是已知的。假設(shè)選取Gi,Gj為待處理點對,則可以得到:
其中表達式R?GiGj表示將向量GiGj由參考幀坐標(biāo)系變換到當(dāng)前幀坐標(biāo)系,R是待優(yōu)化的旋轉(zhuǎn)矩陣。
記:
由式(1)可得:v(x)=0,這里x表示由旋轉(zhuǎn)矩陣組成的向量。當(dāng)然,由于噪音的存在,我們估得的R不一定精確的使式(2)為零,所以更常見的做法是求一個最小二乘問題。按照之前的分析,接下來的需要求出v(x)相對R的雅克比矩陣J(x)用以指導(dǎo)優(yōu)化方向。
由于旋轉(zhuǎn)矩陣R的自身約束,即R∈R3×3且RRT=I,det(R)=1,導(dǎo)致求解上的一些限制,所以本文中將以無約束的李代數(shù)形式來表示旋轉(zhuǎn)。旋轉(zhuǎn)矩陣R對應(yīng)的李代數(shù)是定義在R3上的向量,記作φ。對于每一個φ,都存在一個反對稱矩陣Φ,使得下屬等式成立:φ1,φ1,φ1∈R3。
根據(jù)李代數(shù)φ與旋轉(zhuǎn)矩陣R之間的映射關(guān)系:R=exp(φ∧),則式(2)可寫為:
其中向量φ為φ=[ ]
對于三維向量φ,記它的模長和方向分別為θ和a,于是有 φ=θa,a=[a1,a2,a3]∈R3這里a是一個長度為1的方向向量。
將李代數(shù)φ與旋轉(zhuǎn)矩陣R之間的映射關(guān)系按照泰勒展開可寫為:
經(jīng)計算可得:
為了方便,記:
那么由式(4)(5)(6)可得到:
其中Ai,Bi(i=1,2,3)表示向量A,B的第i個元素。
圖2 投影示意圖
如圖2所示,p1,p2為同一空間點在不同圖像上的投影點,由于誤差的存在,p2的外觀和 p1會有明顯的差別。為了減小這個差別,我們來優(yōu)化相機位姿和空間點的位置,來尋找與 p1更相似的 p2。記e=I1(p1)-I1(p1)為兩個像素的光度誤差,所以優(yōu)化目標(biāo)為:
其中ξ∈R6表示的是變換矩陣T∈R4×4的李代數(shù)形式。能夠做這種優(yōu)化的理由是灰度不變假設(shè),即假設(shè)一個空間點在各個視角下成像的灰度是不變的。為了求解這個優(yōu)化問題,本文關(guān)心的是誤差e關(guān)于相機位姿ξ和空間點P的導(dǎo)數(shù),即相應(yīng)的雅克比矩陣。
為了求解誤差e關(guān)于相機位姿ξ的雅克比矩陣,需要分析它們的導(dǎo)數(shù)關(guān)系,因此使用李代數(shù)上的擾動模型,給 exp(ξ)左乘一個小擾動 exp(δξ),并使用定義在李代數(shù)上的加法,得:
記:
這里q為擾動分量在第二個相機坐標(biāo)系下的坐標(biāo),而u為它的像素坐標(biāo),利用一階泰勒展開,有:
可以看到,一階導(dǎo)數(shù)由于鏈?zhǔn)椒▌t分成3項,而前兩項都是容易計算的,記q=[X ,Y,Z]T,那么有:
假設(shè)空間點P=[X ,Y,Z]T在不同圖像上的投影點為U1和U2,且經(jīng)過歐氏變換之后它的空間坐標(biāo)為P'=[X',Y',Z']T,則光度誤差可表示為:
第二項可表示為:
試驗使用的優(yōu)化庫是g2o,相機的內(nèi)部參數(shù)為:fx=929.992,fy=927.169,cx=671.617,cy=384.836。試驗選取一個特征點較少的場景,如圖3所示。
圖3 試驗場景圖
相機外參的估計及優(yōu)化結(jié)果由表1給出,使用重投影誤差來衡量優(yōu)化精度。
對于空間點的估計及優(yōu)化結(jié)果由圖3給出,試驗中將從深度相機采集的特征點深度與從本文得到的特征點深度進行對比。由于這里的深度值丟失了尺度信息,所以本文比較的是深度信息兩兩之間的比值。任取若干個特征點,記從深度相機采集的特征點深度為di(i=1,2,3…),從本文得到的特征點深度為di'(i=1,2,3…),假設(shè),,結(jié)果如圖4所示。
表1 試驗結(jié)果
圖4 深度估計結(jié)果
本文首先通過其他途徑求出相機位姿及特征點深度的初始粗略值,然后通過兩步優(yōu)化對相機外部參數(shù)和特征點深度進行調(diào)整,以達到較高精度,針對這兩步優(yōu)化,本文分別給出相應(yīng)待優(yōu)化量的雅克比矩陣,用以找迭代的梯度方向,從而達到優(yōu)化效果。從試驗結(jié)果可以看出,即使是清水房這樣的特征點少的簡單場景本文的方法仍能達到較好的效果,并且該方法原理簡明,方便實用。