三、致敬“张正友标定”
三、致敬“張正友標(biāo)定”
? ? ? ? ?此處“張正友標(biāo)定”又稱“張氏標(biāo)定”,是指張正友教授于1998年提出的單平面棋盤格的攝像機(jī)標(biāo)定方法。張氏標(biāo)定法已經(jīng)作為工具箱或封裝好的函數(shù)被廣泛應(yīng)用。張氏標(biāo)定的原文為“A Flexible New Technique forCamera Calibration”。此文中所提到的方法,為相機(jī)標(biāo)定提供了很大便利,并且具有很高的精度。從此標(biāo)定可以不需要特殊的標(biāo)定物,只需要一張打印出來的棋盤格。So great! 這樣的方法讓人肅然起敬。所以玉米的這篇博客的題目是:致敬“張氏標(biāo)定”。
? ? ? ? ?當(dāng)然,此博的內(nèi)容也是圍繞著“張氏標(biāo)定”進(jìn)行的,在這里,玉米主要介紹一下,“張氏標(biāo)定”的數(shù)學(xué)思路。因?yàn)闃?biāo)定在整個(gè)基于標(biāo)定攝像機(jī)的三維重建的幾何過程占有最重要最核心的地位。如下圖:
 
? ? ? ? ?從圖中明顯可以看出,標(biāo)定得到的內(nèi)參、外參和畸變系數(shù),是雙目視覺進(jìn)行圖片矯正,攝像機(jī)校正和3D恢復(fù)的基礎(chǔ)。沒有好的標(biāo)定,雙目視覺系統(tǒng)就無法完成3D重建。
? ? ? ? 既然標(biāo)定對(duì)雙目視覺如此重要,我們有必要對(duì)數(shù)學(xué)的深層含義多加理解。以張氏標(biāo)定為例,讓我們挖開工具箱,看看其數(shù)學(xué)本質(zhì)吧。因?yàn)閺埥淌诘恼撐闹袑?duì)標(biāo)定方法的講述是循序漸進(jìn)的,所以玉米在這里將按照張教授論文中的順序,為大家講述一下,張氏標(biāo)定的脈絡(luò)。
1、標(biāo)定平面到圖像平面的單應(yīng)性
? ? ? ? 因?yàn)閺埵蠘?biāo)定是一種基于平面棋盤格的標(biāo)定,所以想要搞懂張氏標(biāo)定,首先應(yīng)該從兩個(gè)平面的單應(yīng)性(homography)映射開始著手。
? ? ? ? 單應(yīng)性(homography):在計(jì)算機(jī)視覺中被定義為一個(gè)平面到另一個(gè)平面的投影映射。首先看一下,圖像平面與標(biāo)定物棋盤格平面的單應(yīng)性。
? ? ? ? 由上兩篇博文中講到的攝像機(jī)模型,肯容易得到:
 
? ? ? ? ?其中m的齊次坐標(biāo)表示圖像平面的像素坐標(biāo)(u,v,1),M的齊次坐標(biāo)表示世界坐標(biāo)系的坐標(biāo)點(diǎn)(X,Y,Z,1)。A[R t]即是上面一篇博客推出的P。R表示旋轉(zhuǎn)矩陣、t表示平移矩陣、S表示尺度因子。A表示攝像機(jī)的內(nèi)參數(shù),具體表達(dá)式如下:
α=f/dx,β=f/dy,因?yàn)橄袼夭皇且?guī)規(guī)矩矩的正方形,γ代表像素點(diǎn)在x,y方向上尺度的偏差。
? ? ? ? ?這里還有一個(gè)“梗兒”,就是S。它只是為了方便運(yùn)算,對(duì)于齊次坐標(biāo),尺度因子不會(huì)改變坐標(biāo)值的。
因?yàn)闃?biāo)定物是平面,所以我們可以把世界坐標(biāo)系構(gòu)造在Z=0的平面上。然后進(jìn)行單應(yīng)性計(jì)算。令Z=0可以將上式轉(zhuǎn)換為如下形式:
 
? ? ? ? ?既然,此變化屬于單應(yīng)性變化。那么我們可以給A[r1 r2 t]一個(gè)名字:單應(yīng)性矩陣。并記H= A[r1 r2 t]。
? ? ? ? ?那么現(xiàn)在就有:
? ? ? ? ?大家可以分析一下,H是一個(gè)三3*3的矩陣,并且有一個(gè)元素是作為齊次坐標(biāo)。因此,H有8個(gè)未知量待解。
(x,y)作為標(biāo)定物的坐標(biāo),可以由設(shè)計(jì)者人為控制,是已知量。(u,v)是像素坐標(biāo),我們可以直接通過攝像機(jī)獲得。對(duì)于一組對(duì)應(yīng)的(x,y)-à(u,v)我們可以獲得兩組方程。
? ? ? ? 現(xiàn)在有8個(gè)未知量需要求解,所以我們至少需要八個(gè)方程。所以需要四個(gè)對(duì)應(yīng)點(diǎn)。四點(diǎn)即可算出,圖像平面到世界平面的單應(yīng)性矩陣H。
? ? ? ? 這也是張氏標(biāo)定采用四個(gè)角點(diǎn)的棋盤格作為標(biāo)定物的一個(gè)原因。
? ? ? ? 在這里,我們可以將單應(yīng)性矩陣寫成三個(gè)列向量的形式,即:
 
2、利用約束條件求解內(nèi)參矩陣A
? ? ? ? 從上面可知,應(yīng)用4個(gè)點(diǎn)我們可以獲得單應(yīng)性矩陣H。但是,H是內(nèi)參陣和外參陣的合體。我們想要最終分別獲得內(nèi)參和外參。所以需要想個(gè)辦法,先把內(nèi)參求出來。然后外參也就隨之解出了。我們可以仔細(xì)的“觀摩”一下下面的式子。
? ? ? ?從中可以得出下面兩個(gè)約束條件,這兩個(gè)約束條件都是圍繞著旋轉(zhuǎn)向量來的。
? ? ? ?1、r1,r2正交 得:r1r2=0。這個(gè)很容易理解,因?yàn)閞1,r2分別是繞x,y軸旋轉(zhuǎn)的。應(yīng)用高中立體幾何中的兩垂直平面上(兩個(gè)旋轉(zhuǎn)向量分別位于y-z和x-z平面)直線的垂直關(guān)系即可輕松推出。
? ? ? ? 2、旋轉(zhuǎn)向量的模為1,即|r1|=|r2|=1。這個(gè)也很容易理解,因?yàn)樾D(zhuǎn)不改變尺度嘛。如果不信可以回到上一篇博客,找到個(gè)方向的旋轉(zhuǎn)矩陣化行列式算一下。
? ? ? ? 通過上面的式子可以將r1,r2代換為h1,h2與A的組合進(jìn)行表達(dá)。即?????? r1=h1A-1,r2=h2A-1.根據(jù)兩約束條件,可以得到下面兩個(gè)式子:
 
? ? ? ? 大家從上面兩個(gè)式子是不是看出一點(diǎn)端倪了。式子中,h1,h2是通過單應(yīng)性求解出來的那么未知量就僅僅剩下,內(nèi)參矩陣A了。內(nèi)參陣A包含5個(gè)參數(shù):α,β,u0,v0,γ。那么如果我們想完全解出這五個(gè)未知量,則需要3個(gè)單應(yīng)性矩陣。3個(gè)單應(yīng)性矩陣在2個(gè)約束下可以產(chǎn)生6個(gè)方程。這樣可以解出全部的五個(gè)內(nèi)參了。大家想一下,我們?cè)鯓硬拍塬@得三個(gè)不同的單應(yīng)性矩陣呢?答案就是,用三幅標(biāo)定物平面的照片。我們可以通過改變攝像機(jī)與標(biāo)定板間的相對(duì)位置來獲得三張不同的照片。(當(dāng)然也可以用兩張照片,但這樣的話就要舍棄掉一個(gè)內(nèi)參了γ=0)
?????? 到這里,大家應(yīng)該就明白我們?cè)趶埵蠘?biāo)定法時(shí)為什么要不斷變換標(biāo)定板的方位了吧。當(dāng)然這只是一個(gè)原因。第二個(gè)原因,玉米會(huì)在講極大似然時(shí)講到。
?????? 下面在對(duì)我們得到的方程做一些數(shù)學(xué)上的變化,這些變化都是簡(jiǎn)單的運(yùn)算變化了,相信大家動(dòng)動(dòng)筆,一算就可以算出。這些變化都是為了運(yùn)算方便的,所以也沒什么物理意義。
首先令:
? ? ? ? 很容易發(fā)現(xiàn)B是一個(gè)對(duì)稱陣,所以B的有效元素只剩下六個(gè)(因?yàn)橛腥龑?duì)對(duì)稱的元素是相等的,所以只要解得下面的6個(gè)元素就可以得到完整的B了),讓這六個(gè)元素構(gòu)成向量b。
 
 
? ? ? ? 接下來在做一步純數(shù)學(xué)化簡(jiǎn):
? ? ? ? 可以計(jì)算得:
? ? ? ? ?利用約束條件可以得到下面,方程組:
? ? ? ? ? 這個(gè)方程組的本質(zhì)和前面那兩個(gè)用h和A組成的約束條件方程組是一樣的。在此重復(fù)一遍解釋:如果我們想完全解出這五個(gè)未知量,則需要3個(gè)單應(yīng)性矩陣。3個(gè)單應(yīng)性矩陣在2個(gè)約束下可以產(chǎn)生6個(gè)方程。這樣可以解出全部的五個(gè)內(nèi)參了。大家想一下,我們?cè)鯓硬拍塬@得三個(gè)不同的單應(yīng)性矩陣呢?答案就是,用三幅標(biāo)定物平面的照片。我們可以通過改變攝像機(jī)與標(biāo)定板間的相對(duì)位置來獲得三張不同的照片。(當(dāng)然也可以用兩張照片,但這樣的話就要舍棄掉一個(gè)內(nèi)參了γ=0)
?????? 通過至少含一個(gè)棋盤格的三幅圖像,應(yīng)用上述公式我們就可以估算出B了。得到B后,我們通過cholesky分解?,就可以輕松地得到攝像機(jī)的內(nèi)參陣A。3、基于內(nèi)參陣估算外參陣
?? ??? 通過上面的運(yùn)算,我們已經(jīng)獲得了攝像機(jī)的內(nèi)參陣。那么對(duì)于外參陣,我們很容易通過下面的公式解得:
? ? ? ?對(duì)上面公式進(jìn)行化簡(jiǎn),可以得到:
 
 
 
? ? ? ? 至此,玉米已經(jīng)將張氏標(biāo)定的主體數(shù)學(xué)框架已經(jīng)講完了。介于篇幅關(guān)系(怕太長(zhǎng)大機(jī)會(huì)讀的昏昏欲睡,哈哈)。但其實(shí)我們做了這么多推導(dǎo),僅僅是為后面的極大似然參數(shù)估計(jì)提供初值。但當(dāng)然這個(gè)初值也是不可或缺的,因?yàn)闆]有這個(gè)初值,就無法估計(jì)出更為準(zhǔn)確的參數(shù)。玉米將張氏標(biāo)定中用于提高標(biāo)定精度的極大似然算法,放到下一篇博客中進(jìn)行講解。
總結(jié)
以上是生活随笔為你收集整理的三、致敬“张正友标定”的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: 图像坐标:我想和世界坐标谈谈(B)
 - 下一篇: SHA256算法可逆吗,SHA256算法