双目视觉几何框架详解(玉米专栏8篇汇总)
一、圖像坐標(biāo):我想和世界坐標(biāo)談?wù)?A)
玉米竭力用輕松具體的描述來講述雙目三維重建中的一些數(shù)學(xué)問題。希望這樣的方式讓大家以一個輕松的心態(tài)閱讀玉米的《計算機視覺學(xué)習(xí)筆記》雙目視覺數(shù)學(xué)架構(gòu)系列博客。這個系列博客旨在捋順一下已標(biāo)定的雙目視覺中的數(shù)學(xué)主線。數(shù)學(xué)推導(dǎo)是有著幾分枯燥的,但奇妙的計算機視覺世界是建立在嚴(yán)密的數(shù)學(xué)架構(gòu)之上的。所以對數(shù)學(xué)框架的理解是理解雙目視覺的必由之路。不過請大家放心,接下來玉米會以盡量有趣,盡量更接地氣兒的方式,闡釋一下自己對雙目視覺數(shù)學(xué)或者說是投影幾何的理解。
?????? 先來張《計算機視覺:算法與應(yīng)用》中的3D重建示例圖鎮(zhèn)樓!
???????? 好吧,現(xiàn)在言歸正傳,來看看幾何學(xué)上世界是怎樣投影進攝相機里的吧!接下來讓我們來看一下本系列博客的第一“搏”:
圖像坐標(biāo):我想和世界坐標(biāo)談?wù)?A)
首先,我先解釋一下這個題目吧。題目的字面意義是說:圖像坐標(biāo)系想和世界坐標(biāo)系談?wù)劇_@里面包含著兩個問題:
???????? A、談話對象:視覺系統(tǒng)的三大坐標(biāo)系:世界坐標(biāo)系,攝像機坐標(biāo)系和圖像坐標(biāo)系。這是玉米在本文《我想和世界坐標(biāo)談?wù)?(A)》中想要和大家分享的內(nèi)容。其中主要包含:三大坐標(biāo)系的位置、作用和應(yīng)用場景。
???????? B、談話方式:兩個不同的坐標(biāo)系之間該如何溝通呢?玉米將在《我想和世界坐標(biāo)談?wù)?B)》中和大家分享一下剛體變換和透視???????????????? 投影變換。連起兩個坐標(biāo)系之間這不在一個參考系的“世界上最遠的距離”。
好吧,下面讓我們來揭開三大坐標(biāo)系的廬山真面目。
???????? 上圖是三個坐標(biāo)的示意簡圖,通過它大家可以對三個坐標(biāo)有一個直觀的認(rèn)識。下面來看看三個坐標(biāo)系的骨子里藏了什么。
???????? 世界坐標(biāo)系(XW,YW,ZW):其是目標(biāo)物體位置的參考系。除了無窮遠,世界坐標(biāo)可以根據(jù)運算方便與否自由放置。在雙目視覺中世界坐標(biāo)系主要有三個用途:
1、標(biāo)定時確定標(biāo)定物的位置
2、作為雙目視覺的系統(tǒng)參考系,給出兩個攝像機相對世界坐標(biāo)系的關(guān)系,從而求出相機之間的相對關(guān)系
3、作為重建得到三維坐標(biāo)的容器,盛放重建后的物體的三維坐標(biāo)。世界坐標(biāo)系是將看見中物體納入運算的第一站。
??????? 攝像機坐標(biāo)系(XC,YC,ZC):其是攝像機站在自己角度上衡量的物體的坐標(biāo)系。攝像機坐標(biāo)系的原點在攝像機的光心上,z軸與攝像機光軸平行。它是與拍攝物體發(fā)生聯(lián)系的橋頭堡,世界坐標(biāo)系下的物體需先經(jīng)歷剛體變化轉(zhuǎn)到攝像機坐標(biāo)系(旋轉(zhuǎn)和平移),然后再和圖像坐標(biāo)系發(fā)生關(guān)系。它是圖像坐標(biāo)與世界坐標(biāo)之間發(fā)生關(guān)系的紐帶,溝通了世界上最遠的距離。哈哈
???????? 圖像坐標(biāo)系(x,y)米/(u,v)像素?:其是以攝像機拍攝的二維照片為基準(zhǔn)建立的坐標(biāo)系。用于指定物體在照片中的位置。
將(x,y)稱為連續(xù)圖像坐標(biāo)或空間圖像坐標(biāo),將(u,v)稱為離散圖像坐標(biāo)系或者是像素圖像坐標(biāo)系(雖然這樣的稱呼未經(jīng)考證,但更能傳達二者的物理意義)。
??????????(x,y)坐標(biāo)系的原點位于攝像機光軸與成像平面的焦點O’(u0,v0)上,單位為長度單位(米)。(u,v)坐標(biāo)系的原點在圖片的左上角(其實是存儲器的首地址)如上圖所示,單位為數(shù)量單位(個)。(x,y)主要用于表征物體從攝像機坐標(biāo)系向圖像坐標(biāo)系的透視投影關(guān)系。而(u,v)則是實實在在的,我們能從攝像機中得到的真實信息。
(x,y)與(u,v)存在如下轉(zhuǎn)換關(guān)系:
????????? dx代表x軸方向一個像素的寬度,dy代表y軸方向上一個像素的寬度。dx、dy為攝像機的內(nèi)參數(shù)。(u0,v0)稱為圖像平面的主點,也是攝像機的內(nèi)參數(shù)。其實相當(dāng)于對x軸和y軸的離散化。其可以運用齊次坐標(biāo),將上式寫成矩陣形式,如下:
?
????? (1)式運用了齊次坐標(biāo),初學(xué)者可能會感到有些迷惑。大家會問:怎樣將普通坐標(biāo)轉(zhuǎn)換為齊次坐標(biāo)呢?齊次坐標(biāo)能帶來什么好處呢?
???????? 玉米在這里對齊次坐標(biāo)做一個通俗的解釋。此處只講怎么將普通坐標(biāo)改寫為齊次坐標(biāo)及為什么引入齊次坐標(biāo)。這里只做一個通俗但不太嚴(yán)謹(jǐn)?shù)谋硎觥Aη蠛唵蚊髁恕a槍R次坐標(biāo)的嚴(yán)謹(jǐn)?shù)募償?shù)學(xué)推導(dǎo),可參見“周興和版的《高等幾何》---1.3拓廣平面上的齊次坐標(biāo)”。玉米曾詳細(xì)讀過《高等幾何》這本書,但覺得離計算機視覺有點遠,是講純數(shù)學(xué)的投影關(guān)系的,較為生澀難懂。
??????? 齊次坐標(biāo)可以理解為在原有坐標(biāo)后面加一個“小尾巴”。將普通坐標(biāo)轉(zhuǎn)換為齊次坐標(biāo),通常就是在增加一個維度,這個維度上的數(shù)值為1。如圖像坐標(biāo)系(u,v)轉(zhuǎn)換為(u,v,1)一樣。對于無窮遠點,小尾巴為0。注意,給零向量增加小尾巴,數(shù)學(xué)上無意義。
那么,為什么計算機視覺在坐標(biāo)運算時要加上這個“小尾巴”呢?
??????? 玉米看來有兩點原因:
???????? 1、 將投影平面擴展到無窮遠點。如對消隱點(vanishing point)的描述。
????????? 2、 使得計算更加規(guī)整
???????? 如式(1)如果用普通坐標(biāo)來表達的話,會是下面的樣子:
這樣的運算形式會給后與運算帶來一定的麻煩,所以齊次坐標(biāo)是一個更好的選擇。
????????? 齊次坐標(biāo)還有一個重要的性質(zhì),伸縮不變性。即:設(shè)齊次坐標(biāo)M,則αM=M。
玉米才疏學(xué)淺,筆記中如有紕漏指出,希望大家不吝指出。玉米在這里拜謝啦!
二、圖像坐標(biāo):我想和世界坐標(biāo)談?wù)?B)
???????? 玉米將在這篇博文中,對圖像坐標(biāo)與世界坐標(biāo)的這場對話中涉及的第二個問題:談話方式,進行總結(jié)。世界坐標(biāo)是怎樣變換進攝像機,投影成圖像坐標(biāo)的呢?
??????? 玉米做了一個簡單的圖示,在這里做一個提綱。圖中顯示,世界坐標(biāo)系通過剛體變換到達攝像機坐標(biāo)系,然后攝像機坐標(biāo)系通過透視投影變換到達圖像坐標(biāo)系。可以看出,世界坐標(biāo)與圖像坐標(biāo)的關(guān)系建立在剛體變換和透視投影變換的基礎(chǔ)上。為了獎勵剛體變和透視投影變換溝通了“世界上最遠的距離”,玉米在圖上獎勵了他們兩朵小紅花。哈哈
??????? 首先,讓我們來看一下剛體變換是如何將世界坐標(biāo)系與圖像坐標(biāo)系聯(lián)系起來的吧。這里,先對剛體變換做一個介紹:
??????? 剛體變換(regidbody motion):三維空間中, 當(dāng)物體不發(fā)生形變時,對一個幾何物體作旋轉(zhuǎn),?平移的運動,稱之為剛體變換。
因為世界坐標(biāo)系和攝像機坐標(biāo)都是右手坐標(biāo)系,所以其不會發(fā)生形變。我們想把世界坐標(biāo)系下的坐標(biāo)轉(zhuǎn)換到攝像機坐標(biāo)下的坐標(biāo),如下圖所示,可以通過剛體變換的方式。空間中一個坐標(biāo)系,總可以通過剛體變換轉(zhuǎn)換到另外一個個坐標(biāo)系的。轉(zhuǎn)一轉(zhuǎn),走一走,就到另外一個坐標(biāo)系下了。以前可能是面朝大海,經(jīng)過平移旋轉(zhuǎn),最終可能只能面朝冰山了,哈哈
???????? 下面讓我來看一下,二者之間剛體變化的數(shù)學(xué)表達。
???????? 其中,XC代表攝像機坐標(biāo)系,X代表世界坐標(biāo)系。R代表旋轉(zhuǎn),T代表平移。R、T與攝像機無關(guān),所以稱這兩個參數(shù)為攝像機的外參數(shù)(extrinsic parameter)可以理解為兩個坐標(biāo)原點之間的距離,因其受x,y,z三個方向上的分量共同控制,所以其具有三個自由度。
???????? R則為分別繞XYZ三軸旋轉(zhuǎn)的效果之和。如下面所示:
???????? R=r1*r2*r3.其由三個方向的θ控制,故具有三個自由度。
?? 好了,剛體變換就講完了。大家應(yīng)該都了解,世界坐標(biāo)系到攝像機坐標(biāo)系之間的轉(zhuǎn)換過程了吧。
????????? 接下來,讓我們看看攝像機坐標(biāo)下的坐標(biāo)如何投影到圖像坐標(biāo)系下,最終變?yōu)檎掌械囊粋€像素。這其中包含兩個過程:一是從攝像機坐標(biāo)到“空間圖像坐標(biāo)”(x,y)所發(fā)生的透視投影;二是從“連續(xù)圖像坐標(biāo)”到“離散圖像坐標(biāo)”(u,v)。后者我們已經(jīng)在第一篇博文中解釋過。所以在這里,主要介紹一下透視投影。
透視投影(perspective projection):?用中心投影法將形體投射到投影面上,從而獲得的一種較為接近視覺效果的單面投影圖。有一點像皮影戲。它符合人們心理習(xí)慣,即離視點近的物體大,離視點遠的物體小,不平行于成像平面的平行線會相交于消隱點(vanish point)。
???????? 啰嗦這么多,其實大家看看示意圖,看看公式,秒懂。
???????? 以圖中B(XB,YB)點為例,在小孔成像攝像機模型下(幾何分析的最常用模型)。這里的f為攝像機的焦距,其屬于攝像機的內(nèi)參數(shù)(intrinsic parameter)。其在成像平面上的投影點b(xb,yb)的坐標(biāo)利用簡單的相似三角形比例關(guān)系很容易求出:
???????? 上面兩式也闡明了攝像機坐標(biāo)與圖像坐標(biāo)之間的透視投影關(guān)系。
好吧,現(xiàn)在玉米已經(jīng)把圖像坐標(biāo)與世界坐標(biāo)之間的這場對話所需經(jīng)歷的三個波折的過程加以了解釋。即:剛體變換、透視投影、(x,y)換(u,v)(ps.這個在上一篇博文中講過)。接下來玉米用一張圖把三個過程連接起來。實現(xiàn)從世界坐標(biāo)(X,Y,Z)到(u,v)之間的轉(zhuǎn)換。讓圖像坐標(biāo)與世界坐標(biāo)直接對話。
???????? 下圖中的轉(zhuǎn)換關(guān)系,都是用齊次坐標(biāo)表達的,大家會發(fā)現(xiàn)這樣的表達非常整潔。
???????? 其實這張圖顯示的過程還有一個名字:攝像機模型(camera model)。其實也就是攝像機的幾何模型了。
???????? 將三者相乘,可以把這三個過程和在一起,寫成一個矩陣:
???????? P就是世界坐標(biāo)到圖像坐標(biāo)的直接聯(lián)系人,P就表示了一個投影相機,有下面公式:
???????? 注意在表示齊次坐標(biāo)時,需要在符號上面加個小帽子。除去齊次坐標(biāo)控制位P23,P具有11個自由度。
(世界坐標(biāo)系 ---剛體變換--->攝像機坐標(biāo)系---透視投影--->圖像坐標(biāo)---離散化--->數(shù)字圖像坐標(biāo))
??????? 攝像機模型及其中涉及的坐標(biāo)系等,是弄清3D重建幾何框架的基礎(chǔ)。可以把它們視為基本運算關(guān)系。后面對于三維重建幾何框架的推導(dǎo),都是要用到三個基本坐標(biāo)系和攝像機模型的。
???????? 到這里玉米就順利搭建起了圖像坐標(biāo)與世界坐標(biāo)間的這場對話。如有紕漏還請大家擔(dān)待,并指正!
三、致敬“張正友標(biāo)定”
???????? 此處“張正友標(biāo)定”又稱“張氏標(biāo)定”,是指張正友教授于1998年提出的單平面棋盤格的攝像機標(biāo)定方法。張氏標(biāo)定法已經(jīng)作為工具箱或封裝好的函數(shù)被廣泛應(yīng)用。張氏標(biāo)定的原文為“A Flexible New Technique forCamera Calibration”。此文中所提到的方法,為相機標(biāo)定提供了很大便利,并且具有很高的精度。從此標(biāo)定可以不需要特殊的標(biāo)定物,只需要一張打印出來的棋盤格。So great! 這樣的方法讓人肅然起敬。所以玉米的這篇博客的題目是:致敬“張氏標(biāo)定”。
???????? 當(dāng)然,此博的內(nèi)容也是圍繞著“張氏標(biāo)定”進行的,在這里,玉米主要介紹一下,“張氏標(biāo)定”的數(shù)學(xué)思路。因為標(biāo)定在整個基于標(biāo)定攝像機的三維重建的幾何過程占有最重要最核心的地位。如下圖:
???????? 從圖中明顯可以看出,標(biāo)定得到的內(nèi)參、外參和畸變系數(shù),是雙目視覺進行圖片矯正,攝像機校正和3D恢復(fù)的基礎(chǔ)。沒有好的標(biāo)定,雙目視覺系統(tǒng)就無法完成3D重建。
??????? 既然標(biāo)定對雙目視覺如此重要,我們有必要對數(shù)學(xué)的深層含義多加理解。以張氏標(biāo)定為例,讓我們挖開工具箱,看看其數(shù)學(xué)本質(zhì)吧。因為張教授的論文中對標(biāo)定方法的講述是循序漸進的,所以玉米在這里將按照張教授論文中的順序,為大家講述一下,張氏標(biāo)定的脈絡(luò)。
1、標(biāo)定平面到圖像平面的單應(yīng)性
??????? 因為張氏標(biāo)定是一種基于平面棋盤格的標(biāo)定,所以想要搞懂張氏標(biāo)定,首先應(yīng)該從兩個平面的單應(yīng)性(homography)映射開始著手。
??????? 單應(yīng)性(homography):在計算機視覺中被定義為一個平面到另一個平面的投影映射。首先看一下,圖像平面與標(biāo)定物棋盤格平面的單應(yīng)性。
??????? 由上兩篇博文中講到的攝像機模型,肯容易得到:
???????? 其中m的齊次坐標(biāo)表示圖像平面的像素坐標(biāo)(u,v,1),M的齊次坐標(biāo)表示世界坐標(biāo)系的坐標(biāo)點(X,Y,Z,1)。A[R t]即是上面一篇博客推出的P。R表示旋轉(zhuǎn)矩陣、t表示平移矩陣、S表示尺度因子。A表示攝像機的內(nèi)參數(shù),具體表達式如下:
α=f/dx,β=f/dy,因為像素不是規(guī)規(guī)矩矩的正方形,γ代表像素點在x,y方向上尺度的偏差。
???????? 這里還有一個“梗兒”,就是S。它只是為了方便運算,對于齊次坐標(biāo),尺度因子不會改變坐標(biāo)值的。
因為標(biāo)定物是平面,所以我們可以把世界坐標(biāo)系構(gòu)造在Z=0的平面上。然后進行單應(yīng)性計算。令Z=0可以將上式轉(zhuǎn)換為如下形式:
???????? 既然,此變化屬于單應(yīng)性變化。那么我們可以給A[r1 r2 t]一個名字:單應(yīng)性矩陣。并記H= A[r1 r2 t]。
???????? 那么現(xiàn)在就有:
???????? 大家可以分析一下,H是一個三3*3的矩陣,并且有一個元素是作為齊次坐標(biāo)。因此,H有8個未知量待解。
(x,y)作為標(biāo)定物的坐標(biāo),可以由設(shè)計者人為控制,是已知量。(u,v)是像素坐標(biāo),我們可以直接通過攝像機獲得。對于一組對應(yīng)的(x,y)-à(u,v)我們可以獲得兩組方程。
??????? 現(xiàn)在有8個未知量需要求解,所以我們至少需要八個方程。所以需要四個對應(yīng)點。四點即可算出,圖像平面到世界平面的單應(yīng)性矩陣H。
??????? 這也是張氏標(biāo)定采用四個角點的棋盤格作為標(biāo)定物的一個原因。
??????? 在這里,我們可以將單應(yīng)性矩陣寫成三個列向量的形式,即:
2、利用約束條件求解內(nèi)參矩陣A
??????? 從上面可知,應(yīng)用4個點我們可以獲得單應(yīng)性矩陣H。但是,H是內(nèi)參陣和外參陣的合體。我們想要最終分別獲得內(nèi)參和外參。所以需要想個辦法,先把內(nèi)參求出來。然后外參也就隨之解出了。我們可以仔細(xì)的“觀摩”一下下面的式子。
?????? 從中可以得出下面兩個約束條件,這兩個約束條件都是圍繞著旋轉(zhuǎn)向量來的。
?????? 1、r1,r2正交 得:r1r2=0。這個很容易理解,因為r1,r2分別是繞x,y軸旋轉(zhuǎn)的。應(yīng)用高中立體幾何中的兩垂直平面上(兩個旋轉(zhuǎn)向量分別位于y-z和x-z平面)直線的垂直關(guān)系即可輕松推出。
??????? 2、旋轉(zhuǎn)向量的模為1,即|r1|=|r2|=1。這個也很容易理解,因為旋轉(zhuǎn)不改變尺度嘛。如果不信可以回到上一篇博客,找到個方向的旋轉(zhuǎn)矩陣化行列式算一下。
??????? 通過上面的式子可以將r1,r2代換為h1,h2與A的組合進行表達。即?????? r1=h1A-1,r2=h2A-1.根據(jù)兩約束條件,可以得到下面兩個式子:
??????? 大家從上面兩個式子是不是看出一點端倪了。式子中,h1,h2是通過單應(yīng)性求解出來的那么未知量就僅僅剩下,內(nèi)參矩陣A了。內(nèi)參陣A包含5個參數(shù):α,β,u0,v0,γ。那么如果我們想完全解出這五個未知量,則需要3個單應(yīng)性矩陣。3個單應(yīng)性矩陣在2個約束下可以產(chǎn)生6個方程。這樣可以解出全部的五個內(nèi)參了。大家想一下,我們怎樣才能獲得三個不同的單應(yīng)性矩陣呢?答案就是,用三幅標(biāo)定物平面的照片。我們可以通過改變攝像機與標(biāo)定板間的相對位置來獲得三張不同的照片。(當(dāng)然也可以用兩張照片,但這樣的話就要舍棄掉一個內(nèi)參了γ=0)
?????? 到這里,大家應(yīng)該就明白我們在張氏標(biāo)定法時為什么要不斷變換標(biāo)定板的方位了吧。當(dāng)然這只是一個原因。第二個原因,玉米會在講極大似然時講到。
?????? 下面在對我們得到的方程做一些數(shù)學(xué)上的變化,這些變化都是簡單的運算變化了,相信大家動動筆,一算就可以算出。這些變化都是為了運算方便的,所以也沒什么物理意義。
首先令:
??????? 很容易發(fā)現(xiàn)B是一個對稱陣,所以B的有效元素只剩下六個(因為有三對對稱的元素是相等的,所以只要解得下面的6個元素就可以得到完整的B了),讓這六個元素構(gòu)成向量b。
??????? 接下來在做一步純數(shù)學(xué)化簡:
??????? 可以計算得:
???????? 利用約束條件可以得到下面,方程組:
????????? 這個方程組的本質(zhì)和前面那兩個用h和A組成的約束條件方程組是一樣的。在此重復(fù)一遍解釋:如果我們想完全解出這五個未知量,則需要3個單應(yīng)性矩陣。3個單應(yīng)性矩陣在2個約束下可以產(chǎn)生6個方程。這樣可以解出全部的五個內(nèi)參了。大家想一下,我們怎樣才能獲得三個不同的單應(yīng)性矩陣呢?答案就是,用三幅標(biāo)定物平面的照片。我們可以通過改變攝像機與標(biāo)定板間的相對位置來獲得三張不同的照片。(當(dāng)然也可以用兩張照片,但這樣的話就要舍棄掉一個內(nèi)參了γ=0)
?????? 通過至少含一個棋盤格的三幅圖像,應(yīng)用上述公式我們就可以估算出B了。得到B后,我們通過cholesky分解 ,就可以輕松地得到攝像機的內(nèi)參陣A。
3、基于內(nèi)參陣估算外參陣
?????? 通過上面的運算,我們已經(jīng)獲得了攝像機的內(nèi)參陣。那么對于外參陣,我們很容易通過下面的公式解得:
?????? 對上面公式進行化簡,可以得到:
??????? 至此,玉米已經(jīng)將張氏標(biāo)定的主體數(shù)學(xué)框架已經(jīng)講完了。介于篇幅關(guān)系(怕太長大機會讀的昏昏欲睡,哈哈)。但其實我們做了這么多推導(dǎo),僅僅是為后面的極大似然參數(shù)估計提供初值。但當(dāng)然這個初值也是不可或缺的,因為沒有這個初值,就無法估計出更為準(zhǔn)確的參數(shù)。玉米將張氏標(biāo)定中用于提高標(biāo)定精度的極大似然算法,放到下一篇博客中進行講解。
還是老話:玉米才疏學(xué)淺,講解之中難免有紕漏,請大家諒解,并指正。
四、極大似然參數(shù)估計
此篇博文,玉米將和大家分享一下“張氏標(biāo)定”除幾何推導(dǎo)外的另外一大精髓:參數(shù)估計。
???????? 張教授在大作“A Flexible New Technique for Camera Calibration”中的原話如下:” The above solution is obtained through minimizing an algebraic distancewhich is not physically meaningful. We can refine it through maximum likelihoodinference”.意思是:上面的幾何推導(dǎo)僅僅是純代數(shù)上的擬合,沒有物理意義。下面讓我們通過極大似然理論對得到的結(jié)果進行改善。
?????? 順著張教授的意思,玉米先在這里為大家從概念上講述一下極大似然估計。
極大似然估計是一種估計總體未知參數(shù)的方法。它主要用于點估計問題。所謂點估計是指用一個估計量的觀測值來估計未知參數(shù)的真值。說穿了就一句話:就是在參數(shù)空間中選取使得樣本取得觀測值的概率最大的參數(shù)。
?????? 我們定義似然函數(shù):
?????? 總體分布為離散型的:(p是已知的分布律)
??????? 總體分布為連續(xù)性的:(f為概率密度函數(shù))
??????? 極大似然法就是在的可取范圍內(nèi),挑選出來的使L達到最大的未知參數(shù)的估計值。
???????? 如果在內(nèi):,那么就稱為極大似然估計值。
列了這么一大圈兒概念,估計大家看的都昏昏入睡了。玉米在這里用通俗點兒的方式解釋一下極大似然估計:
??????? 對很多實驗,我們可以觀察到樣本,但影響樣本的參數(shù)卻是未知的。那我們就得對樣本進行估計。既然我們要去估計,那么就想要估計的準(zhǔn)。極大似然法就只在概率分布的觀念下,指導(dǎo)我們估計的更準(zhǔn)的方法。現(xiàn)實世界中,存在著一條普遍規(guī)律:與現(xiàn)實相差越遠的概率越小。這就相當(dāng)于人群中,非主流總是比主流要少一樣,偏差大的總是占少數(shù)。所以,可能發(fā)生的概率越大就會越接近真實值。極大似然法就是應(yīng)用這種思想,認(rèn)為可能性最大的就是最優(yōu)的估計值。即極大似然估計值就是最接近真實值的參數(shù)值。
那么,極大似然為什么有這么一個別致的名字呢?什么是似然呢?是因為估計值不是隨機變量,所以不能把它的可能性稱為概率,那么數(shù)學(xué)家們就想了這樣(likelihood)一個名字來代表可能性。
?????? 極大似然法的一些概念上的問題玉米就講到這里了。下面然玉米帶這大家分析一個具體問題:張教授在張氏標(biāo)定法中所用的極大似然估計。
?????? 首先來看一下,為什么標(biāo)定的內(nèi)外參數(shù)可以用極大似然法進行估計:
?????? 因為我們是假定圖像上的角點是被噪聲干擾的,且我們認(rèn)為這些噪聲是高斯噪聲。那么對于噪聲的幅度就是給觀測值造成的誤差。但高斯噪聲的概率密度我們是已知的,所以我們可以用前面所述的極大似然估計的思想去“猜”真值。
?????? 那么接下來我們就需要構(gòu)造一個似然函數(shù),然后尋找其最大值了。張教授在文章中直接略過推導(dǎo),直接給出了公式:
說當(dāng)此式取得最小值時,就是參數(shù)的最大似然估計值。
?????? 玉米在這里為大家講一下自己的理解:
?????? 設(shè),角點附近的噪聲服從高斯分布
?????? 則:角點mij的樣本值服從如下,概率密度函數(shù):
?????? 現(xiàn)在構(gòu)造,似然函數(shù):
??????? 現(xiàn)在讓L取得最大值,則可令下式最小:
??????? 那么怎么令上面這個目標(biāo)函數(shù)達到最小值呢,張氏標(biāo)定法運用了可以用來解決多參數(shù)非線性系統(tǒng)優(yōu)化問題的Levenberg-Marquardt算法。對于該方法,詳細(xì)的介紹大家可以參照《The levenberg-marquardt algorithm, implementation andtheory》一文進行深入了解。這里給出下載本文的鏈接:
http://link.springer.com/chapter/10.1007%2FBFb0067700
???????? 那么張氏標(biāo)定法在不考慮鏡頭畸變的情況下的,獲取攝像機內(nèi)外參數(shù)的數(shù)理推導(dǎo)過程。玉米就為大家講到這里了。下面一篇博文,玉米會給大家分析一下,張氏標(biāo)定法是怎樣分析攝像機的非線性畸變的。
還是老話:玉米才疏學(xué)淺,講解之中難免有紕漏,請大家諒解,并指正。
五、畸變矯正
這篇博文所要講述的內(nèi)容,是標(biāo)定的主要用途之一:矯正攝像機的畸變。對于圖像畸變矯正的方法,張正友教授也在其大作“A Flexible New Technique forCamera Calibration”中給出。
? ? ? ? ?玉米在這里先為大家介紹一下,攝像機畸變主要有哪幾種以及這些討厭的畸變從何而來。
攝像機畸變主要包含:鏡像畸變、切向畸變。玉米在這里分別講述一下,并引用一些圖片,使大家對他們有一個直觀的認(rèn)識。
? ? ? ? ?1.徑向畸變:產(chǎn)生原因是光線在遠離透鏡中心的地方比靠近中心的地方更加彎曲徑向畸變主要包含桶形畸變和枕形畸變兩種。下面兩幅圖是這兩種畸變的示意:
? ? ? ? ? 它們在真實照片中是這樣的:
? ? ? ? ? ?2.切向畸變:產(chǎn)生的原因透鏡不完全平行于圖像平面,這種現(xiàn)象發(fā)生于成像儀被粘貼在攝像機的時候。下面圖片來自于《學(xué)習(xí)opencv》p413。
? ? ? ? ? 畸變矯正,首先應(yīng)該知道畸變系數(shù),然后做與畸變相反的變換,消除畸變。
? ? ? ? ? 張氏標(biāo)定法中只關(guān)注徑向畸變。我們是按照張氏標(biāo)定,計算畸變系數(shù)的。那么,下面讓我們來看一下徑向畸變的數(shù)學(xué)表達。
? ? ? ? ? 因為在實際情況下,徑向畸變較小,所以其可以用主點(principle point)周圍的泰勒級數(shù)展開的前幾項進行描述。張氏標(biāo)定法,利用前兩項來確定徑向畸變的畸變系數(shù)。數(shù)學(xué)表達式如下:
其中,代表理想無畸變的像素坐標(biāo),代表實際徑像畸變的情況下的像素坐標(biāo),代表主點,代表理想無畸變時的連續(xù)圖像坐標(biāo),代表實際徑像畸變的情況下的連續(xù)圖像坐標(biāo)。K1,k2代表前兩階的畸變參數(shù)。。
???????? 那么對于圖像上的任意一點,我們有兩個個等式。化成矩陣形式:
? ? ? ? 通過前面兩篇博文所介紹的內(nèi)容,求得的攝像機模型,我們可以計算出(可通過攝像機模型直接解出)、(與是否畸變無關(guān),直接在已求得的內(nèi)參陣中得到)、(即直接讀取的有畸變的像素坐標(biāo)),(由攝像機模型可以通過物體的世界坐標(biāo)點解出)。那么,兩個方程兩個未知數(shù),我們用一點就可以求的徑向畸變了。因為我們有n張圖片,每張圖片上有m個點,所以我們可以得到2mn個等式。運用最小二乘法對結(jié)果進行優(yōu)化。可用下式解徑向畸變k=[k1,k2]。
其中,D等式左邊的方程的系數(shù)矩陣,d是等式右邊的有畸變的像素坐標(biāo)與無像素坐標(biāo)之差構(gòu)成的矩陣。有上式,一步到位,計算出畸變系數(shù)。
?????? 但是,但是,大家先別急。我們的參數(shù)求解之路還沒有結(jié)束。為了使標(biāo)定得到的估算實際的、存在徑向畸變的攝像機參數(shù)。我們需要把,剛剛求解得到的畸變參數(shù),連同前面得到的理想無畸變條件下的內(nèi)外參數(shù)一起,進行極大似然估計。
?????? 這里的極大似然估計方法與上一篇博文《極大似然參數(shù)估計》相同,玉米在這里就不在贅述。
依然是以最小化下列函數(shù)為目標(biāo),只不過此次參數(shù)估計中又多加了k1,k2:
? ? ? ? 然后,仍然用Levenberg-Marquardt算法進行計算。最終就得到了,我們想要在考慮畸變情況下,攝像機的參數(shù)。
張氏標(biāo)定,大功告成!
? ? ? ?下面讓我們矯正畸變:? ? ? ? 就是這樣一個簡單的公式,就完成了畸變矯正。代表矯正畸變后的像素坐標(biāo),代表實際徑像畸變的情況下的圖像的像素坐標(biāo)。
? ? ? ? 最后給大家展示兩幅圖,讓大家看一下畸變矯正的成果:
? ? ? ? ? 這就是張氏標(biāo)定帶給我們的第一個直觀的好處,后面還有兩個大好處,玉米將為您介紹。
? ? ? ? ? 玉米才疏學(xué)淺,懇請請大家批評指正!
六、張正友標(biāo)定法小結(jié)
????? 這一博文,是玉米后補上的。因為覺得前面用了三篇博文來描述張氏標(biāo)定法,略顯散亂。在這里總結(jié)一下,使條理清晰一點。另外關(guān)于張氏標(biāo)定所得參數(shù)也還有兩點需要澄清。下面這個總結(jié),其實也是在“A Flexible New Technique forCamera Calibration”中出現(xiàn)的。
一、張氏標(biāo)定的過程:
?????? 1.????? 打印一張棋盤格,把它貼在一個平面上,作為標(biāo)定物。
?????? 2.????? 通過調(diào)整標(biāo)定物或攝像機的方向,為標(biāo)定物拍攝一些不同方向的照片。
?????? 3.????? 從照片中提取特征點(如角點)。
?????? 4.????? 估算理想無畸變的情況下,五個內(nèi)參和所有外參。
?????? 5.????? 應(yīng)用最小二乘法估算。實際存在徑向畸變下的畸變系數(shù)。
?????? 6.????? 極大似然法,優(yōu)化估計,提升估計精度。
???????? 通過這樣的過程,我們就獲得了具有高估計精度的五個內(nèi)參,三個外參和兩個畸變系數(shù)。利用這些信息,我們可以進行畸變矯正、圖像校正和最終的三維信息恢復(fù)。
二、以下是對于張氏標(biāo)定求得的內(nèi)參,需要注意的一點:
???????? 通過張氏標(biāo)定,我們并不能得到:焦距(f)和像素的物理尺寸(sx,sy)兩個參數(shù)。因為我們在求解內(nèi)參陣A時,求解出的是α和β。
α=f/ sx,β= f/ sy?。分別代表焦距長度上,x軸和y軸像素的個數(shù)。
??????? 雖然,沒有求得焦距,但這并不影響,我們在三維坐標(biāo)恢復(fù)時,進行三角運算。因為彼時,我們的計算中用到的也是α和β。
?????? 大家可能會有疑問,既然我們無法得到焦距(f)和像素的物理尺寸(sx,sy)兩個參數(shù)。那么在opencv中,調(diào)用的cvCalibrateCamera2時返回的參數(shù)中是包含焦距(f)的。Opencv的這個函數(shù)也是用了張氏標(biāo)定法。為什么可以得到f呢?
?????? 答案是這條opencv函數(shù)對內(nèi)參陣做了簡化,其認(rèn)為γ=0即像素的物理尺寸(sx,sy)兩個參數(shù)相等。然后統(tǒng)一約掉物理尺寸s。得到的B陣如下:
?????? 這樣我們就可以解出f了。
?????? 張氏標(biāo)定的精確度可達到0.5個像素,這樣的指標(biāo)已經(jīng)可以滿足絕大多數(shù)的應(yīng)用了。所以如此簡單的方法,得到了這么高的精度。這樣的方法是值得人們膜拜的。在此,在次向張正友教授致敬!
?????? 在此,玉米又對張氏標(biāo)定法進行了一個總結(jié)。張氏標(biāo)定的原理分析就到此為止了。但是它的作用還會延續(xù)到下面兩篇博文中。
?????? 玉米才疏學(xué)淺,文中如有紕漏,請大家批評指正。
七、立體標(biāo)定與立體校正
??????? 這篇博文中,讓玉米和大家一起了解一下,張氏標(biāo)定是怎樣過渡到立體標(biāo)定的?在這里主要以雙目立體視覺進行分析。對于雙目立體視覺,我們有兩個攝像頭。它們就像人的一雙眼睛一樣,從不同的方向看世界。兩只眼睛中的圖像的視差,讓我們對世界有了三維的認(rèn)識。
??????? 那么,想要知道視差,首先應(yīng)該知道雙目視覺系統(tǒng)中兩個攝像頭之間的相對位置關(guān)系。我們可以通過同時對兩個攝像頭進行標(biāo)定,分別得到二者相對同一坐標(biāo)系的旋轉(zhuǎn)矩陣和平移矩陣。獲得這兩個矩陣的過程,就是立體標(biāo)定的過程。也即是:從張氏標(biāo)定走向立體標(biāo)定!
?????? 兩攝像頭之間的旋轉(zhuǎn)矩陣和平移矩陣可以由下式求出:
?????? 其中,R為兩攝像頭間的旋轉(zhuǎn)矩陣,T為兩攝像頭間的平移矩陣。Rr為右攝像頭經(jīng)過張氏標(biāo)定得到的相對標(biāo)定物的旋轉(zhuǎn)矩陣,Tr為右攝像頭通過張氏標(biāo)定得到的相對標(biāo)定物的平移向量。Rl為左攝像頭經(jīng)過張氏標(biāo)定得到的相對相同標(biāo)定物的旋轉(zhuǎn)矩陣,Tl為左攝像頭經(jīng)過張氏標(biāo)定得到的相對相同標(biāo)定物的平移向量。
????? 兩個式子是可以通過數(shù)學(xué)代換推導(dǎo)來的。但玉米覺得對這樣有明顯物理意義并且空間過程簡單的計算式。物理上的空間想象,比純代數(shù)代換,要生動的多。并且有利于大家揣摩整個物理過程。
????? 在玉米眼里,這兩個式子是這樣的:
????? 對于R,首先用T把左攝像機坐標(biāo)系平移到右攝像機坐標(biāo)系上(即兩坐標(biāo)系遠點重合)。然后在同一參考系下的兩個旋轉(zhuǎn)矩陣相乘,表示世界坐標(biāo)先向右旋轉(zhuǎn)到Rr?,再向左旋轉(zhuǎn)Rl。那么兩次旋轉(zhuǎn)后得到的旋轉(zhuǎn),就是有攝像機旋轉(zhuǎn)到左攝像機所需的旋轉(zhuǎn)矩陣R。
????? 對于T,那就更容易理解了,先用R對左坐標(biāo)系旋轉(zhuǎn)一下,把左右兩攝像機調(diào)成平行,然后直接平移向量相減,即得到。兩攝像機之間的平移向量T。
????? 上面求得的R和T就是立體標(biāo)定得到的參數(shù)了。
????? 那么運用的立體標(biāo)定所得的參數(shù)了,下一步我們該做什么呢?答案是:立體校正。
????? 在介紹立體校正的具體方法之前,讓我們來看一下,為什么要進行立體校正?
????? 因為當(dāng)兩個圖像平面是完全共面行對準(zhǔn)時,計算立體視差是最簡單的。但是,在現(xiàn)實的雙目立體視覺系統(tǒng)中,是不存在完全的共面行對準(zhǔn)的兩個攝像機圖像平面的。所以我們要進行立體校正。立體校正的目的就是,把實際中非共面行對準(zhǔn)的兩幅圖像,校正成共面行對準(zhǔn)。如下面示意圖所示。(共面行對準(zhǔn)是指:兩攝像機圖像平面在同一平面上,且同一點投影到兩個攝像機圖像平面時,應(yīng)該在兩個像素坐標(biāo)系的同一行)
有了上述鋪墊,下面讓玉米給大家陳述一下基于立體標(biāo)定所獲參數(shù)的立體校正的數(shù)學(xué)原理,或者說是幾何原理。但玉米在這里,主要和大家分享一下,如此校正的物理意義。
???????? 立體校正應(yīng)該分兩步走:
???????? 1、 將兩個圖像平面拉回同一平面。
???????? 這一步,該怎么做呢?玉米相信,經(jīng)過這么多鋪墊,大家應(yīng)該早就心里有數(shù)了。這一步很簡單。可以這樣:兩個平面在方向上??????????? 之間不是相差一個旋轉(zhuǎn)矩陣R嗎,那么我們讓兩個相機個旋轉(zhuǎn)一半,但需注意二者的旋轉(zhuǎn),應(yīng)該是反向的。如下式所示:
???????? 上面的這個公式是玉米根據(jù)物理意義自己總結(jié)的。rl?、rr?分別代表左攝像機和右攝像機為達到共面所需的旋轉(zhuǎn)矩陣。rl、rr程度???????????? 相同,但旋轉(zhuǎn)方向相反。左右相機分別經(jīng)歷了這樣的旋轉(zhuǎn)之后,二者就已經(jīng)共面了。大家應(yīng)該明白了吧?
????????? 2、 旋轉(zhuǎn)圖像使得同行對準(zhǔn)
???????? 玉米在這里先為大家展示一個,校正成功的圖吧。
????????????????? 大家可以像小學(xué)時候?qū)懣磮D說話作文一樣,觀察一下圖中校正前和校正后左右兩攝像機的圖像到底發(fā)生了什么本質(zhì)的變??????????????? 化。
????????????????? 玉米的答案是:左右兩圖分別繞光軸作了旋轉(zhuǎn),旋轉(zhuǎn)過后兩攝像機的主點連線平行像素坐標(biāo)的行線。
????????????????? 玉米的答案也是自己對行對準(zhǔn)的理解,比較通俗。這與很多書上用極幾何術(shù)語描述的有些不同,大家可以思考一下,玉米?????????? 說的有沒有道理。
?????????????????? 好,既然已經(jīng)明確了,要達到行對準(zhǔn),圖像所需發(fā)生的變化。那么就讓我們用數(shù)學(xué)表達式來表達它們吧。
????????? 玉米畫了一個簡單的示意圖,畫的丑大家不要見笑。
????????? 紅色的線表示的是校正后的行線,其是左右對準(zhǔn)的。大家可以看到,從原圖像的行線轉(zhuǎn)到校正后圖像的行線,左圖像轉(zhuǎn)動了α,右圖像轉(zhuǎn)動了θ。那么怎樣來確定兩個旋轉(zhuǎn)角度呢?
?????????? 大家可以回憶一下,我們在本系列博文中的第二篇中講述剛體變換時,把旋轉(zhuǎn)矩陣按不同軸分解的方法。可以看做是沿光軸旋轉(zhuǎn),旋轉(zhuǎn)目的是與主點連線平行。先以左圖像為例:
????????? 那么我們設(shè)旋轉(zhuǎn)矩陣為Rh?,?
????????? 則Rh可以表示為以歸一化T(平移向量):e1為旋轉(zhuǎn)的指針,則隨之e2為e1與光軸的叉積,e3為e2與e1的叉積:
????????? 大家可以進一步算一下:
????????? 我們發(fā)現(xiàn),其實行對準(zhǔn)就是繞e3方向,轉(zhuǎn)了α。同樣的,對右圖就是轉(zhuǎn)了θ。
????????? 通過上面的推導(dǎo),我們就把立體標(biāo)定與立體校正中的數(shù)學(xué)思想理清楚了。其實,立體匹配是有很多種方法的,玉米在里只是介紹了立體校正的基本原理。其他方法中,有一些可以不依賴標(biāo)定參數(shù),如果大家想要對立體校正進行深入研究,大家可以搜索一些經(jīng)典論文進行深入學(xué)習(xí)。如:A. Fusiello, E. Trucco, and A. Verri.寫的 Acompact algorithm for rectification of stereo pairs.等等
???????? 截止目前對于三維重建的所有準(zhǔn)備工作,都已完成。幾何框架也僅剩下最后一步:立體成像。(因為本系列博文只介紹雙目視覺的幾何架構(gòu),所以跳過匹配不談)玉米在下一篇博文中將與大家分享一下,幾何脈絡(luò)的最終果實:立體成像。這也是我們對于雙目視覺幾何框架推導(dǎo)和理解的最終目標(biāo)。
???????? 玉米才疏學(xué)淺,文中如有紕漏,請大家批評指正!
八、走向三維
??????? 我們前面花了七篇博文做鋪墊,我們所做的一切努力都是為了最后的這一擊——立體成像。因為玉米的這個系列文章是對雙目視覺幾何框架的總結(jié)。此處跳過匹配,假設(shè)左右圖像點的完美匹配的。只看在幾何上,三維坐標(biāo)是如何被還原的。相對來說,最后的這一步,比前面是要輕松許多的,因為我們前面已經(jīng)做了大量的工作。這些工作使得最后的這一步,由不可能稱為可能,由復(fù)雜變得簡單,吧啦吧啦。好吧,閑話少說,讓我們一起來見證這一時刻吧。
??????? 此處我們按opencv中cvcalibratecamera2()函數(shù)得到的焦距f進行三維坐標(biāo)的求解。
??????? 請大家看下面示意圖(莫怪,玉米的圖一向畫的丑):
??????? 根據(jù)最簡單的相似三角形關(guān)系,我們就可以求出,物點坐標(biāo)(X,Y,Z)。
??????? 首先,
???????? 其中,s為像素的物理尺寸,d就是兩個攝像機間的視差,d=(uL-uR)s。
??????? 我們得到的這個三維坐標(biāo),相當(dāng)于是在右攝像機的攝像機坐標(biāo)系上的。
?????? 那么重建就是透視投影的逆過程,我們可以把這個過程表示成矩陣形式。我們定義Q為反投影矩陣。那么依照上式:
??????? 齊次坐標(biāo)形式的三維坐標(biāo)恢復(fù),矩陣形式如下:
??????? 至此,玉米的《計算機視覺學(xué)習(xí)筆記》雙目視覺幾何框架系列文章順利收尾。希望這八篇博文對大家,尤其是計算機視覺的初學(xué)者有所幫助。
??????? 在行文過程中,玉米引用了網(wǎng)絡(luò)上的一些圖片,但大多找不到出處,所以未給出引用表。如這些圖片的主人,發(fā)現(xiàn)了自己的圖片在這個博客上,請和玉米聯(lián)系,玉米會將引用出處,重新給出!
?????? 本系列博文中涉及的數(shù)學(xué)運算頗多,玉米才疏學(xué)淺,中間若有理解上的錯誤,懇請大家批評指正!
?
轉(zhuǎn)載自大神博客:
http://blog.csdn.net/onthewaysuccess/article/details/40709745
https://www.cnblogs.com/dverdon/p/5609124.html
侵刪。
總結(jié)
以上是生活随笔為你收集整理的双目视觉几何框架详解(玉米专栏8篇汇总)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: uci数据集汇总及翻译
- 下一篇: 如何制作自动更新程序?