還記得當(dāng)年的華南虎照片事件嗎?我們能否從相機(jī)成像的原理來分析得知那是個(gè)紙板老虎?相機(jī)標(biāo)定為什么能夠達(dá)到小于0.01像素誤差的精度?單相機(jī)能進(jìn)行三維測(cè)量嗎?這篇文章的下半部分里,將介紹與這些問題相關(guān)的知識(shí)。
Ⅰ前言
時(shí)間過得好快。自從完成了這篇關(guān)于高精度相機(jī)標(biāo)定的文章的上半部分以來,兩個(gè)多月過去了。這兩個(gè)多月,我每天忙忙碌碌地做著各種工作,這其中也有一些相機(jī)標(biāo)定的工作。轉(zhuǎn)眼已經(jīng)11月,美國各大商店也早已擺滿了節(jié)日相關(guān)的商品。于是我蹬開被窩,決定把這下半部分寫完,這樣今年年底以前還能夠有空完成下一篇文章。
在上半部分里,我描述了針孔成像的原理、相機(jī)成像的模型、以及相機(jī)標(biāo)定的基本原理。在這下半部分,我將介紹相機(jī)標(biāo)定的具體實(shí)施和幾個(gè)基本的應(yīng)用。
Ⅱ相機(jī)的成像與標(biāo)定模型回顧
首先,我們回顧一下相機(jī)成像的數(shù)學(xué)模型。這個(gè)基于小孔成像的模型使得給定一個(gè)世界坐標(biāo)系中的點(diǎn),可以通過理論上的計(jì)算來得到它成像后在圖像中的位置:
當(dāng)考慮鏡頭畸變時(shí),這個(gè)模型要分解為以下三步:
顯然,相機(jī)的標(biāo)定就是把這個(gè)數(shù)學(xué)模型中涉及到的參數(shù)確定下來。這些參數(shù)包括
18個(gè)內(nèi)參數(shù):
6個(gè)外參數(shù):。其中決定了9個(gè)轉(zhuǎn)動(dòng)參數(shù)。
因?yàn)橄鄼C(jī)成像的模型比較復(fù)雜,所以依賴于一張圖像來標(biāo)定相機(jī)是不可靠的。但是我們可以把世界坐標(biāo)固定在標(biāo)定板上,通過轉(zhuǎn)動(dòng)和平移標(biāo)定板來得到多幅不同的圖像。當(dāng)采用M幅標(biāo)定圖像時(shí),未知數(shù)的總數(shù)目是18+6M。 為了可靠、精確地得到這些未知數(shù),一般采用Levenberg-Marquardt非線性最小二乘算法來優(yōu)化如下殘差:
這里,和分別是模型函數(shù)求得的標(biāo)識(shí)控制點(diǎn)的像素坐標(biāo)和實(shí)際圖像中檢測(cè)到的像素坐標(biāo)。
基于以上分析,我們可以看到,相機(jī)標(biāo)定的關(guān)鍵步驟有兩點(diǎn):(1)精確地得到相機(jī)采集到的標(biāo)定板圖像中標(biāo)識(shí)控制點(diǎn)的像素坐標(biāo)位置;(2)運(yùn)用迭代的方法來獲取相機(jī)的內(nèi)外參數(shù)。
Ⅲ 相機(jī)標(biāo)定的實(shí)施
·圖像中標(biāo)識(shí)控制點(diǎn)的位置獲取
如前所述,目前最常用的標(biāo)定板圖像有兩種:棋盤格圖案和圓點(diǎn)(環(huán))圖案。通常情況下,使用圓環(huán)圖案能得到比使用圓點(diǎn)和棋盤格圖案更高的精度。此外,同心圓環(huán)的個(gè)數(shù)可以超過2個(gè)。為了盡可能提高準(zhǔn)確度,圓心的位置可以按照以下步驟來檢測(cè):
1. 利用灰度梯度信息對(duì)圖像進(jìn)行邊緣檢測(cè),常用的算法是Canny邊緣檢測(cè)方法。
2. 搜索每一條連續(xù)的線??紤]到噪聲的干擾,一條線上的點(diǎn)無須像素挨著像素,線可以有斷開,而可允許的斷開距離需要根據(jù)圖像的情況設(shè)定。 3. 對(duì)屬于同一條線上的點(diǎn),用橢圓模擬結(jié)合最小二乘的方法來確定這條線是否是一個(gè)橢圓,如果是,則去除一小部分偏差最大的點(diǎn),重新擬合橢圓并計(jì)算橢圓圓心的坐標(biāo)。
4. 檢查整幅圖像中的圓心數(shù)目是否正確。如果不正確,則需要改變檢測(cè)參數(shù),重復(fù)搜索圓心。
5. 根據(jù)檢測(cè)的圓心進(jìn)行相機(jī)標(biāo)定(詳細(xì)過程見下一節(jié))。
6. 根據(jù)標(biāo)定結(jié)果把各圖像轉(zhuǎn)換為正面圖像,再利用模板匹配的方法得到相應(yīng)的圓心并轉(zhuǎn)換回原始位置。這樣就得到了更準(zhǔn)確的標(biāo)識(shí)控制點(diǎn)的坐標(biāo)。
7. 再一次進(jìn)行相機(jī)標(biāo)定。
采用上面所述的方法再加上一些優(yōu)化手段,相機(jī)標(biāo)定的標(biāo)識(shí)控制點(diǎn)的再次投影誤差可控制在0.01像素以下,相比之下,最常用的OpenCV相機(jī)標(biāo)定庫和MATLAB相機(jī)標(biāo)定工具箱只能得到0.1像素左右的誤差。
·標(biāo)定過程的算法實(shí)施
Levenberg-Marquart非線性最小二乘算法是一種簡(jiǎn)單而非常強(qiáng)大的算法,它本質(zhì)上是把高斯-牛頓算法和梯度下降算法結(jié)合了起來。大家如果沒有用過,有時(shí)間的話可以自己寫代碼試一下。當(dāng)然,如果實(shí)在覺得自己一行行地寫這個(gè)相機(jī)標(biāo)定優(yōu)化的代碼有難度,還有一個(gè)方法就是使用谷歌的開源庫Ceres Solver以及相關(guān)的開源相機(jī)標(biāo)定代碼。現(xiàn)在,無論采用哪種方案,大家應(yīng)該可以輕松搞定高精度相機(jī)標(biāo)定了吧?!
其實(shí)事情還沒有那么簡(jiǎn)單。原因是Levenberg-Marquart算法給出的是局部最優(yōu)解,而不一定是全局最優(yōu)解。為了解決這一問題,我們必須在迭代之前賦給標(biāo)定參數(shù)們一些可靠的初始值。在所有的內(nèi)參數(shù)中,我們其實(shí)只需要初始化α和β,其它的參數(shù)除了u0and v0設(shè)為圖像寬度和高度的一半之外,一律設(shè)為0即可。當(dāng)然,外參數(shù)是需要全部初始化的。
那么,如何初始化呢?其實(shí)也不難,但是具體的推導(dǎo)過程會(huì)需要一些篇幅。我建議大家去讀一下Elan Dubrofsky的碩士論文[1]和張正友的那篇經(jīng)典文章[2],就可以了!
此外,前面其實(shí)忽視了一個(gè)技術(shù)細(xì)節(jié),就是關(guān)于旋轉(zhuǎn)矩陣和它相應(yīng)的旋轉(zhuǎn)向量。它們之間的互相轉(zhuǎn)換,沒什么難度。但是迭代算法所需要的相關(guān)求導(dǎo),推導(dǎo)起來會(huì)讓人有些頭大??v然不能一一列出推導(dǎo)過程,但本著嚴(yán)謹(jǐn)求實(shí)又簡(jiǎn)單快捷的科研精神,我把初始化和旋轉(zhuǎn)矩陣相關(guān)的關(guān)鍵公式列在這里。我相信如果你了解了Levenberg-Marquart算法,又讀了前面所提到的相關(guān)文章,是能夠看到這些公式的有用之處的!
旋轉(zhuǎn)矩陣對(duì)旋轉(zhuǎn)向量的導(dǎo)數(shù):
這里,
內(nèi)參的初始化公式:
其中
H的計(jì)算以及實(shí)際編程中對(duì)一些變量的正則化,參考一下前述的文獻(xiàn)就一目了然了。
外參的初始化公式:
其中h的計(jì)算與上面的H類似,繼續(xù)參考一下文獻(xiàn)即可。
下面的動(dòng)圖,顯示了上述相機(jī)標(biāo)定的過程。
*高精度相機(jī)標(biāo)定的步驟演示
Ⅳ 相機(jī)標(biāo)定的擴(kuò)展
得益于使用圓環(huán)圖案、利用模板匹配更新圓心位置、以及使用復(fù)雜的鏡頭畸變模型等措施,上述的相機(jī)標(biāo)定方法在實(shí)測(cè)中可以達(dá)到再次投影誤差在0.005-0.01像素的范圍內(nèi)。而在后續(xù)的三維成像應(yīng)用中,可以容易地幫助三維成像達(dá)到微米級(jí)的精度。但是,上述的相機(jī)標(biāo)定的一個(gè)主要缺陷是它依賴于使用帶標(biāo)定圖案的標(biāo)定板。
在小尺度視野的相機(jī)標(biāo)定中,尚可以使用光刻的微小標(biāo)定板和變更的成像模型來實(shí)現(xiàn)標(biāo)定。而在稍大尺度視野下的相機(jī)標(biāo)定中,可以使用編碼的標(biāo)定圖案,因?yàn)閳D案是可以隨意放置的,如下圖所示的幾塊標(biāo)定板可以同時(shí)且隨意地放在視野中。
*編碼的標(biāo)定圖案可以用來在較大視野下的相機(jī)標(biāo)定
然而,在超大的視野下,采用標(biāo)定板的相機(jī)標(biāo)定方法是不可行的。如下圖中對(duì)水壩位移的監(jiān)測(cè)應(yīng)用。關(guān)于這種情況的高精度標(biāo)定方法,我將在接下來的幾篇文章中有介紹,請(qǐng)耐心等待。
*采用標(biāo)定板的相機(jī)標(biāo)定方法在超大視野應(yīng)用中是不可行的
Ⅴ相機(jī)標(biāo)定的幾個(gè)基本應(yīng)用
到此,相信大家已經(jīng)清楚相機(jī)標(biāo)定是怎么回事和怎么實(shí)施了。如果還有不明白的地方,就請(qǐng)把這篇文章的上下兩部分再仔細(xì)讀一遍。如果還需要幫助,那就......
但是,事情還沒有結(jié)束。
既然我們花了這么長的篇幅介紹高精度相機(jī)標(biāo)定,那就索性再多介紹一點(diǎn)兒關(guān)于相機(jī)標(biāo)定的基本應(yīng)用。比如,看下面這張幾周前國慶70周年閱兵的一個(gè)鏡頭。假設(shè)相機(jī)或者攝像機(jī)是標(biāo)定過了的話(注:這個(gè)標(biāo)定其實(shí)屬于超大視野標(biāo)定),我們能夠得到什么額外的常規(guī)相機(jī)不能提供的信息呢?
*國慶70周年閱兵現(xiàn)場(chǎng)的一個(gè)鏡頭
為了回答這個(gè)問題,我們先再一次回顧一下相機(jī)的成像數(shù)學(xué)模型:
當(dāng)我們拿到一幅由已經(jīng)標(biāo)定過的相機(jī)拍攝的照片后,對(duì)于照片中每一個(gè)基本單元—像素,上面公式中有四個(gè)未知量:。方程有幾個(gè)?只有三個(gè)!這就意味著我們是不能解得那四個(gè)未知量的。這倒也符合我們的常識(shí):?jiǎn)螒{單個(gè)相機(jī)是不能用來做三維成像的。接下來,問題來了。我們本著愛鉆研的精神,想:能不能引入一些額外信息,使得方程可解呢?答案是肯定的。
我們知道天安門城樓上***畫像的尺寸是有規(guī)格的,于是查了一下:高6.4米,寬5米?,F(xiàn)在,我們?nèi)芜x這個(gè)畫像的三個(gè)角點(diǎn),那么顯然上面的公式將給我們總共12個(gè)未知量和9個(gè)方程。與此同時(shí),這12個(gè)未知量中的9個(gè)三維坐標(biāo)還會(huì)根據(jù)畫像的尺寸組成下面三個(gè)公式:
完美!因?yàn)楝F(xiàn)在我們有12個(gè)未知量和12個(gè)方程,問題可以解決了!也就是說,我們是可以通過解方程來得到畫像的三維坐標(biāo)的。即便畫像在圖像中不是正對(duì)著相機(jī)而是傾斜的,也沒有問題。另外,我們也可以得到其它的一些信息,比如拍攝者距離天安門有多遠(yuǎn)。這個(gè)例子在當(dāng)前的熱門領(lǐng)域—網(wǎng)售和物流—是有重要應(yīng)用的,它可以檢測(cè)商品和包裝盒的姿態(tài)來配合機(jī)械臂進(jìn)行分揀。
在寫上面單相機(jī)進(jìn)行三維測(cè)量的過程中,我想起了多年前的華南虎照片一事。相信大家都知道此事,實(shí)在不知道怎么一回事的就百度一下吧。這件事情的核心,就是陜西省安康市某村一個(gè)叫周正龍村民,從年畫上復(fù)印了一張老虎的圖片,再貼到紙板上并立到草叢中,然后在幾米到10米不等的距離處拍了幾十張照片。之后,宣稱自己拍攝到了瀕危動(dòng)物野生華南虎。一出鬧劇之后,陜西省政府正式通報(bào),照片中的老虎其實(shí)是紙板老虎。
*曾經(jīng)轟動(dòng)一時(shí)的周正龍所拍攝的“華南虎”照片
我提這件事情的原因是想給大家出一道“作業(yè)題”:根據(jù)周正龍所拍的一系列照片,雖然我們不能去標(biāo)定當(dāng)時(shí)的相機(jī),通過本篇文章所介紹的知識(shí),你能否通過計(jì)算分析得出那個(gè)老虎是個(gè)平面老虎?
讓我們?cè)倩氐剿膫€(gè)未知量和三個(gè)方程?,F(xiàn)在假設(shè)我們有兩個(gè)相機(jī),在共同的世界坐標(biāo)系下標(biāo)定后,那么對(duì)于物體或場(chǎng)景中的任何一個(gè)實(shí)際點(diǎn)來說,如果它能同時(shí)出現(xiàn)在兩個(gè)相機(jī)分別拍攝的照片中,總共就有五個(gè)未知量:和六個(gè)方程。也就是,未知量居然比方程數(shù)還少一個(gè)!毫無疑問,問題是可解的。這也就是我們常說的立體視覺。例如下圖中的人臉三維成像。
*使用雙相機(jī)的人臉三維成像
當(dāng)然,這種基于雙相機(jī)的三維成像有一個(gè)難點(diǎn):左右圖像的匹配。也就是對(duì)于一幅圖像中的一個(gè)像素,必須在另一幅圖像中找到對(duì)應(yīng)的另一個(gè)像素。為了使匹配容易,一些產(chǎn)品例如蘋果手機(jī)的三維人臉成像傳感器、英特爾的RealSense三維測(cè)量傳感器,都會(huì)采用紅外的點(diǎn)結(jié)構(gòu)光來輔助圖像的匹配。關(guān)于這個(gè)話題,我將在以后專門寫一篇文章。
事情到這里,細(xì)心的讀者也許會(huì)有一個(gè)疑問:我們既然“一不小心”把未知量數(shù)目減少得比方程數(shù)目多了從而使得事情變復(fù)雜了—也就是需要左右圖像的匹配,那么我們能否把未知量數(shù)目增加一個(gè)回去,從而使得匹配的問題變簡(jiǎn)單呢?
答案是可以的。比如我們只匹配水平方向的像素,那么未知量的數(shù)目是六個(gè):,結(jié)合六個(gè)方程,問題是可解的!可是,怎么實(shí)現(xiàn)呢?
這時(shí),有的讀者也許會(huì)馬上想到:Image Rectification 呀!不錯(cuò),Image Rectification正是只匹配了一個(gè)方向!不過遺憾的是,如果這個(gè)Rectification的方案可行,那么有了圖像后,馬上解方程好了,根本不再需要做任何匹配。而那個(gè)Middleburry數(shù)據(jù)庫和評(píng)估網(wǎng)站也可以馬上關(guān)掉了。顯而易見,這個(gè)方案是有問題的。至于原因,就再留給大家思考好了!
審核編輯:劉清
-
matlab
+關(guān)注
關(guān)注
185文章
2976瀏覽量
230490 -
OpenCV
+關(guān)注
關(guān)注
31文章
635瀏覽量
41355 -
相機(jī)成像
+關(guān)注
關(guān)注
0文章
15瀏覽量
5651
原文標(biāo)題:重磅!如何做到相機(jī)高精度標(biāo)定?
文章出處:【微信號(hào):3D視覺工坊,微信公眾號(hào):3D視覺工坊】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論