怎么做新網(wǎng)站的推廣下載優(yōu)化大師并安裝
目錄
0.引言:小孔成像->映射表達(dá)式
1.?相機(jī)自身的運(yùn)動(dòng)如何表征?->外參矩陣E
1.1 旋轉(zhuǎn)
1.2?平移
2.?如何投影到“像平面”?->內(nèi)參矩陣K
2.1 圖像平面坐標(biāo)轉(zhuǎn)換為像素坐標(biāo)系? ? ??
3. 三維到二維的維度是如何丟失的?->透視變換
4. 坐標(biāo)變換的應(yīng)用
附:像平面投影實(shí)際的偏差問(wèn)題
參考資料
0.引言:小孔成像->映射表達(dá)式
視覺(jué)包含著大量的信息,是幾乎所有生物感知環(huán)境的主要工具,也是機(jī)器人的重要傳感器之一,但是相機(jī)究竟是如何成像的呢?
現(xiàn)在我們假設(shè)一種情況:黑暗的環(huán)境下,空中有一個(gè)發(fā)光的小球,小球?qū)γ媸卿仢M了墻壁的一張紙,我們會(huì)發(fā)現(xiàn)小球照亮了整個(gè)紙面,但是小球的二維投影圓卻沒(méi)有呈現(xiàn)在紙上。
現(xiàn)在我們?cè)俳o一個(gè)平面放在小球和紙之間,這個(gè)平面中心有一個(gè)小孔,光透過(guò)小孔,我們發(fā)現(xiàn)紙面整體雖然變暗了,但是小球二維投影圓卻能清晰看見(jiàn)了。這就是小孔成像。
但是小孔到底起著怎樣的作用?從數(shù)學(xué)角度看,小孔就是一個(gè)映射或者函數(shù)表達(dá)式,它讓“物點(diǎn)”與“像點(diǎn)”的空間位置有了一一對(duì)應(yīng)的關(guān)系。如果沒(méi)有“小孔”,那么物點(diǎn)會(huì)“漫射”到所有像點(diǎn),自然不會(huì)呈現(xiàn)任何形狀。
小孔成像就是相機(jī)的基本原理,因?yàn)殓R頭本身和小孔一樣,也是一個(gè)映射。鏡頭將物點(diǎn)投射到圖像傳感器上,將光強(qiáng)信號(hào)轉(zhuǎn)換到成電流信號(hào),電流信號(hào)再由運(yùn)算電路轉(zhuǎn)化成數(shù)字信號(hào),合成數(shù)字圖像,就是照片。
下面我們就來(lái)具體求解這個(gè)鏡頭代表的映射函數(shù)的具體形式,從而構(gòu)建物和像之間的數(shù)學(xué)關(guān)系。
1.?相機(jī)自身的運(yùn)動(dòng)如何表征?->外參矩陣E
首先,我們建立一個(gè)世界坐標(biāo)系W,而我們的相機(jī)自身也有一個(gè)坐標(biāo)系,我們稱為相機(jī)坐標(biāo)系C,而且相機(jī)坐標(biāo)系C可以在世界坐標(biāo)系W中運(yùn)動(dòng),這就引出幾個(gè)問(wèn)題:
1.相機(jī)自身的運(yùn)動(dòng)如何表征?
2.世界坐標(biāo)系中的“物點(diǎn)”投影到相機(jī)的成像平面,這又如何表示?
3.三維到二維的維度是如何丟失的?
4.這些坐標(biāo)的變換有什么應(yīng)用?
問(wèn)題一個(gè)一個(gè)解決。我們先看第一個(gè)問(wèn)題,為了明白背后的原理我先采用二維坐標(biāo)(三維坐標(biāo)是同理的),這樣便于理解。
從世界坐標(biāo)系變換到相機(jī)坐標(biāo)系屬于剛體變換。首先介紹剛體運(yùn)動(dòng)的概念:剛體(即形狀和大小不變的理想化物體)進(jìn)行的運(yùn)動(dòng),這種運(yùn)動(dòng)保持了物體內(nèi)部所有點(diǎn)之間的相對(duì)距離不變。剛體變換通常包括“平移”和”旋轉(zhuǎn)“。
(注意說(shuō)明旋轉(zhuǎn)和平移時(shí)用的是二維舉例,三維坐標(biāo)系的原理是相同的,推廣即可)
1.1 旋轉(zhuǎn)
我們先看旋轉(zhuǎn)?,F(xiàn)在在二維空間(三維空間同理)有一點(diǎn)P,其W坐標(biāo)系下(x,y),紅色的相機(jī)坐標(biāo)系原來(lái)與世界坐標(biāo)系重合,現(xiàn)在其旋轉(zhuǎn)了θ角:
那么,P點(diǎn)在做了旋轉(zhuǎn)運(yùn)動(dòng)了的相機(jī)坐標(biāo)系C下的坐標(biāo)(x',y')是多少呢?
這個(gè)問(wèn)題我們回頭解決,我們先看一下二維平面內(nèi)的旋轉(zhuǎn)運(yùn)動(dòng)是如何表達(dá)的:
二維空間內(nèi)一點(diǎn)P的坐標(biāo)為(x,y),其繞原點(diǎn)旋轉(zhuǎn)θ后得到P’的坐標(biāo)是(x',y'),如何求x',y'?
假設(shè)OP連線與X軸夾角為?α,由于旋轉(zhuǎn)不改變OP長(zhǎng)度,所以有這個(gè)等式
? ? ? ? ? ? ? ? ? ? ?
利用和角公式展開可得到x',相似,我們也能得到y(tǒng)'
我們利用線性代數(shù)的知識(shí)寫成矩陣的形式,這就得到一個(gè)旋轉(zhuǎn)矩陣R,也是一個(gè)二維的線性變換
我們記作p'=Rp,R為上面的旋轉(zhuǎn)矩陣。
我們回到剛才的問(wèn)題,用同樣的思路,還是有OP長(zhǎng)度相等的關(guān)系,我們計(jì)算可得x'y'
還是用矩陣來(lái)表達(dá),我們就得到了一個(gè)坐標(biāo)基變換的表達(dá)式
上面的矩陣我們記作A,寫作p'=Ap(其實(shí)這就是坐標(biāo)基變換)
矩陣A的作用就是對(duì)同一點(diǎn)不同坐標(biāo)系下的表達(dá)式進(jìn)行轉(zhuǎn)化
如果我們把剛剛得到的R和A相乘,結(jié)果會(huì)發(fā)現(xiàn)是一個(gè)單位矩陣I,則A和R就是互逆的。換句話說(shuō):再量相同的情況下,旋轉(zhuǎn)點(diǎn)和坐標(biāo)系變換是互逆的操作。
這一點(diǎn)非常有用,也就是只要我們知道了相機(jī)的運(yùn)動(dòng),就可以求表示相機(jī)運(yùn)動(dòng)的逆矩陣來(lái)求空間物點(diǎn)在運(yùn)動(dòng)后的相機(jī)坐標(biāo)系下的表達(dá)。
1.2?平移
上面的是旋轉(zhuǎn)運(yùn)動(dòng),下面我們看一下平移運(yùn)動(dòng)。
點(diǎn)P移動(dòng)到P',(x',y')的坐標(biāo)很容易得到。但是我們要注意,平移不是線性變換,也就是說(shuō)我們不能用矩陣表示平移運(yùn)動(dòng)。但是如果我們硬要用矩陣來(lái)表示平移呢?----這就引出了齊次坐標(biāo)(homogeneous)
我們可以用如下方式表示點(diǎn)P的平移
上面的矩陣其實(shí)就是三維剪切變換,帶入到三維中通過(guò)線性變換來(lái)達(dá)到“平移”的效果
那條白色的線其實(shí)都發(fā)生了成比例的縮放,縮放因子就是最后一個(gè)維度的值ω,ω=1時(shí)稱為歸一化平面,齊次坐標(biāo)ω不同的點(diǎn)在笛卡爾坐標(biāo)系下是同一個(gè)點(diǎn)。
這就是所謂的透視投影(中心投影變換)。透視中心就在ω=0的所謂無(wú)窮遠(yuǎn)點(diǎn)處。
這樣我們就明白,我們可以通過(guò)高維的剪切變換來(lái)實(shí)現(xiàn)低維度的平移變換,從而解決了平移運(yùn)動(dòng)的矩陣表示問(wèn)題。
我們通常把線性變換+ 平移稱為“仿射變換”(Affine)?
同樣地,對(duì)于相機(jī)坐標(biāo)系的平移,我們可以通過(guò)直接求平移矩陣T的逆矩陣來(lái)得到基變換矩陣A。
然后我們把剛剛提到的平移和旋轉(zhuǎn)合在一起,拼成一個(gè)矩陣,就得到了能夠轉(zhuǎn)換二維(三維同理)世界坐標(biāo)到運(yùn)動(dòng)的相機(jī)坐標(biāo)系的橋梁(線性變換)。
我們把這個(gè)矩陣寫成更一般的形式,T和R分別表示平移和旋轉(zhuǎn),我們稱E為相機(jī)的“外參矩陣”(Extrinsic Matrix)
寫成這種形式的好處是,可以統(tǒng)一的表達(dá)有限維空間的情況,比如二維和三維
(注:基于歐拉角的旋轉(zhuǎn)矩陣,其具體形式與旋轉(zhuǎn)軸是否固定以及旋轉(zhuǎn)順序有關(guān))
如此一來(lái),我們就把第一個(gè)問(wèn)題解決了。
2.?如何投影到“像平面”?->內(nèi)參矩陣K
我們已經(jīng)把世界坐標(biāo)系通過(guò)外參矩陣E轉(zhuǎn)換到了運(yùn)動(dòng)了的相機(jī)坐標(biāo)系下了,現(xiàn)在我們把目光聚焦到相機(jī)坐標(biāo)系就可以了。像平面與XY平面的距離我們稱為焦距f,相機(jī)坐標(biāo)系下一點(diǎn)P(x,y,z)與坐標(biāo)原點(diǎn)所連直線與像平面的交點(diǎn)P'就是:P在像平面上或者說(shuō)焦平面上的投影點(diǎn)。
現(xiàn)在我們來(lái)求P' 的坐標(biāo),根據(jù)兩個(gè)三角形相似,可得
? 則P'的坐標(biāo)為
我們?cè)俣x像平面上的坐標(biāo)為這就是圖像坐標(biāo)系下的坐標(biāo)值。
寫成齊次坐標(biāo)下矩陣的形式為
, z代表點(diǎn)p的深度信息。
?
2.1 圖像平面坐標(biāo)轉(zhuǎn)換為像素坐標(biāo)系? ? ??
像素坐標(biāo)系和圖像坐標(biāo)系都在成像平面上,只是各自的原點(diǎn)和度量單位不一樣。圖像坐標(biāo)系的原點(diǎn)為相機(jī)光軸與成像平面的交點(diǎn),通常情況下是成像平面的中點(diǎn)或者叫principal point。圖像坐標(biāo)系的單位是mm,是物理單位,而像素坐標(biāo)系的單位是pixel,我們平常描述一個(gè)像素點(diǎn)都是幾行幾列。所以這兩者之間的轉(zhuǎn)換關(guān)系如下:
。
其中,dx和dy分別表示每一列和每一行分別代表多少mm,即1pixel=dxmm。以齊次坐標(biāo)形式表示為:
?
那么將上面得線性變換矩陣與之前的作矩陣乘法,有
?,其中fx,fy是焦距(mm)像素值表示(pixel)
右側(cè)的矩陣即為相機(jī)的內(nèi)參矩陣,我們記作K。我們可以看到,這個(gè)矩陣其實(shí)也是一個(gè)仿射變換的形式。
這樣,我們的第二個(gè)問(wèn)題也解決了。
3. 三維到二維的維度是如何丟失的?->透視變換
我們把內(nèi)外參矩陣寫在一起,就得到了之前“小孔成像”所代表的映射的表達(dá)式
這里本質(zhì)上是一個(gè)透視變換,即齊次坐標(biāo)轉(zhuǎn)笛卡爾坐標(biāo)(降維了),相機(jī)成像三維到二維的維度丟失,就是在這里發(fā)生的,得到的歸一化像素坐標(biāo)系下的uv值就是我們要找的圖像坐標(biāo)了。
一句話總結(jié)第三個(gè)問(wèn)題的答案:相機(jī)坐標(biāo)系到歸一化像素坐標(biāo)系的透視變換(投影)
4. 坐標(biāo)變換的應(yīng)用
1.相機(jī)標(biāo)定:
每一個(gè)相機(jī)生產(chǎn)出來(lái)之后都要進(jìn)行標(biāo)定,這樣才能把相機(jī)的內(nèi)參寫進(jìn)產(chǎn)品手冊(cè)賣給客戶,而外參會(huì)隨著相機(jī)運(yùn)動(dòng)變化而變化,一般把相機(jī)固定之后再校正。常用的標(biāo)定方法是張正友老師提出的棋盤格校定法,此外還有直接線性法DLT。但無(wú)論哪種方法,本質(zhì)都是求解內(nèi)外參矩陣E和K。
2.視覺(jué)測(cè)量:
iphone的measure也是通過(guò)內(nèi)外參矩陣,才能把圖像像素的距離和真實(shí)的物理距離對(duì)應(yīng)起來(lái)。
3.視覺(jué)導(dǎo)航:
如果我們用攝像頭作為傳感器進(jìn)行導(dǎo)航和定位,尤其是在視覺(jué)SLAM中,如果我們不知道相機(jī)的內(nèi)外參矩陣,又怎么能通過(guò)攝像頭提供的圖像信息解算真實(shí)世界的位置,構(gòu)建真實(shí)世界的物理地圖呢?
附:像平面投影實(shí)際的偏差問(wèn)題
在實(shí)際情況下,相機(jī)的成像并沒(méi)有那么理想。
首先,由于圖像傳感器的尺寸和形狀誤差,導(dǎo)致像平面沿xy軸有不同尺度的縮放(scale):
再者,相機(jī)在實(shí)際生產(chǎn)過(guò)程中存在公差和不確定性因素,導(dǎo)致Z軸或者說(shuō)主光軸未穿過(guò)像平面的中心而產(chǎn)生偏移(offset):
最后,由于工藝問(wèn)題,像平面不再是矩形而是平行四邊形,我們用θ來(lái)刻畫這種偏斜(skew)。我們會(huì)發(fā)現(xiàn)這本質(zhì)也是一個(gè)坐標(biāo)基變換的問(wèn)題,從垂直XY軸,變成了非垂直的xy軸,從正交基變?yōu)榱朔钦换?/span>
參考資料
參考1
參考2
參考3