有一天,蟹老板找底下的員工川建國(guó)同學(xué):等蟹老板走后,然后轉(zhuǎn)頭問(wèn)旁邊的學(xué)霸李雷同學(xué):有人反映哦,有時(shí)候我們發(fā)出來(lái)的技術(shù)貼太硬了,不方便去理解,于是,就有了上面這個(gè)嘗試,在開(kāi)始正課之前,我們先講一段故事。如果大家覺(jué)得OK,后面我們將繼續(xù)用這種方式來(lái)講課,如果不OK,請(qǐng)大家在我們?cè)u(píng)論區(qū)提供您寶貴的意見(jiàn)。這次單目相機(jī)標(biāo)定教程,預(yù)計(jì)有三期,第一期講單目相機(jī)成像過(guò)程,第二期講MATALAB和OpenCV的單目相機(jī)標(biāo)定實(shí)踐,第三期則講張正友標(biāo)定法的原理。這里是3D視覺(jué)工坊嘉賓,Atlas博士生計(jì)算機(jī)視覺(jué)大講堂,致力于把計(jì)算機(jī)視覺(jué)知識(shí)講得不那么無(wú)趣!說(shuō)到相機(jī)標(biāo)定,就要先說(shuō)什么是傳感器的標(biāo)定。我們知道,任何傳感器,它都是存在有誤差的,那么狹義上說(shuō),標(biāo)定就是去校正這部分誤差,讓傳感器盡量準(zhǔn)確一點(diǎn)。我們來(lái)看相機(jī)標(biāo)定前后輸出圖像的差別:圖1 相機(jī)標(biāo)定前后輸出圖像的差別有人說(shuō)了,那為什么相機(jī)出廠前,它不提前做好標(biāo)定呢?李雷同學(xué)又鄙夷了一次建國(guó)同學(xué):出廠前相機(jī)標(biāo)定,廠家想做(誰(shuí)不想自己的傳感器準(zhǔn)一點(diǎn)呢),但這個(gè)真還不是廠家懶,它真做不了。因?yàn)橄鄼C(jī)要標(biāo)定的參數(shù),跟相機(jī)實(shí)際的光圈、焦距大小有關(guān),而這兩個(gè)參數(shù),在一般的工業(yè)相機(jī)中都是可調(diào)節(jié)的,所以只能你自己來(lái)標(biāo)定。常見(jiàn)單目相機(jī)標(biāo)定方法是張正友標(biāo)定法,這在很多軟件,比如說(shuō)MATLAB、或者庫(kù)OpenCV中都有相應(yīng)的實(shí)現(xiàn)。至于相機(jī)標(biāo)定,要標(biāo)定哪些參數(shù),先讓我來(lái)和你說(shuō)一下單目相機(jī)的成像模型。哦,對(duì)了,要補(bǔ)充一點(diǎn),我們常說(shuō)的標(biāo)定可不光光指糾正傳感器的誤差,當(dāng)涉及到兩個(gè)或者多個(gè)傳感器的標(biāo)定的時(shí)候,往往還包括計(jì)算出這些傳感器間的相互位置關(guān)系。比如說(shuō)在機(jī)器人系統(tǒng)里,我們經(jīng)常需要在不同坐標(biāo)系下轉(zhuǎn)換位置關(guān)系,那么我們所說(shuō)的一些標(biāo)定還包括標(biāo)定出這些關(guān)節(jié)、傳感器之間的相互位置關(guān)系。再比如說(shuō)我們雙目相機(jī)的標(biāo)定,就包括左相機(jī)、右相機(jī)的傳感器誤差標(biāo)定,還包括它們之間相互位置關(guān)系的這么一個(gè)標(biāo)定。概括一下,常說(shuō)的標(biāo)定包括兩部分內(nèi)容:傳感器誤差的校正、傳感器相互之間的位置關(guān)系。而單目相機(jī)的標(biāo)定主要指前者,傳感器誤差的校正,常用的方法是張正友標(biāo)定法。
實(shí)際上,小孔成像的模型其實(shí)可以看作是針孔相機(jī)模型的基礎(chǔ):
進(jìn)一步地,針孔相機(jī)模型可以簡(jiǎn)化為下面這個(gè)模型:圖3 針孔相機(jī)模型(未翻轉(zhuǎn))圖中,P是物點(diǎn), 是前者在CCD上成像的像點(diǎn),而是相機(jī)的光心,則為成像平面到光心的距離,我們稱之為焦距。實(shí)際上,焦距的定義會(huì)更復(fù)雜,是所有平行光透過(guò)透鏡匯聚一點(diǎn),那一點(diǎn)到透鏡光心的距離,它就涉及到攝影里非常專業(yè)的概念最小彌散圓了,我們之后會(huì)講一期相機(jī)光圈、焦距、景深、視場(chǎng)大小、最佳成像距離的專欄。這里先把模型簡(jiǎn)化一下吧,下面我們來(lái)講整個(gè)成像過(guò)程,在相機(jī)成像模型中,主要有四大坐標(biāo)系:世界坐標(biāo)系、相機(jī)坐標(biāo)系、圖像坐標(biāo)系、像素坐標(biāo)系。世界坐標(biāo)系(3D):世界坐標(biāo)系就是以外界某個(gè)參考點(diǎn)建立的坐標(biāo)系,單位為mm,或者m。相機(jī)坐標(biāo)系(3D):以光心建立相機(jī)坐標(biāo)系,其中軸指向相機(jī)的正前方。圖像坐標(biāo)系(2D):光心在成像平面的投影,也就是點(diǎn)建立另一坐標(biāo)系,稱為圖像坐標(biāo)系,單位為mm。像素坐標(biāo)系(2D):像素坐標(biāo)系是我們最終用戶所看到的,也就是坐標(biāo)系的原點(diǎn)在圖像左上角,單位為像素。那么這中間,我們?cè)趺唇?shí)際物理點(diǎn)(世界坐標(biāo)系)到圖像上點(diǎn)(像素坐標(biāo)系)的一一映射呢?需要三步轉(zhuǎn)換,也就是:這中間,這些坐標(biāo)系有什么差別,它們是怎么轉(zhuǎn)換的?請(qǐng)看下面的文章。2.1世界坐標(biāo)系 -> 相機(jī)坐標(biāo)系
我們知道,世界坐標(biāo)系就是以外界某個(gè)參考點(diǎn)建立的坐標(biāo)系,而相機(jī)坐標(biāo)系則是以相機(jī)的光心作為坐標(biāo)原點(diǎn),光軸的正方向作為Z軸建立的坐標(biāo)系,兩者屬于剛體變換,只需要進(jìn)行旋轉(zhuǎn)和平移,如下所示:圖5 世界坐標(biāo)系到相機(jī)坐標(biāo)系的轉(zhuǎn)換為了統(tǒng)一旋轉(zhuǎn)和平移,我們將其寫為齊次形式,至于為什么要用齊次,我們之后的欄目里也會(huì)說(shuō),總而言之是這樣的。
2.2 相機(jī)坐標(biāo)系 -> 圖像坐標(biāo)系
在完成了世界坐標(biāo)系 -> 相機(jī)坐標(biāo)系的轉(zhuǎn)換后,我們?cè)購(gòu)南鄼C(jī)坐標(biāo)系 -> 圖像坐標(biāo)系。為了方便描述,我們將針孔相機(jī)模型對(duì)稱翻轉(zhuǎn)過(guò)來(lái),如下圖所示,從數(shù)學(xué)的角度,它們是等價(jià)的:想不明白沒(méi)關(guān)系,這里就算是不等價(jià)的,我們就假設(shè)相機(jī)的電子設(shè)備已經(jīng)幫我們做好了這樣一個(gè)翻轉(zhuǎn)先回顧一下前面所說(shuō)的,如我們之前所說(shuō):P是物點(diǎn)、P’是像點(diǎn),現(xiàn)在我們將它翻轉(zhuǎn)過(guò)來(lái)了,記作小寫的p。其中:



? 2.3 圖像坐標(biāo)系 -> 像素坐標(biāo)系在圖像坐標(biāo)系中,坐標(biāo)的原點(diǎn)在圖像中間,而我們平時(shí)處理圖像時(shí)用的坐標(biāo)系,稱為像素坐標(biāo)系,坐標(biāo)系的原點(diǎn)在圖像的左上角,此外它們的度量單位也不同,前者的單位是mm,而后者的單位是像素。如下圖所示,兩個(gè)坐標(biāo)系之間的差別:圖7 圖像坐標(biāo)系和像素坐標(biāo)系的差別
CCD并不是一個(gè)正方形,dx、dy的大小是有所差別的
將其進(jìn)行移項(xiàng),并寫為齊次的形式,有:

總結(jié)一下之前所說(shuō)的四大坐標(biāo)系的關(guān)系:
1.世界坐標(biāo)系->相機(jī)坐標(biāo)系
2.相機(jī)坐標(biāo)系->圖像坐標(biāo)系
3.圖像坐標(biāo)系->像素坐標(biāo)系
那么將這些式子聯(lián)立,最終得(你可以嘗試自己去推導(dǎo)一下,就是幾個(gè)式子代換一下):


這個(gè)公式就是整個(gè)單目相機(jī)在理想情況下的成像公式,可以建立世界坐標(biāo)系到像素坐標(biāo)系的一一映射。
再補(bǔ)充一個(gè)知識(shí)點(diǎn),歸一化平面:
歸一化平面,其實(shí)際是圖像坐標(biāo)系的等比縮放,也就是當(dāng)f=1的情況,主要是便于公式推導(dǎo),它與圖像坐標(biāo)系是等比縮放關(guān)系,只需要乘以f即可完成相互轉(zhuǎn)換。圖9 圖像坐標(biāo)系與歸一化平面關(guān)系

以上是理想情況下世界坐標(biāo)系到像素坐標(biāo)系的轉(zhuǎn)換。而由于相機(jī)制造工藝的原因,其成像過(guò)程中難免存在著畸變,在后續(xù)構(gòu)建精確的三維重建算法前,我們要對(duì)相機(jī)的畸變進(jìn)行矯正,以提高算法重建的精度,這一步驟才稱為相機(jī)標(biāo)定。3.1徑向畸變
徑向畸變?cè)颍涸谙鄼C(jī)制造過(guò)程中,很難保證鏡頭的厚度完全均勻,由于制造工藝的原因,通常為這種情況為中間厚、邊緣薄,因而光線在遠(yuǎn)離透鏡中心的地方,會(huì)發(fā)生更大程度的扭曲,這種現(xiàn)象在魚(yú)眼相機(jī)(桶形畸變)中尤為明顯。徑向畸變主要有兩種類型:枕型畸變和桶型畸變,示意圖如下:

需要注意的是,這里校正,并不是用的系數(shù)越多,整個(gè)矯正結(jié)果越精確,我們應(yīng)該考慮相機(jī)的實(shí)際情況,選擇合適的參數(shù)數(shù)量。
3.2切向畸變
切向畸變?cè)颍呵邢蚧儺a(chǎn)生的原因在于相機(jī)在制造過(guò)程中,成像平面與透鏡平面不平行,產(chǎn)生了透視變換。
這種畸變可以由以下公式描述,它也與距離圖像中心的距離半徑有關(guān):

3.3合并考慮
將徑向畸變和切向畸變合并,只需要將兩個(gè)畸變矯正直接加起來(lái)即可,公式如下:

合并考慮畸變?cè)颍浩鋵?shí)也很簡(jiǎn)單,兩種畸變是同時(shí)發(fā)生在成像過(guò)程中的,發(fā)生的原因也是相互獨(dú)立的,而且也都是關(guān)于距離的表達(dá)式,你似乎也找不到更好的方式來(lái)綜合考慮這兩種誤差,實(shí)踐證明,這種合并考慮畸變的情況效果還不錯(cuò)。我已經(jīng)把所有需要記住的知識(shí)點(diǎn)匯聚在一張圖片上了,請(qǐng)大家對(duì)照著前面的文章去理解:
當(dāng)看完這次推文之后,請(qǐng)大家在腦海里梳理以下幾個(gè)概念:
- 世界坐標(biāo)系、相機(jī)坐標(biāo)系、圖像坐標(biāo)系、像素坐標(biāo)系、歸一化坐標(biāo)系,它們之間的差別是什么,怎么進(jìn)行相互轉(zhuǎn)換?
- 徑向畸變、切向畸變、它們的主要因素、以及如何去校正?
- 最好的話,你自己去畫(huà)這個(gè)圖,去推導(dǎo)一遍公式。雖然你后面公式會(huì)忘,但相信我,3D視覺(jué)領(lǐng)域好多公式,我不需要你記住它,但你要有個(gè)直覺(jué)印象,去推導(dǎo)一遍有助于你真正理解這個(gè)公式。
當(dāng)明白了這些以后,下節(jié)課我們講,怎么通過(guò)張正友標(biāo)定法去獲得要標(biāo)定的參數(shù),標(biāo)定得來(lái)的參數(shù)怎么用,用MATALAB跟OpenCV分別去實(shí)踐,不過(guò)在此之前,你要自己思考以下這些問(wèn)題:- 相機(jī)標(biāo)定,我們究竟要標(biāo)定那些參數(shù)?
- 相機(jī)畸變發(fā)生在四大坐標(biāo)系轉(zhuǎn)換的哪一過(guò)程?
- 假設(shè)我們拿到了這些參數(shù)怎么用?
- 對(duì)于每個(gè)物點(diǎn),在像素坐標(biāo)系下都有唯一像點(diǎn)與之對(duì)應(yīng),那么反過(guò)來(lái)是否成立?
大家還想要我們講什么呢?請(qǐng)踴躍留言!高能預(yù)警,下節(jié)課我們將以視頻的形式來(lái)講解。不過(guò),如果你沒(méi)有好好看這個(gè)相機(jī)成像過(guò)程的文章,下節(jié)課我講的再有趣也是白扯~這里是3D視覺(jué)工坊嘉賓,Atlas博士計(jì)算機(jī)視覺(jué)大講堂,致力于把計(jì)算機(jī)視覺(jué)知識(shí)講得不那么無(wú)趣!本站知識(shí)星球“黃博的機(jī)器學(xué)習(xí)圈子”(92416895)
本站qq群704220115。
加入微信群請(qǐng)掃碼: