計算機與機器視覺中的高精度相機標定 (下)

還記得當年的華南虎照片事件嗎?我們能否從相機成像的原理來分析得知那是個紙板老虎?相機標定為什麼能夠達到小於0.01像素誤差的精度?單相機能進行三維測量嗎?這篇文章的下半部分裡,將介紹與這些問題相關的知識。

Ⅰ 前言

時間過得好快。自從完成了這篇關於高精度相機標定的文章的上半部分以來,兩個多月過去了。這兩個多月,我每天忙忙碌碌地做著各種工作,這其中也有一些相機標定的工作。轉眼已經11月,美國各大商店也早已擺滿了節日相關的商品。於是我蹬開被窩,決定把這下半部分寫完,這樣今年年底以前還能夠有空完成下一篇文章。

在上半部分裡,我描述了針孔成像的原理、相機成像的模型、以及相機標定的基本原理。在這下半部分,我將介紹相機標定的具體實施和幾個基本的應用。

Ⅱ 相機的成像與標定模型回顧

首先,我們回顧一下相機成像的數學模型。這個基於小孔成像的模型使得給定一個世界座標系中的點,可以通過理論上的計算來得到它成像後在圖像中的位置

技術分享 | 計算機與機器視覺中的高精度相機標定 (下)

技術分享 | 計算機與機器視覺中的高精度相機標定 (下)

當考慮鏡頭畸變時,這個模型要分解為以下三步:

技術分享 | 計算機與機器視覺中的高精度相機標定 (下)
技術分享 | 計算機與機器視覺中的高精度相機標定 (下)
技術分享 | 計算機與機器視覺中的高精度相機標定 (下)

顯然,相機的標定就是把這個數學模型中涉及到的參數確定下來。這些參數包括

  • 18個內參數:
技術分享 | 計算機與機器視覺中的高精度相機標定 (下)
  • 6個外參數:
技術分享 | 計算機與機器視覺中的高精度相機標定 (下)
  • 。其中
技術分享 | 計算機與機器視覺中的高精度相機標定 (下)
  • 決定了9個轉動參數
技術分享 | 計算機與機器視覺中的高精度相機標定 (下)

因為相機成像的模型比較複雜,所以依賴於一張圖像來標定相機是不可靠的。但是我們可以把世界座標固定在標定板上,通過轉動和平移標定板來得到多幅不同的圖像。當採用M幅標定圖像時,未知數的總數目是18+6M。

為了可靠、精確地得到這些未知數,一般採用Levenberg-Marquardt非線性最小二乘算法來優化如下殘差:

技術分享 | 計算機與機器視覺中的高精度相機標定 (下)

這裡,

技術分享 | 計算機與機器視覺中的高精度相機標定 (下)

技術分享 | 計算機與機器視覺中的高精度相機標定 (下)

分別是模型函數求得的標識控制點的像素座標和實際圖像中檢測到的像素座標。

基於以上分析,我們可以看到,相機標定的關鍵步驟有兩點:(1)精確地得到相機採集到的標定板圖像中標識控制點的像素座標位置;(2)運用迭代的方法來獲取相機的內外參數。

Ⅲ 相機標定的實施

·圖像中標識控制點的位置獲取

如前所述,目前最常用的標定板圖像有兩種:棋盤格圖案圓點(環)圖案。通常情況下,使用圓環圖案能得到比使用圓點和棋盤格圖案更高的精度。此外,同心圓環的個數可以超過2個。為了儘可能提高準確度,圓心的位置可以按照以下步驟來檢測:

1. 利用灰度梯度信息對圖像進行邊緣檢測,常用的算法是Canny邊緣檢測方法。

2. 搜索每一條連續的線。考慮到噪聲的干擾,一條線上的點無須像素挨著像素,線可以有斷開,而可允許的斷開距離需要根據圖像的情況設定。

3. 對屬於同一條線上的點,用橢圓模擬結合最小二乘的方法來確定這條線是否是一個橢圓,如果是,則去除一小部分偏差最大的點,重新擬合橢圓並計算橢圓圓心的座標。

4. 檢查整幅圖像中的圓心數目是否正確。如果不正確,則需要改變檢測參數,重複搜索圓心。

5. 根據檢測的圓心進行相機標定(詳細過程見下一節)。

6. 根據標定結果把各圖像轉換為正面圖像,再利用模板匹配的方法得到相應的圓心並轉換回原始位置。這樣就得到了更準確的標識控制點的座標。

7. 再一次進行相機標定。

採用上面所述的方法再加上一些優化手段,相機標定的標識控制點的再次投影誤差可控制在0.01像素以下,相比之下,最常用的OpenCV相機標定庫和MATLAB相機標定工具箱只能得到0.1像素左右的誤差。

·標定過程的算法實施

Levenberg-Marquart非線性最小二乘算法是一種簡單而非常強大的算法,它本質上是把高斯-牛頓算法和梯度下降算法結合了起來。大家如果沒有用過,有時間的話可以自己寫代碼試一下。當然,如果實在覺得自己一行行地寫這個相機標定優化的代碼有難度,還有一個方法就是使用谷歌的開源庫Ceres Solver以及相關的開源相機標定代碼。現在,無論採用哪種方案,大家應該可以輕鬆搞定高精度相機標定了吧?!

其實事情還沒有那麼簡單。原因是Levenberg-Marquart算法給出的是局部最優解,而不一定是全局最優解。為了解決這一問題,我們必須在迭代之前賦給標定參數們一些可靠的初始值。在所有的內參數中,我們其實只需要初始化α和β,其它的參數除了u0and v0設為圖像寬度和高度的一半之外,一律設為0即可。當然,外參數是需要全部初始化的。

那麼,如何初始化呢?其實也不難,但是具體的推導過程會需要一些篇幅。我建議大家去讀一下Elan Dubrofsky的碩士論文[1]和張正友的那篇經典文章[2],就可以了!

此外,前面其實忽視了一個技術細節,就是關於旋轉矩陣和它相應的旋轉向量。它們之間的互相轉換,沒什麼難度。但是迭代算法所需要的相關求導,推導起來會讓人有些頭大。縱然不能一一列出推導過程,但本著嚴謹求實又簡單快捷的科研精神,我把初始化和旋轉矩陣相關的關鍵公式列在這裡。我相信如果你瞭解了Levenberg-Marquart算法,又讀了前面所提到的相關文章,是能夠看到這些公式的有用之處的!

旋轉矩陣對旋轉向量的導數:

技術分享 | 計算機與機器視覺中的高精度相機標定 (下)

這裡,

技術分享 | 計算機與機器視覺中的高精度相機標定 (下)
技術分享 | 計算機與機器視覺中的高精度相機標定 (下)
技術分享 | 計算機與機器視覺中的高精度相機標定 (下)
技術分享 | 計算機與機器視覺中的高精度相機標定 (下)

內參的初始化公式:

技術分享 | 計算機與機器視覺中的高精度相機標定 (下)

其中

技術分享 | 計算機與機器視覺中的高精度相機標定 (下)

H的計算以及實際編程中對一些變量的正則化,參考一下前述的文獻就一目瞭然了。

外參的初始化公式:

技術分享 | 計算機與機器視覺中的高精度相機標定 (下)

其中h的計算與上面的H類似,繼續參考一下文獻即可。

下面的動圖,顯示了上述相機標定的過程。

技術分享 | 計算機與機器視覺中的高精度相機標定 (下)

*高精度相機標定的步驟演示

Ⅳ 相機標定的擴展

得益於使用圓環圖案、利用模板匹配更新圓心位置、以及使用複雜的鏡頭畸變模型等措施,上述的相機標定方法在實測中可以達到再次投影誤差在0.005-0.01像素的範圍內。而在後續的三維成像應用中,可以容易地幫助三維成像達到微米級的精度。但是,上述的相機標定的一個主要缺陷是它依賴於使用帶標定圖案的標定板。在小尺度視野的相機標定中,尚可以使用光刻的微小標定板和變更的成像模型來實現標定。而在稍大尺度視野下的相機標定中,可以使用編碼的標定圖案,因為圖案是可以隨意放置的,如下圖所示的幾塊標定板可以同時且隨意地放在視野中。

技術分享 | 計算機與機器視覺中的高精度相機標定 (下)

*編碼的標定圖案可以用來在較大視野下的相機標定

然而,在超大的視野下,採用標定板的相機標定方法是不可行的。如下圖中對水壩位移的監測應用。關於這種情況的高精度標定方法,我將在接下來的幾篇文章中有介紹,請耐心等待。

技術分享 | 計算機與機器視覺中的高精度相機標定 (下)

*採用標定板的相機標定方法在超大視野應用中是不可行的

Ⅴ 相機標定的幾個基本應用

到此,相信大家已經清楚相機標定是怎麼回事和怎麼實施了。如果還有不明白的地方,就請把這篇文章的上下兩部分再仔細讀一遍。如果還需要幫助,那就......

但是,事情還沒有結束。

既然我們花了這麼長的篇幅介紹高精度相機標定,那就索性再多介紹一點兒關於相機標定的基本應用。比如,看下面這張幾周前國慶70週年閱兵的一個鏡頭。假設相機或者攝像機是標定過了的話(注:這個標定其實屬於超大視野標定),我們能夠得到什麼額外的常規相機不能提供的信息呢?

技術分享 | 計算機與機器視覺中的高精度相機標定 (下)

*國慶70週年閱兵現場的一個鏡頭

為了回答這個問題,我們先再一次回顧一下相機的成像數學模型:

技術分享 | 計算機與機器視覺中的高精度相機標定 (下)

當我們拿到一幅由已經標定過的相機拍攝的照片後,對於照片中每一個基本單元—像素,上面公式中有四個未知量:

技術分享 | 計算機與機器視覺中的高精度相機標定 (下)

。方程有幾個?只有三個!這就意味著我們是不能解得那四個未知量的。這倒也符合我們的常識:單憑單個相機是不能用來做三維成像的。接下來,問題來了。我們本著愛鑽研的精神,想:能不能引入一些額外信息,使得方程可解呢?答案是肯定的。

我們知道天安門城樓上毛澤東畫像的尺寸是有規格的,於是查了一下:高6.4米,寬5米。現在,我們任選這個畫像的三個角點,那麼顯然上面的公式將給我們總共12個未知量和9個方程。與此同時,這12個未知量中的9個三維座標還會根據畫像的尺寸組成下面三個公式:

技術分享 | 計算機與機器視覺中的高精度相機標定 (下)

完美!因為現在我們有12個未知量和12個方程,問題可以解決了!也就是說,我們是可以通過解方程來得到畫像的三維座標的。即便畫像在圖像中不是正對著相機而是傾斜的,也沒有問題。另外,我們也可以得到其它的一些信息,比如拍攝者距離天安門有多遠。這個例子在當前的熱門領域—網售和物流—是有重要應用的,它可以檢測商品和包裝盒的姿態來配合機械臂進行分揀。

在寫上面單相機進行三維測量的過程中,我想起了多年前的華南虎照片一事。相信大家都知道此事,實在不知道怎麼一回事的就百度一下吧。這件事情的核心,就是陝西省安康市某村一個叫周正龍村民,從年畫上覆印了一張老虎的圖片,再貼到紙板上並立到草叢中,然後在幾米到10米不等的距離處拍了幾十張照片。之後,宣稱自己拍攝到了瀕危動物野生華南虎。一出鬧劇之後,陝西省政府正式通報,照片中的老虎其實是紙板老虎。

技術分享 | 計算機與機器視覺中的高精度相機標定 (下)

*曾經轟動一時的周正龍所拍攝的“華南虎”照片

我提這件事情的原因是想給大家出一道“作業題”:根據周正龍所拍的一系列照片,雖然我們不能去標定當時的相機,通過本篇文章所介紹的知識,你能否通過計算分析得出那個老虎是個平面老虎?

讓我們再回到四個未知量和三個方程。現在假設我們有兩個相機,在共同的世界座標系下標定後,那麼對於物體或場景中的任何一個實際點來說,如果它能同時出現在兩個相機分別拍攝的照片中,總共就有五個未知量:

技術分享 | 計算機與機器視覺中的高精度相機標定 (下)

和六個方程。也就是,未知量居然比方程數還少一個!毫無疑問,問題是可解的。這也就是我們常說的立體視覺。例如下圖中的人臉三維成像。

技術分享 | 計算機與機器視覺中的高精度相機標定 (下)

*使用雙相機的人臉三維成像

當然,這種基於雙相機的三維成像有一個難點:左右圖像的匹配。也就是對於一幅圖像中的一個像素

技術分享 | 計算機與機器視覺中的高精度相機標定 (下)

,必須在另一幅圖像中找到對應的另一個像素

技術分享 | 計算機與機器視覺中的高精度相機標定 (下)

。為了使匹配容易,一些產品例如蘋果手機的三維人臉成像傳感器、英特爾的RealSense三維測量傳感器,都會採用紅外的點結構光來輔助圖像的匹配。關於這個話題,我將在以後專門寫一篇文章。

事情到這裡,細心的讀者也許會有一個疑問:我們既然“一不小心”把未知量數目減少得比方程數目多了從而使得事情變複雜了—也就是需要左右圖像的匹配,那麼我們能否把未知量數目增加一個回去,從而使得匹配的問題變簡單呢?

答案是可以的。比如我們只匹配水平方向的像素,那麼未知量的數目是六個:

技術分享 | 計算機與機器視覺中的高精度相機標定 (下)

,結合六個方程,問題是可解的!可是,怎麼實現呢?

這時,有的讀者也許會馬上想到:Image Rectification 呀!不錯,Image Rectification正是隻匹配了一個方向!不過遺憾的是,如果這個Rectification的方案可行,那麼有了圖像後,馬上解方程好了,根本不再需要做任何匹配。而那個Middleburry數據庫和評估網站也可以馬上關掉了。顯而易見,這個方案是有問題的。至於原因,就再留給大家思考好了!

可行的方案是什麼呢?請允許我繼續賣個關子,鼓勵大家思考一下好了。在本篇結束之前,趁機給大家一個提示:下面這一段基於高精度相機標定而進行的三維成像,正是採用了此方案。

*基於高精度相機標定進行的三維成像

本文已經接近結束,我也該拉上被窩了。文中提到的三個問題,你是否有了答案?為了拖更,這些答案我們下一次再公佈吧。如果讀者在閱讀過程中有疑問,可以關注我們公司的公眾號留言進行交流,我們稍後也會推出技術論壇和技術交流群,方便大家相互交流相互學習。

參考文獻:

[1] Elan Dubrofsky,Homography Estimation, Master's thesis, University of British Columbia, (2009)http://cseweb.ucsd.edu/classes/wi07/cse252a/homography_estimation/homography_estimation.pdf

[2] Z. Zhang, "A flexible new technique forcamera calibration'", IEEE Transactions on Pattern Analysis and MachineIntelligence, Vol.22, No.11, pages 1330–1334, 2000.http://research.microsoft.com/en-us/um/people/zhang/Papers/TR98-71.pdf


分享到:


相關文章: