相機(jī)標(biāo)定可以說(shuō)是計(jì)算機(jī)視覺(jué)/機(jī)器視覺(jué)的基礎(chǔ),但是初學(xué)者不易上手,本文將給讀者整理一遍相機(jī)標(biāo)定的邏輯,并在文末回答評(píng)論區(qū)提出的問(wèn)題。分為以下內(nèi)容:
相機(jī)標(biāo)定的目的和意義
相機(jī)成像過(guò)程的簡(jiǎn)化與建模
針孔相機(jī)模型的數(shù)學(xué)描述
標(biāo)定針孔相機(jī)模型的參數(shù)
相機(jī)標(biāo)定的目的和意義
我們所處的世界是三維的,而照片是二維的,這樣我們可以把相機(jī)認(rèn)為是一個(gè)函數(shù),輸入量是一個(gè)場(chǎng)景,輸出量是一幅灰度圖。這個(gè)從三維到二維的過(guò)程的函數(shù)是不可逆的。
相機(jī)標(biāo)定的目標(biāo)是我們找一個(gè)合適的數(shù)學(xué)模型,求出這個(gè)模型的參數(shù),這樣我們能夠近似這個(gè)三維到二維的過(guò)程,使這個(gè)三維到二維的過(guò)程的函數(shù)找到反函數(shù)。
這個(gè)逼近的過(guò)程就是「相機(jī)標(biāo)定」,我們用簡(jiǎn)單的數(shù)學(xué)模型來(lái)表達(dá)復(fù)雜的成像過(guò)程,并且求出成像的反過(guò)程。標(biāo)定之后的相機(jī),可以進(jìn)行三維場(chǎng)景的重建,即深度的感知,這是計(jì)算機(jī)視覺(jué)的一大分支。
相機(jī)成像過(guò)程的簡(jiǎn)化與建模
提到相機(jī)的成像,從根本上來(lái)說(shuō),就是在討論相機(jī)的鏡頭。固定結(jié)構(gòu)的相機(jī)鏡頭決定了一對(duì)固定的物像共軛關(guān)系,所謂「共軛」,意思是鏡頭前某個(gè)位置的物,它的像一定在鏡頭后的某個(gè)位置,這個(gè)關(guān)系是固定的。舉個(gè)最簡(jiǎn)單的例子,無(wú)窮遠(yuǎn)處的物必然會(huì)在鏡頭的焦點(diǎn)處成像。這里說(shuō)的固定結(jié)構(gòu),指的是鏡頭的焦距固定,光圈固定。
上圖是Canon EF 85mm/F1.2L II USM,我們可以找一個(gè)與這個(gè)鏡頭具有相同的物像共軛關(guān)系的凸透鏡來(lái)等效這個(gè)鏡頭,我們把這個(gè)凸透鏡稱作等效透鏡,用朝外的雙箭頭表示,如下圖。
這里說(shuō)的等效,只是針對(duì)物像共軛關(guān)系的等效,也就是光路的等效,鏡頭中之所以用了形態(tài)各異的透鏡主要是為了消除各種各樣的像差,提高清晰度。換句話說(shuō),等效透鏡的目的絕不是為了在實(shí)際應(yīng)用中取代鏡頭(畢竟一個(gè)鏡頭都好貴),只是為了幫助我們理解。這樣我們就可以畫出相機(jī)拍攝到清晰的蠟燭燃燒場(chǎng)景的草圖,如下圖。
其中, 是火苗尖的物點(diǎn), 是火苗尖的像點(diǎn) , 是蠟燭根的物點(diǎn),是蠟燭根的像點(diǎn), ?是等效透鏡的中心(也稱為光心),紅色虛線表達(dá)了物點(diǎn) ?到 像點(diǎn)成像光路中的兩條,綠色虛線表達(dá)了物點(diǎn) 到像點(diǎn) 成像光路中的兩條,紅色是CCD面。注意,剛剛說(shuō)到我們畫的是「相機(jī)拍攝到清晰的蠟燭燃燒場(chǎng)景的草圖」,這表明像點(diǎn) 和像點(diǎn) 剛好落在CCD面上,那么假如像點(diǎn)沒(méi)有落在CCD面上,也就是CCD拍攝的圖像不清晰,我們?nèi)绾未_定像點(diǎn)的位置?
根據(jù)幾何光學(xué)的作圖法,由過(guò)等效透鏡的焦點(diǎn) 的光線和過(guò)光心 的光線,我們可以作出像點(diǎn) 與 的位置,現(xiàn)在我們對(duì)「相機(jī)拍攝到清晰的蠟燭燃燒場(chǎng)景的草圖」同樣用作圖法,只考慮 與 點(diǎn)的物像關(guān)系。
這樣我們就能夠得到成像光路中的4條:①是過(guò)透鏡上邊沿的光路,④是過(guò)透鏡下邊沿的光路,②是過(guò)等效透鏡焦點(diǎn)的光路,③是過(guò)光心的光路。它們都表達(dá)了物點(diǎn) 與像點(diǎn) 的物像共軛關(guān)系,顯然③過(guò)光心的光路是最容易建立物像共軛關(guān)系數(shù)學(xué)模型,因此我們用③來(lái)代表成像光路,對(duì)相機(jī)成像過(guò)程進(jìn)行簡(jiǎn)化。
到這里我們發(fā)現(xiàn),簡(jiǎn)化后的相機(jī)模型和針孔相機(jī)的成像原理很相似,因此我們把簡(jiǎn)化后的相機(jī)模型稱為針孔相機(jī)模型。上圖中的 是針孔相機(jī)模型的焦距,但請(qǐng)注意,此針孔相機(jī)「焦距」非彼等效透鏡「焦距」,只是借用了「焦距」匯聚光線的概念,表達(dá)的是CCD面到光心的距離。
但是我們說(shuō)的是簡(jiǎn)化后的相機(jī)模型和針孔相機(jī)的成像原理僅僅是相似,絕不能等同,由于針孔相機(jī)的原理是光沿直線傳播,所以真實(shí)的針孔相機(jī)是沒(méi)有「焦距」的概念的,也不存在像差,其物像關(guān)系不具有一一對(duì)應(yīng)性,如下圖。
所以準(zhǔn)確的講把相機(jī)的成像過(guò)程簡(jiǎn)化成針孔相機(jī)模型,只是借用了針孔相機(jī)中簡(jiǎn)單的數(shù)學(xué)關(guān)系來(lái)表達(dá)一些本來(lái)難以表達(dá)的數(shù)學(xué)關(guān)系,使得數(shù)學(xué)上大大降低了復(fù)雜性,但是這個(gè)簡(jiǎn)化的代價(jià)同樣很大,它本身不考慮像差(雖然針孔相機(jī)模型補(bǔ)充了消畸變模型)、不考慮景深(針孔相機(jī)模型物像關(guān)系不具有一一對(duì)應(yīng)性,認(rèn)為凡是物總能成清晰像),并且假定等效透鏡是薄透鏡。所以說(shuō)針孔相機(jī)模型僅僅是一種真實(shí)相機(jī)的成像過(guò)程的近似,甚至于我們可以說(shuō)這是一種非常粗糙的近似,這使得這個(gè)模型對(duì)越符合針孔相機(jī)模型的真實(shí)相機(jī)近似程度越高,如網(wǎng)絡(luò)攝像頭、手機(jī)鏡頭、監(jiān)控探頭等等。
針孔相機(jī)模型的描述
我們對(duì)相機(jī)成像過(guò)程進(jìn)行簡(jiǎn)化和建模得到了針孔相機(jī)模型,如下圖示。
首先建立相機(jī)坐標(biāo)系,我們以光心 為坐標(biāo)系的原點(diǎn), 與 方向是CCD像素排列的水平和豎直兩個(gè)方向, 方向垂直與CCD面,建立右手坐標(biāo)系,這是一個(gè)三維坐標(biāo)系。其次,我們還需要建立CCD標(biāo)號(hào)坐標(biāo)系:以CCD左上角像素標(biāo)號(hào)為原點(diǎn),CCD像素排列的水平和豎直兩個(gè)方向?yàn)?與 方向,這是一個(gè)二維坐標(biāo)系。為了方便描述,我們之后將把針孔相機(jī)模型對(duì)稱翻轉(zhuǎn)過(guò)來(lái),如下圖所示,從數(shù)學(xué)的角度,它們是等價(jià)的。
由光心 著光軸出發(fā),像平面在 上, 是相機(jī)的物理焦距(單位:)。
點(diǎn) 在空間中,在相機(jī)坐標(biāo)系下的位置是
點(diǎn) 在像平面上,有兩個(gè)等價(jià)的位置描述:1. 在相機(jī)坐標(biāo)系下的位置是 ;2. 在CCD標(biāo)號(hào)坐標(biāo)系下的位置是 。
在無(wú)鏡頭畸變的條件下,光心 、點(diǎn) 與點(diǎn) 在一條直線上。
與 是CCD單個(gè)像素在水平和豎直兩個(gè)方向上的尺寸(單位:/像素),因此定義焦距為 (單位:像素)。
CCD標(biāo)號(hào)坐標(biāo)系原點(diǎn)到光軸的偏移量為 (單位:像素)。根據(jù)相似三角形關(guān)系,可以得出:(1) 二維CCD標(biāo)號(hào)坐標(biāo) 二維CCD像素坐標(biāo) 建立CCD像面上的點(diǎn)標(biāo)號(hào)坐標(biāo)與物理坐標(biāo)之間關(guān)聯(lián),由于像平面在 上,可省略。
(2) 像點(diǎn)的二維像素坐標(biāo) 物點(diǎn)的三維空間中的坐標(biāo) 建立CCD像面上像點(diǎn)物理坐標(biāo)與對(duì)應(yīng)的三維空間中物點(diǎn)坐標(biāo)之間關(guān)聯(lián)。
(3) 像點(diǎn)的二維CCD標(biāo)號(hào)坐標(biāo) 物點(diǎn)的三維空間中的坐標(biāo) 連接(1)和(2)的兩個(gè)關(guān)聯(lián),也是實(shí)際進(jìn)行標(biāo)定得到參數(shù)
由以上三個(gè)關(guān)聯(lián)可以得到:像點(diǎn)標(biāo)號(hào) 像點(diǎn)坐標(biāo) 物點(diǎn)坐標(biāo) 。在OpenCV及Matlab標(biāo)定工具箱直接使用了(3)關(guān)聯(lián),不需要知道CCD單個(gè)像素的尺寸,因此在標(biāo)定過(guò)程是得不到物理焦距 的,只能得到像素焦距 。
很容易發(fā)現(xiàn),(3)關(guān)聯(lián)是不約束 的,也就是說(shuō),針孔相機(jī)模型本身是欠定的,通過(guò)被點(diǎn)亮的CCD像素 我們只能知道物點(diǎn) 在射線 上,但無(wú)法確定具體的點(diǎn),所以我們講,針孔相機(jī)模型是一個(gè)射線方程模型, 點(diǎn)的射線方程:以上的關(guān)系是在無(wú)鏡頭畸變的條件下建立的,但是實(shí)際上存在鏡頭畸變,可以理解成像點(diǎn)和物點(diǎn)之間的光線是彎曲的,要得到射線模型,要進(jìn)行消除畸變。
(4) 補(bǔ)充消畸變模型以像面中心像素坐標(biāo) 為中心,像面上的點(diǎn)到中心的距離為
合成畸變 其中:
徑向畸變
切向畸變
把消畸變模型補(bǔ)充進(jìn)針孔相機(jī)模型,因此「像點(diǎn)標(biāo)號(hào) 像點(diǎn)坐標(biāo) 物點(diǎn)坐標(biāo) 」被修正為:像點(diǎn)標(biāo)號(hào) 像點(diǎn)坐標(biāo) 物點(diǎn)坐標(biāo) 消畸變后的射線方程 是:
標(biāo)定針孔相機(jī)模型的參數(shù)
針孔相機(jī)模型中,只要確定這9個(gè)參數(shù)就可以唯一的確定針孔相機(jī)模型, ,這個(gè)過(guò)程就稱為「相機(jī)標(biāo)定」,其中前4個(gè)我們稱為內(nèi)參數(shù),后5個(gè)稱為畸變參數(shù),畸變參數(shù)是為了補(bǔ)充內(nèi)參的。所以一旦相機(jī)結(jié)構(gòu)固定,包括鏡頭結(jié)構(gòu)固定,對(duì)焦距離固定,我們就可以用這9個(gè)的參數(shù)去近似這個(gè)相機(jī)。這里說(shuō)的「鏡頭結(jié)構(gòu)固定」,按我個(gè)人的理解,除了焦距固定之外,也應(yīng)當(dāng)包含光圈固定,因?yàn)楦淖児馊Φ拇笮?,除了景深之外,是有可能改變針孔相機(jī)模型中的光心位置,但是影響并不是很大。這意味著標(biāo)定好的相機(jī)如果改變光圈大小,會(huì)使得標(biāo)定誤差變大但應(yīng)該不會(huì)大到難以接受的地步。對(duì)于針孔相機(jī)本身需要擬合的方程如下:
其中 代表了畸變圖像和消畸變圖像之間的變換。因此,我們現(xiàn)在的任務(wù)就是找出一大堆具有對(duì)應(yīng)關(guān)系的像點(diǎn) 和物點(diǎn) 的點(diǎn)對(duì)作為樣本,來(lái)訓(xùn)練出模型的9個(gè)參數(shù) 。那么這里就引發(fā)了兩個(gè)問(wèn)題:(1) 這么多像點(diǎn)和物點(diǎn)到底誰(shuí)和誰(shuí)是一對(duì)兒?(2) 即便我知道物點(diǎn)在哪里,可是我怎么樣用相機(jī)坐標(biāo)系來(lái)表達(dá)物點(diǎn)的位置 ?為了解決上述的兩個(gè)問(wèn)題,標(biāo)定板應(yīng)運(yùn)而生。標(biāo)定板的第一大作用,確定物點(diǎn)和像點(diǎn)的對(duì)應(yīng)性。這里用到的原理主要是「透視不變性」,打個(gè)比方,你近看一個(gè)人和遠(yuǎn)看一個(gè)人,雖然他的鼻子大小變了,你看鼻子的視角也變了,但是拓?fù)浣Y(jié)構(gòu)肯定是不變的,你也不可能把鼻子看成是嘴巴。
所以在標(biāo)定板中,印刷了拓?fù)浣Y(jié)構(gòu),廣泛應(yīng)用的是棋盤格和圓點(diǎn)格,這兩種之所以成為主流,不僅是因?yàn)樗鼈兊耐負(fù)浣Y(jié)構(gòu)明確且均勻,更重要的是檢測(cè)其拓?fù)浣Y(jié)構(gòu)的算法簡(jiǎn)單且有效。棋盤格檢測(cè)的是角點(diǎn),只要對(duì)拍攝到的棋盤格圖像橫縱兩個(gè)方向計(jì)算梯度就可獲得;而圓點(diǎn)格的檢測(cè)只需要對(duì)拍攝到的圓點(diǎn)格圖樣計(jì)算質(zhì)心即可。假如你開(kāi)發(fā)了一套非常完美的檢測(cè)人臉全部特征的算法,你完全可以用你的照片當(dāng)作標(biāo)定板。按照我的經(jīng)驗(yàn),圓點(diǎn)格的效果應(yīng)該是好于棋盤格,因?yàn)閳A點(diǎn)質(zhì)心的「透視不變性」要比棋盤格的角點(diǎn)穩(wěn)定的多。下圖是同樣尺寸、同樣比例棋盤格和圓點(diǎn)在最大重投影誤差處的誤差對(duì)比,紅色十字是提取的角點(diǎn)/質(zhì)心,綠色圓圈是針孔相機(jī)模型計(jì)算出來(lái)認(rèn)為的角點(diǎn)/質(zhì)心位置。
下圖是棋盤格與圓點(diǎn)格的重投影誤差圖,顯然圓點(diǎn)格的重投影誤差的誤差空間要小。
但是圓點(diǎn)格的檢測(cè)似乎是Halcon的專利(存疑),因此OpenCV和Matlab標(biāo)定工具箱用的是棋盤格,要用圓點(diǎn)格得要自己寫算法。下文中提到的標(biāo)定板說(shuō)的都是棋盤格。標(biāo)定板的第二大作用是把標(biāo)定板中的角點(diǎn)變換到相機(jī)坐標(biāo)系下的坐標(biāo) 。對(duì)于標(biāo)定的初學(xué)者來(lái)說(shuō),很容易忽略的一點(diǎn)是標(biāo)定板是具有標(biāo)定板坐標(biāo)系的。換句話說(shuō),標(biāo)定板中的每個(gè)角點(diǎn),在標(biāo)定板坐標(biāo)系下的位置是確定并且是已知的。
而標(biāo)定板坐標(biāo)系變換到相機(jī)坐標(biāo)系的變換矩陣,我們稱它的元素為外參數(shù),所以在我眼中,相機(jī)標(biāo)定的外參根本就是標(biāo)定內(nèi)參的副產(chǎn)品,它會(huì)隨著標(biāo)定板的擺放不同而不同,由標(biāo)定板坐標(biāo)系變換到相機(jī)坐標(biāo)系的變換矩陣可以由下式表達(dá):
其中, 稱為旋轉(zhuǎn)矩陣, 稱為平移矩陣,下表 代表board to camera。注意這個(gè)坐標(biāo)系的變換是一個(gè)線形變換,反應(yīng)到物理上講,這意味者標(biāo)定板必須盡可能的平,如果標(biāo)定板不平,這個(gè)變換就不是線形的了。我們把這個(gè)變換帶到原本要擬合的方程中去:
如此一來(lái),我們就把能夠把CCD上拍攝的到角點(diǎn)的像素標(biāo)號(hào) 和每一個(gè)角點(diǎn)已知的在標(biāo)定板坐標(biāo)系下的坐標(biāo) 對(duì)應(yīng)起來(lái),通過(guò)各種各樣的姿態(tài)作為樣本,訓(xùn)練出全部參數(shù) 。
至于參數(shù)訓(xùn)練的方法,最小二乘,極大似然估計(jì)等等,很容易找到相關(guān)的資料,在此不再贅述。
如果用OpenCV或Matlab標(biāo)定工具箱進(jìn)行標(biāo)定,需要給出棋盤格的物理尺寸,這其實(shí)就是在建立標(biāo)定板坐標(biāo)系,從測(cè)量的角度講,標(biāo)定板的精度是相機(jī)標(biāo)定精度的基準(zhǔn),是誤差傳遞鏈上的第一個(gè)環(huán)節(jié)。所以為了使針孔相機(jī)模型更逼近真實(shí)相機(jī),對(duì)標(biāo)定板的質(zhì)量有以下要求(按重要性順序):
標(biāo)定板的平面度高,棋盤格是直角;
標(biāo)定板每個(gè)格子尺寸的高一致性;
真實(shí)尺寸與標(biāo)稱尺寸的差異小。
-
成像
+關(guān)注
關(guān)注
2文章
240瀏覽量
30484 -
函數(shù)
+關(guān)注
關(guān)注
3文章
4331瀏覽量
62618 -
OpenCV
+關(guān)注
關(guān)注
31文章
635瀏覽量
41350
原文標(biāo)題:相機(jī)標(biāo)定究竟在標(biāo)定什么?
文章出處:【微信號(hào):機(jī)器視覺(jué)沙龍,微信公眾號(hào):機(jī)器視覺(jué)沙龍】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論