下面理解部分錯(cuò)誤,過(guò)幾天進(jìn)行修改。
在計(jì)算機(jī)視覺(jué)中,我們就是利用相機(jī)模型將三維空間點(diǎn)與二維圖像點(diǎn)聯(lián)系起來(lái)的。在實(shí)際中,往往有數(shù)學(xué)模型來(lái)描述攝像機(jī)模型,攝像機(jī)模型有很多,但是一般分為針孔模型(線性模型)和非線性模型。
可用針孔模型來(lái)近似表示任一點(diǎn)P(Xc,Yc,Zc)在像平面的投影位置,也就是說(shuō),任一點(diǎn)P(Xc,Yc,Zc)的投影點(diǎn)p(x,y)都是OP(即光心(投影中心)與點(diǎn)P(Xc,Yc,Zc)的連線)與像平面的交點(diǎn)如上一篇文章中的圖2.2。對(duì)應(yīng)比例關(guān)系可得:
(說(shuō)明:Xc的c下表表示camera相機(jī),上述公式是在相機(jī)坐標(biāo)系內(nèi),利用三角形相似原理,即x/f=Xc/Z,其中上述公式的單位為毫米,f表示焦距單位毫米)
上式可以用齊次坐標(biāo)與矩陣的形式表示為:
將上一篇文章中的(2.3)和(2.4)代入(2.6)式就可以得到點(diǎn)P的世界坐標(biāo)與其投影坐標(biāo)(u,v)之間的關(guān)系為:
(說(shuō)明:上述公式中完成了從世界坐標(biāo)系到圖像坐標(biāo)系的轉(zhuǎn)變,中間經(jīng)過(guò)了相機(jī)坐標(biāo)系的過(guò)度,Xw中的w表示world世界,單位為毫米,而u,v是的 單位為像素,即完成了從毫米——像素的轉(zhuǎn)換。)
其中ax=f/dx,ay=f/dy;M是3×4的矩陣—投影矩陣,M1完全由相機(jī)的內(nèi)參數(shù)ax,ay,u0,v0決定,(u0,v0)為主點(diǎn)坐標(biāo),ax,ay分別表示圖像u軸和v軸上的尺度因子,M2則完全由相機(jī)的外部參數(shù)決定。而相機(jī)標(biāo)定就是確定相機(jī)的內(nèi)外參數(shù)。
由式(2.7)可知,若已知相機(jī)的內(nèi)外參數(shù),則相當(dāng)于已知投影矩陣M.當(dāng)已知M和空間點(diǎn)P的坐標(biāo):矢量Xw=(Xw,Yw,Zw,1)T,(矢量Xw上面有一個(gè)矢量標(biāo)識(shí)杠,T表示矢量的轉(zhuǎn)置)。式(2.7)可以給出三個(gè)方程,消去Zc就可以得到其投影點(diǎn)p的坐標(biāo)(u,v)(其實(shí)也就是我用一個(gè)相機(jī)就可以拍攝一個(gè)物體的圖片了)。但是由于M為3×4不可逆矩陣,當(dāng) 點(diǎn)P的投影坐標(biāo)(u,v)和投影矩陣M為已知時(shí),我們只能得到關(guān)于Xw,Yw,Zw的兩個(gè)線性方程,即射線OP的方程,由上一篇圖2.2我們可以看出,位于射線OP上的所有空間點(diǎn)的投影點(diǎn)(即圖像點(diǎn))都是p點(diǎn)。所以不能唯一確定空間點(diǎn)P的世界坐標(biāo)矢量Xw.
所以,為了得到空間物體的三維世界坐標(biāo),就必須有兩個(gè)或更多的相機(jī)構(gòu)成立體視覺(jué)系統(tǒng)模型才能實(shí)現(xiàn)。
在實(shí)際的成像過(guò)程中,考慮鏡頭的失真,一般都存在非線性畸變,所以線性模型不能準(zhǔn)確描述成像幾何關(guān)系。非線性畸可用下列公式描述:
若考慮非線性畸變,則對(duì)相機(jī)標(biāo)定時(shí)需要使用非線性優(yōu)化算法。而有研究表明引入過(guò)多的非線性參入(如離心畸變和薄棱畸變)不僅不能提高精度,還會(huì)引起解的不穩(wěn)定。一般情況下徑向畸變就足以描述非線性畸變,所有本課題只是考慮徑向畸變。則將式(2.9)中的徑向畸變代入式(2.8)可得:
OpenCV中講解:
從制作上講,從制作一個(gè)”球形“透鏡比制作一個(gè)數(shù)學(xué)上理想的透鏡更容易。故產(chǎn)生了徑向畸變。
從機(jī)械方面講,也很難把透鏡和成像儀保持平衡。故產(chǎn)生了切向畸變。
1、徑向畸變
對(duì)徑向畸變,成像儀中心(光學(xué)中心)是畸變?yōu)?,隨著向邊緣移動(dòng),畸變?cè)絹?lái)越嚴(yán)重。故我們可以用在r=0處的泰勒級(jí)數(shù)展開(kāi)的前幾項(xiàng)來(lái)定量描述。
對(duì)于便宜的網(wǎng)絡(luò)攝像機(jī),我們通常使用前兩項(xiàng),其中通常第一項(xiàng)為k1,而第二項(xiàng)為k2。對(duì)畸變很大的攝像機(jī),比如魚(yú)眼透鏡,我們使用第三個(gè)徑向畸變項(xiàng)k3。通常成像儀某點(diǎn)的徑向位置按下式調(diào)節(jié):
這里(x,y)是畸變點(diǎn)在成像儀上的原始位置,(xcorrected,ycorrected)表示矯正后的新位置。
2、切向畸變
切向畸變是由于透鏡制造上的缺陷使得透鏡本身與圖像平面不平行而產(chǎn)生的。徑向畸變可以有兩個(gè)額外的參數(shù)p1和p2來(lái)描述,如下:
因此總共有5個(gè)我們需要的畸變參數(shù)。由于在OpenCV程序中5個(gè)參數(shù)是必需的,所以它們被放置到一個(gè)畸變向量中,這是一個(gè)5×1的矩陣,按順序依次包含k1,k2,p1,p2和k3。
通過(guò)針孔成像模型的分析可知,為了由像點(diǎn)坐標(biāo)唯一的確定世界三維坐標(biāo),就必須通過(guò)兩個(gè)或者多個(gè)相機(jī)來(lái)共同完成。通過(guò)兩個(gè)相隔一定距離的相機(jī)來(lái)實(shí)現(xiàn)對(duì)3D場(chǎng)景的成像,就是雙目成像,也稱為立體視覺(jué)成像。相機(jī)拍攝景物時(shí),先把兩部相機(jī)的光軸匯聚于感興趣的物體上,則兩個(gè)光軸的交點(diǎn)稱為匯聚點(diǎn),而該點(diǎn)到基線中心的距離稱為匯聚距離。當(dāng)匯聚的距離有限時(shí),雙目立體視覺(jué)系統(tǒng)統(tǒng)稱為匯聚式雙目立體視覺(jué)模型;當(dāng)匯聚距離無(wú)線遠(yuǎn)時(shí),雙目立體視覺(jué)系統(tǒng)就被成為平行式雙目立體視覺(jué)模型。本文研究的是平行雙目立體視覺(jué)系統(tǒng),下面著重介紹一下平行雙目立體視覺(jué)模型。
如圖2.3所示,當(dāng)目標(biāo)距離遠(yuǎn)遠(yuǎn)大于焦距時(shí),可假定透鏡中心與像平面的距離等于攝像機(jī)的焦距f(=OlCl=OrCr)。兩光軸平行且距離(即基線)為2h。世界坐標(biāo)系定義為OXYZ,左右圖像平面都與相機(jī)平面XOY平行,其中Ol、Or分別為左圖像與右圖像的中心(即左右圖像局部坐標(biāo)系的原點(diǎn),Xl,Xr分別表示左右相機(jī)局部坐標(biāo)系的X軸),Cl和Cr分別為左右相機(jī)的光心,Z軸表示到攝像機(jī)(在Z=0處)的距離。X軸表示“水平”距離(Y軸朝負(fù)面而去,沒(méi)有出現(xiàn),即滿足右手坐標(biāo)準(zhǔn)則)。X=0是右相機(jī)光心位置。光心即投影中心。
假設(shè)三維空間點(diǎn)P(X,Y,Z)的像在左、右兩個(gè)像平面上的投影分別是Pl(xl,yl)和Pr(xr,yr)(其中xl,yl,xr,yr分別表示投影點(diǎn)在每個(gè)圖像局部坐標(biāo)系即2.1節(jié)所講的圖像坐標(biāo)系O1xy中的坐標(biāo))。由小孔成像原理可知:P,Cl,Pl三點(diǎn)共線,則由三角相似,可得:
(這里我只是把內(nèi)容以圖片的形式貼出來(lái),不在手寫(xiě)了,論文中下面部分存在是錯(cuò)誤的)
下面內(nèi)容摘自:西安工業(yè)大學(xué) 基于雙目立體視覺(jué)的圖像匹配與三維重建 張海波
5、基于雙目立體視覺(jué)技術(shù)的三維重建
攝像機(jī)通過(guò)透視變換將物體的三維信息轉(zhuǎn)換為二維圖像,因?yàn)槎S圖像中的點(diǎn)與三維物體上的點(diǎn)可以通過(guò)某種對(duì)應(yīng)關(guān)系相互轉(zhuǎn)換,也就是說(shuō),可以從不同方向拍攝的同一空間點(diǎn)的兩幅圖像中的依據(jù)該對(duì)應(yīng)關(guān)系反推出三維物體的立體空間位置。這就是雙目立體視覺(jué)中三維信息獲取的過(guò)程。兩幅圖像通過(guò)立體匹配可得到各特征點(diǎn)的視差信息,根據(jù)視差信息確定各點(diǎn)的深度信息,最終獲得被測(cè)物體的三維信息。
5.1 雙目立體視覺(jué)三維測(cè)量原理
如圖5.1所示,兩臺(tái)攝像機(jī)的鏡頭中心或光學(xué)中心之間的距離稱為雙目視覺(jué)系統(tǒng)的基線B,利用雙目視覺(jué)成像系統(tǒng)可以確定具有像平面坐標(biāo)點(diǎn)(x1,y1)和(x2,y2)的三維空間點(diǎn)W的世界坐標(biāo)。
1)兩臺(tái)攝像機(jī)相同且它們的攝像機(jī)坐標(biāo)系統(tǒng)各對(duì)應(yīng)軸精確平行(光軸平行)
圖5.2給出了兩臺(tái)攝像機(jī)鏡頭連線所在平面(XZ平面)。將世界坐標(biāo)系設(shè)置在第一臺(tái)攝像機(jī)坐標(biāo)系上,即世界坐標(biāo)系和第一臺(tái)攝像機(jī)的攝像機(jī)坐標(biāo)系重合。
根據(jù)攝像機(jī)坐標(biāo)系與世界坐標(biāo)系重合情況下的透視變換公式,三維空間點(diǎn)W的X軸坐標(biāo)表示為:
式中X1和Z1為三維空間點(diǎn)形在世界坐標(biāo)系(此時(shí)世界坐標(biāo)系與第一個(gè)攝像機(jī)坐標(biāo)系重合)中的X軸和Z軸坐標(biāo)。同理,如果將世界坐標(biāo)系設(shè)置在第二臺(tái)攝像機(jī)上,則W點(diǎn)在X軸的坐標(biāo)可表示為:
因?yàn)榛€長(zhǎng)度是B且三維空間點(diǎn)W的Z軸坐標(biāo)對(duì)兩臺(tái)攝像機(jī)坐標(biāo)系統(tǒng)是一樣的,所以有:
將式(5.3)帶入式(5.1)和式(5.2),得
式(5.6)把三維空間點(diǎn)與像平面之間的距離Z,即三維信息中的深度信息,與視差D(三維點(diǎn)對(duì)應(yīng)的像坐標(biāo)x2和x1之差)直接聯(lián)系起來(lái)。視差的大小直接與深度有關(guān),所以視差包含了物體的三維空間信息。通過(guò)視差就可以求得三維空間點(diǎn)到攝像機(jī)的距離,確定三維空間點(diǎn)在世界坐標(biāo)系中的坐標(biāo)。
如果視差D可以確定并且已知兩臺(tái)攝像機(jī)之間的基線距離和攝像機(jī)的焦距,很容易計(jì)算出三維空間點(diǎn)W的Z軸坐標(biāo)。另外Z軸坐標(biāo)確定后點(diǎn)W的世界坐標(biāo)X,Y軸坐標(biāo)可用(x1,y1)和(x2,y2)借助透視變換得到,即:
這樣,通過(guò)三維空間點(diǎn)在兩臺(tái)攝像機(jī)的成像視差,可求出空間點(diǎn)的三維坐標(biāo)。因此,對(duì)于兩臺(tái)攝像機(jī)平面上的任意一點(diǎn),只要能夠在另一臺(tái)攝像機(jī)平面上找到對(duì)應(yīng)的匹配點(diǎn)(即兩者是空間同一點(diǎn)在兩臺(tái)攝像機(jī)面上的像點(diǎn)),就可以通過(guò)視差確定出該點(diǎn)的三維空間點(diǎn)。
(說(shuō)明:對(duì)于上述公式,我們?nèi)绻O(shè)置相機(jī)1為參考世界坐標(biāo)系,則空間三維點(diǎn)的計(jì)算通過(guò)X1,Y1的表達(dá)式進(jìn)行計(jì)算,反之對(duì)于相機(jī)2也是同樣的道理)。
個(gè)人理解部分:
在上圖,我們選擇左圖像的中心O1為世界坐標(biāo)原點(diǎn)。M表示世界坐標(biāo)系中的一點(diǎn),p1和p2表示該點(diǎn)經(jīng)過(guò)透鏡投影到畫(huà)布上的位置。設(shè)p1點(diǎn)為(x1,y1),p2點(diǎn)為(x2,y2),(這里點(diǎn)p1和點(diǎn)p2均是在世界坐標(biāo)系中的坐標(biāo),即相對(duì)于O1點(diǎn)的坐標(biāo),不要為上面的標(biāo)號(hào)所迷糊,切記!因?yàn)槲覀兿旅娴耐茖?dǎo)就是針對(duì)如此的)M點(diǎn)為(X,Y,Z)。我們知道OpenCV坐標(biāo)系中圖中R1和R2為圖像平面的原點(diǎn),即相當(dāng)于p1,p2的參考點(diǎn)的同時(shí)變化。這里,我們知道兩個(gè)圖像分辨率是一樣的,即兩個(gè)圖像的平面是一樣的大小,我們應(yīng)用的相似三角形的知識(shí),故我們只需要確保在列出的比例關(guān)系中,能夠保存長(zhǎng)度是正的就可以了。
首先我們要證明一點(diǎn),上圖中直線O1p1和直線MO3是平行的,利用高中所學(xué)的知識(shí):
我們知道了O1p1和MO3是平行的,那么就可以知道三角形O1p1D和三角形MO3A相似,又因?yàn)榫€段O1p1和線段MO3的比值等于線段p1C1和線段C1O3的比值,即等于f/Z-f。
從上圖我們知道,點(diǎn)p1的x1,y1均小于0。我們現(xiàn)在要列出點(diǎn)p1和點(diǎn)p2的坐標(biāo),以及額外的已知參數(shù)與真實(shí)點(diǎn)M坐標(biāo)之間的關(guān)系。由線段p1D=0-x1,線段O3A=X,那么我們就可以得到如下的一個(gè)公式:
同理我們對(duì)于點(diǎn)p1的y1坐標(biāo),也進(jìn)行相似變換。即線段O1D=0-y1,線段MA=Y。那么我們可以得到如下的公式:
接下來(lái)我們要求解p2點(diǎn)的坐標(biāo)x2,y2和M點(diǎn)坐標(biāo)之間的關(guān)系,我們同樣的利用三角形相似來(lái)找它們坐標(biāo)之間的關(guān)系,我們同樣可知道三角形O2p2E和三角形MO4A是相似的。
那么線段Ep2=x2-B,線段AO4=B-X,那么他們之間的比例還是滿足f/Z-f,得到如下的公式:
總上所述,我們得到X,Y,Z坐標(biāo)的計(jì)算公式:
為了方便下面的理解,我們附如下圖:
我們知道上面的x1,y1,x2,y2的坐標(biāo)均是針對(duì)世界坐標(biāo)原點(diǎn)在O1處的情況,但是我們一般知道的是OpenCV圖像中兩個(gè)點(diǎn)的q1和q2的坐標(biāo),分別為(x11,y11),(x22,y22)。
我們就需要尋找x11,y11,x22,y22和x1,y1,x2,y2之間的關(guān)系。我們第一副圖像大小為W*H,W表示OpenCV中X方向的長(zhǎng)度,H表示OpenCV中Y方向的長(zhǎng)度,那么點(diǎn)(W/2,H/2)就近似于圖像的中間,即認(rèn)為是世界坐標(biāo)原點(diǎn)O1,由于分辨率相同,第二幅圖像也有同樣的大小。那么:
x1=x11-W/2;
y1=H/2-y11;
x2-x1=x22-x11+B
帶入上述三個(gè)公式得:
那么我們,我們規(guī)定上述的f,x11,y11,B,單位均為像素,那么我們就可以得到M點(diǎn)以像素為單位的世界坐標(biāo),然后里面利用像素和毫米的關(guān)系可以得到真實(shí)的三維點(diǎn)的坐標(biāo),當(dāng)然這里的坐標(biāo)是有參考坐標(biāo)系的。
再如,你或許可以在網(wǎng)上下載到下面的一篇文章:
上述文章中,打問(wèn)號(hào)的部分應(yīng)該是錯(cuò)誤的,所謂的焦點(diǎn)就是光透過(guò)透鏡匯聚的點(diǎn)就稱為焦點(diǎn)。所以上述的三維世界原點(diǎn)的坐標(biāo)應(yīng)該是選了左相機(jī)的透鏡中心,這樣上述公式正好,和我上面推導(dǎo)的相吻合。即L和B是等價(jià)的,由于選擇的參考系,沿著Z方向平移了f距離,所以我公式中的Z-f就是上圖中的Z。還應(yīng)注意上圖中的z和Z是一樣的,書(shū)寫(xiě)錯(cuò)誤而已。我上面推導(dǎo)的計(jì)算Z的公式,我這里為了強(qiáng)調(diào)一下,我重新將其寫(xiě)下來(lái):
我們這里的Z是圖像平面中心到世界三維點(diǎn)的距離。然而我們經(jīng)??吹饺缦碌男问剑?/p>
上述公式中的Z表示的是攝像機(jī)透鏡中心到世界三維點(diǎn)的距離(也就是過(guò)三維點(diǎn)與相機(jī)平行的平面和相機(jī)平面,兩個(gè)平面之間的距離)
,,這里我們約束f,B單位均為像素,x22,x11就是點(diǎn)在圖像中的坐標(biāo),即OpenCV坐標(biāo)系的下的坐標(biāo)。如果我們想獲取實(shí)際的距離,那么我們將像素轉(zhuǎn)化為米制單位就好了。
OpenCV中的數(shù)學(xué)模型:
公式:
上述的數(shù)學(xué)模型是通過(guò)下面的模型獲得的:
上圖中,我們將圖像平面關(guān)于針孔平面成鏡像,因此OpenCV中的數(shù)學(xué)模型中的求解出來(lái)的Z,就是物體平面到針孔平面(透鏡平面)之間的距離。
在計(jì)算機(jī)視覺(jué)中采用雙目視覺(jué)方法進(jìn)行三維重建,是指由兩幅二維圖像恢復(fù)物體三維幾何形狀的方法。三維測(cè)量和重建是緊隨著攝像機(jī)標(biāo)定之后關(guān)鍵的一步,可對(duì)視場(chǎng)中的點(diǎn),線或曲線構(gòu)成的軌跡或物體的輪廓進(jìn)行定位和形狀恢復(fù)。
如圖5.4所示,對(duì)于空間物體表面任意一點(diǎn)P,如果用攝像機(jī)C1觀察,它在攝像機(jī)C1的圖像點(diǎn)為p1,但無(wú)法由p1知道P的三維位置。事實(shí)上,O1P連線上的任意一點(diǎn)的圖像點(diǎn)都可認(rèn)為是p1,因此通過(guò)p1的位置,只能確定出空間點(diǎn)位于O1P1連線上的某一位置,無(wú)法知道P點(diǎn)的深度,如果用C1,C2兩臺(tái)攝像機(jī)同時(shí)觀察P點(diǎn),并且在攝像機(jī)C1圖像上點(diǎn)p1與在攝像機(jī)C2圖像上點(diǎn)p2是空間同一點(diǎn)P的像點(diǎn),則P點(diǎn)的位置是唯一確定的,為射線O1p1和O2p2上的交點(diǎn)。
假定已檢測(cè)出p1和p2為空間點(diǎn)P在兩臺(tái)攝像機(jī)上對(duì)應(yīng)的圖像點(diǎn)。在兩臺(tái)攝像機(jī)都已標(biāo)定的情況下,它們的投影矩陣分別為M1與M2,由攝像機(jī)模型
關(guān)于如何求解投影矩陣,OpenCV中有,下面給出一個(gè)截圖,講述了大題的操作步驟:
1、有時(shí)候感覺(jué)參考了幾篇下載的論文,看一些原理,里面出現(xiàn)的錯(cuò)誤,弄的自己稀里糊涂,后來(lái)發(fā)現(xiàn)Learning OpenCV書(shū)中自帶的要詳細(xì),而且也不會(huì)出現(xiàn)錯(cuò)誤,好比上面我們?cè)陉P(guān)于利用幾何變換來(lái)求解三維空間點(diǎn)時(shí),OpenCV書(shū)中給出了一個(gè)很好的圖:
上圖攝像機(jī)坐標(biāo)系以左攝像機(jī)的投影中心為原點(diǎn)。通過(guò)上圖,我們可以很容易的找到三角形之間的相似關(guān)系,也可以在理想的情況下,通過(guò)相似關(guān)系來(lái)求解三維點(diǎn)的坐標(biāo)。
聯(lián)系客服