0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

相機標定為什么能夠達到小于0.01像素誤差的精度?

3D視覺工坊 ? 來源:如本科技RVBUST ? 作者:王朝陽 ? 2022-11-22 10:34 ? 次閱讀

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

Ⅰ前言

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

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

Ⅱ相機的成像與標定模型回顧
首先,我們回顧一下相機成像的數(shù)學模型。這個基于小孔成像的模型使得給定一個世界坐標系中的點,可以通過理論上的計算來得到它成像后在圖像中的位置3b15c83e-675c-11ed-8abf-dac502259ad0.png

3b315720-675c-11ed-8abf-dac502259ad0.png

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

3b4e620c-675c-11ed-8abf-dac502259ad0.png

3b6be084-675c-11ed-8abf-dac502259ad0.png

3b844fc0-675c-11ed-8abf-dac502259ad0.png

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

18個內參數(shù):

3b9bf954-675c-11ed-8abf-dac502259ad0.png

6個外參數(shù):3bb9e8ec-675c-11ed-8abf-dac502259ad0.png。其中3bf26f78-675c-11ed-8abf-dac502259ad0.png決定了9個轉動參數(shù)3c309032-675c-11ed-8abf-dac502259ad0.png。

因為相機成像的模型比較復雜,所以依賴于一張圖像來標定相機是不可靠的。但是我們可以把世界坐標固定在標定板上,通過轉動和平移標定板來得到多幅不同的圖像。當采用M幅標定圖像時,未知數(shù)的總數(shù)目是18+6M。 為了可靠、精確地得到這些未知數(shù),一般采用Levenberg-Marquardt非線性最小二乘算法來優(yōu)化如下殘差: 3c437012-675c-11ed-8abf-dac502259ad0.png

這里,3c5ce150-675c-11ed-8abf-dac502259ad0.png3c6fd3a0-675c-11ed-8abf-dac502259ad0.png分別是模型函數(shù)求得的標識控制點的像素坐標和實際圖像中檢測到的像素坐標。

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

Ⅲ 相機標定的實施

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

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

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

2. 搜索每一條連續(xù)的線。考慮到噪聲的干擾,一條線上的點無須像素挨著像素,線可以有斷開,而可允許的斷開距離需要根據(jù)圖像的情況設定。 3. 對屬于同一條線上的點,用橢圓模擬結合最小二乘的方法來確定這條線是否是一個橢圓,如果是,則去除一小部分偏差最大的點,重新擬合橢圓并計算橢圓圓心的坐標。

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

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

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

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

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

·標定過程的算法實施

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

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

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

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

旋轉矩陣對旋轉向量的導數(shù):

3c835880-675c-11ed-8abf-dac502259ad0.png

這里,

3cb2b08a-675c-11ed-8abf-dac502259ad0.jpg

3cca0bc2-675c-11ed-8abf-dac502259ad0.jpg

3cd64cca-675c-11ed-8abf-dac502259ad0.jpg

3ce6d0a4-675c-11ed-8abf-dac502259ad0.png

內參的初始化公式:

3d017d8c-675c-11ed-8abf-dac502259ad0.jpg

其中

3d182b22-675c-11ed-8abf-dac502259ad0.png

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

外參的初始化公式:

3d2c49ae-675c-11ed-8abf-dac502259ad0.jpg

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

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

3d4ee23e-675c-11ed-8abf-dac502259ad0.gif

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

Ⅳ 相機標定的擴展

得益于使用圓環(huán)圖案、利用模板匹配更新圓心位置、以及使用復雜的鏡頭畸變模型等措施,上述的相機標定方法在實測中可以達到再次投影誤差在0.005-0.01像素的范圍內。而在后續(xù)的三維成像應用中,可以容易地幫助三維成像達到微米級的精度。但是,上述的相機標定的一個主要缺陷是它依賴于使用帶標定圖案的標定板。

在小尺度視野的相機標定中,尚可以使用光刻的微小標定板和變更的成像模型來實現(xiàn)標定。而在稍大尺度視野下的相機標定中,可以使用編碼的標定圖案,因為圖案是可以隨意放置的,如下圖所示的幾塊標定板可以同時且隨意地放在視野中。

41e469a4-675c-11ed-8abf-dac502259ad0.jpg

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

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

42146e2e-675c-11ed-8abf-dac502259ad0.jpg

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

相機標定的幾個基本應用

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

但是,事情還沒有結束。

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

4225bc42-675c-11ed-8abf-dac502259ad0.jpg

*國慶70周年閱兵現(xiàn)場的一個鏡頭

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

4249b426-675c-11ed-8abf-dac502259ad0.jpg

當我們拿到一幅由已經標定過的相機拍攝的照片后,對于照片中每一個基本單元—像素,上面公式中有四個未知量:426f664e-675c-11ed-8abf-dac502259ad0.png。方程有幾個?只有三個!這就意味著我們是不能解得那四個未知量的。這倒也符合我們的常識:單憑單個相機是不能用來做三維成像的。接下來,問題來了。我們本著愛鉆研的精神,想:能不能引入一些額外信息,使得方程可解呢?答案是肯定的。

我們知道天安門城樓上***畫像的尺寸是有規(guī)格的,于是查了一下:高6.4米,寬5米?,F(xiàn)在,我們任選這個畫像的三個角點,那么顯然上面的公式將給我們總共12個未知量和9個方程。與此同時,這12個未知量中的9個三維坐標還會根據(jù)畫像的尺寸組成下面三個公式:

428436dc-675c-11ed-8abf-dac502259ad0.jpg

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

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

42a26c42-675c-11ed-8abf-dac502259ad0.jpg

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

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

讓我們再回到四個未知量和三個方程?,F(xiàn)在假設我們有兩個相機,在共同的世界坐標系下標定后,那么對于物體或場景中的任何一個實際點來說,如果它能同時出現(xiàn)在兩個相機分別拍攝的照片中,總共就有五個未知量:42b80778-675c-11ed-8abf-dac502259ad0.png和六個方程。也就是,未知量居然比方程數(shù)還少一個!毫無疑問,問題是可解的。這也就是我們常說的立體視覺。例如下圖中的人臉三維成像。

42c8420a-675c-11ed-8abf-dac502259ad0.jpg

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

當然,這種基于雙相機的三維成像有一個難點:左右圖像的匹配。也就是對于一幅圖像中的一個像素42ded5e2-675c-11ed-8abf-dac502259ad0.png,必須在另一幅圖像中找到對應的另一個像素42fcd36c-675c-11ed-8abf-dac502259ad0.png。為了使匹配容易,一些產品例如蘋果手機的三維人臉成像傳感器、英特爾的RealSense三維測量傳感器,都會采用紅外的點結構光來輔助圖像的匹配。關于這個話題,我將在以后專門寫一篇文章。

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

答案是可以的。比如我們只匹配水平方向的像素,那么未知量的數(shù)目是六個:43183986-675c-11ed-8abf-dac502259ad0.png,結合六個方程,問題是可解的!可是,怎么實現(xiàn)呢?

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






審核編輯:劉清

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • matlab
    +關注

    關注

    181

    文章

    2960

    瀏覽量

    230027
  • OpenCV
    +關注

    關注

    29

    文章

    624

    瀏覽量

    41214
  • 相機成像
    +關注

    關注

    0

    文章

    15

    瀏覽量

    5634

原文標題:重磅!如何做到相機高精度標定?

文章出處:【微信號:3D視覺工坊,微信公眾號:3D視覺工坊】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    使用LMH7322測量脈沖占空比,誤差精度達到0.1怎么改進?

    上圖是我用 LMH7322 高速比較器 測試占空比時輸出的波形 ,測試頻率為:100HZ---5MHZ,誤差精度達到 0.1 ,未能達到我想要的
    發(fā)表于 08-30 07:44

    維視圖像告訴您工業(yè)相機選擇的一般規(guī)則

    定位的誤差,將視野比物體適當放大),假如能夠取到很好的圖像(比如可以打背光),而且我們軟件的測量精度可以考慮1/2亞像素精度,那么我們需要的
    發(fā)表于 06-18 17:18

    關于LabVIEW相機標定的問題?。。。∏蠼?/a>

    單元換算到實際單位時的大小,然后根據(jù)像素坐標計算實際坐標,那么如果我用相似三角形的原理的話,是不是可以結合它來使用而不進行相機標定求各位迷惑的和搞清楚的人都說一下你們的見解??!謝謝!!
    發(fā)表于 05-20 15:49

    關于工業(yè)相機和鏡頭的選型

    。再看看景深是否有符合我們要求的鏡頭。 接下來在看看這個精度,相機感應片是有每個很小的像源組成的,靶面尺寸就是通過像素值*像源尺寸得到的邊緣距離,在整個工業(yè)加工過程中,會產生一的誤差,
    發(fā)表于 01-07 11:41

    請問labview標定怎么提高測量精度?

    0.6mm,但是實驗要求測量誤差在±0.1mm,所以想問一下大家有沒有做過類似labview的標定,有沒有方法提高測量精度??在此謝過了[抱拳]。
    發(fā)表于 11-10 11:21

    MK系列光學定位相機 工業(yè)相機

    時傳輸給后端,供二次開發(fā)使用。 MK光學定位相機特點采用千兆網接口,POE供電,單網線完成供電和數(shù)據(jù)傳輸高速檢測,200萬像素時幀率可達200FPS高精度,中心坐標定
    發(fā)表于 01-16 13:32

    一種不依賴于棋盤格等輔助標定物體實現(xiàn)像素相機和激光雷達自動標定的方法

    主要內容本文提出了一種不依賴于棋盤格等輔助標定物體,實現(xiàn)像素相機和激光雷達自動標定的方法。方法直接從點云中提取3D邊特征,一避免遮擋問題,并且使用了精確度更高的深度連續(xù)邊。文中首先指
    發(fā)表于 09-01 07:42

    深圳市四元數(shù)數(shù)控技術有限公司機器視覺應用之標定板的使用?

    在機器視覺應用中,標定板的使用非常必要,因為對于精度測量來講,鏡頭本身的畸變不可避免,同時又需要達到客戶滿意的精度,因此要求本身的圖像就非常真實、準確,否則軟件水平再高,那也是基于有
    發(fā)表于 02-25 09:55

    相機標定介紹

    什么是攝相機標定?攝相機標定方法的分類?感興趣的小伙伴們可以瞧一瞧。
    發(fā)表于 09-22 12:04 ?0次下載

    相機標定含義(解決什么是相機標定

    在大多數(shù)條件下,這些參數(shù)必須通過實驗與計算才能得到。無論是在圖像測量或者機器視覺應用中,相機參數(shù)的標定都是非常關鍵的環(huán)節(jié),其標定結果的精度及算法的穩(wěn)定性直接影響
    的頭像 發(fā)表于 06-21 11:12 ?8328次閱讀

    如何學習相機模型與標定?

    相機標定是通過輸入帶有標定patter的標定板來獲得相機參數(shù)的一個過程。實際的光學成像是一套非常復雜的過程,從三維世界投影到
    的頭像 發(fā)表于 06-01 14:36 ?706次閱讀
    如何學習<b class='flag-5'>相機</b>模型與<b class='flag-5'>標定</b>?

    為什么要進行相機標定?相機標定有何意義?

    在大多數(shù)條件下,這些參數(shù)必須通過實驗與計算才能得到。無論是在圖像測量或者機器視覺應用中,相機參數(shù)的標定都是非常關鍵的環(huán)節(jié),其標定結果的精度及算法的穩(wěn)定性直接影響
    發(fā)表于 08-03 09:38 ?2270次閱讀
    為什么要進行<b class='flag-5'>相機</b><b class='flag-5'>標定</b>?<b class='flag-5'>相機</b><b class='flag-5'>標定</b>有何意義?

    常用視覺的三種相機標定總結

    選中Export Camera Parameters按鈕,將計算得到的相關參數(shù)導入到Matlab中;若要進行更精確的標定,可在標定時考慮畸變誤差或采用雙目相機
    發(fā)表于 10-09 10:51 ?1786次閱讀
    常用視覺的三種<b class='flag-5'>相機</b><b class='flag-5'>標定</b>總結

    相機標定中的坐標變換原理難點分析

    相機標定中的基本坐標系有:像素坐標系、圖像坐標系、相機坐標系、世界坐標系,這些坐標系之間都有一定的轉換關系,若這些轉換關系已知,就可以得到世界坐標(棋盤上的點)和
    發(fā)表于 12-19 10:42 ?1164次閱讀
    <b class='flag-5'>相機</b><b class='flag-5'>標定</b>中的坐標變換原理難點分析

    視覺檢測精度達到 0.01

    在現(xiàn)代工業(yè)生產和質量控制領域,視覺檢測技術因其高效、非接觸式測量等優(yōu)勢而備受青睞。然而,對于許多對精度要求極高的應用場景,一個關鍵的問題是:視覺檢測精度能否達到 0.01級別?研訊科技
    的頭像 發(fā)表于 08-22 11:20 ?203次閱讀
    視覺檢測<b class='flag-5'>精度</b>能<b class='flag-5'>達到</b> <b class='flag-5'>0.01</b> 嗎