本文是一篇關於相機標定意義和原理的個人總結,包含了opencv和matlab中常用的相機標定函式的註解。
相機標定是機器視覺的基礎,標定結果的好壞直接決定了機器視覺的系統精度,作用可見一斑。在這一年半的時間裡,我個人也是隨著實驗和程式的進一步理解,對標定的原理和意義有了更多的想法。同樣,由於博文的關係,仍有一些朋友會常常詢問標定的程式問題。本人的2010-05-17opencv標定程式的問題也多次被朋友詢問,由於當時對標定的認識還不夠系統,因此現在認為該文對標定的意義和原理有很多誤解,並在此推薦一些較好的博文拱大家學習:
雙目測距與三維重建的opencv實現問題集錦(一)影象獲取與單目標定;
雙目測距與三維重建的opencv實現問題集錦(二)雙目標定與雙目校正;
雙攝像頭測距的opencv實現;
分享一些opencv實現立體視覺的經驗;
下面結合本人的畢業**及一年半來對機器視覺的學習,對相機標定的意義和原理進行敘述。
1.單目相機模型
單目相機模型中的三種座標系關係如圖1所示,相機座標系即是以光軸中心o為原點的座標系,其z軸滿足右手法則,成像原點所代表平面即為像平面座標系(實際應用中,均以影象左上角為座標系原點),實際物體座標系即為世界座標系。
圖1 單目相機模型的三座標系統關係
其中,在世界座標系的值為,是在像平面座標系的投影點,其相機座標系的值為。是相機座標系軸與像平面夾角,一般情況下軸與像平面垂直,值為。且相機座標系與像平面平行,為相機的焦距。
對於從相機座標系到像平面座標系的變換,像平面座標系是用畫素單位來表示的,而相機座標系則是以公釐為單位來表示,因此,要完成改變換過程就需要先得到像平面的畫素單位與公釐單位之間的線性關係。在圖1中,相機光軸中心z軸方向上與像平面的交點稱為投影中心,座標為,是畫素單位,而每個畫素在和的物理尺寸為和,單位是畫素/公釐,則像平面的畫素與公釐間的線性關係如式(1):
(1)根據小孔模型下投影變換原理,像平面的物理座標對應的相機座標系滿足式(2):
(2)其對應的矩陣形式為式(3):
(3)聯立式(1)和式(3),得到式(4)即為相機座標系與像平面座標系變換的矩陣。
(4)其中,即為相機的6個內引數,其組成的矩陣即為內引數矩陣。
對於從相機座標系到世界座標系的變換,是通過旋轉矩陣r和平移矩陣t完成的,如圖2所示。
圖2 相機座標系與世界座標系的變換關係
其中,平移矩陣t是三維列向量,旋轉矩陣r是座標軸依次繞和軸旋轉角度和所形成的三個矩陣的總乘積。它們的定義如式(5):
(5)則矩陣r的計算公式如式(6):
(6)因此,從相機座標系到世界座標系的變換如式(7),其中,表示,為旋轉矩陣,為平移矩陣,該變換矩陣稱為外引數矩陣。
(7)最後,聯立式(4)和式(7)求得像平面座標系與世界座標系之間的變換關係,如式(8):
(8)其中,即為透視投影矩陣,表示空間中三維點座標與影象平面二維座標之間的線性關係,表示的像平面齊次座標值,表示的世界座標系齊次座標值。基於以上幾何原理和相機模型得到的影象資訊和三維資訊之間的關係,存在不可逆性,即可以通過已知世界座標系的座標值求得二維座標值,如果要進行二維座標到三維座標的反求還需要其他的數學模型輔助求解。
2.matlab標定工具箱應用
1) 製作標定板,標定板尺寸為324(mm)x252(mm),即7行9列63個36mm的正方形方格組成,如圖3所示。
圖3 標定方格板
2) 將水平平行的左右相機同時採集標定板的不同位姿影象,共計12組位姿(對於採集的影象,位姿越多,標定結果也會越精確,建議在10組到20組之間)如圖4,5所示。
圖4 左相機的標定影象
圖5 右相機的標定影象
3) 在工具箱中通過extract grid corners提取每幅標定影象的特徵點(即黑方格與白方格的交點)。
4) 進行單目標定,得到左右相機的內外引數以及畸變係數,並將引數儲存到calib_results_left和calib_results_right兩個mat格式的檔案中。
3.matlab標定結果與opencv標定結果的比較與分析
matlab標定結果:
通過上節的步驟(1)-(4),可以得到如圖6和7所示的左右相機的內引數、畸變係數結果。
圖6 左相機的內引數和畸變係數
圖7 右相機的內引數和畸變係數
對於左右相機由於透鏡畸變造成的誤差使用工具箱中的visualize_distortions功能進行分析,可以得到左相機的畸變圖,如8、9、10所示,相應的右相機畸變圖,如11、12、13所示。
圖8 左相機鏡頭畸變圖
圖9 左相機徑向畸變圖
圖10 左相機切向畸變圖
對於圖8到10,圖中的0點即為左相機光學中心,圖中的箭頭顯示相機影象的畸變方向。圖8左相機整體畸變模型中,該相機的左側畸變不明顯,若物體的影象在此則不易受畸變因素影響造成線條的彎曲;圖9左相機徑向畸變模型中,該相機的畸變係數由中心向外增大,即物體的影象越靠近影象邊緣,其線條的彎曲程度就越大;圖10左相機切向畸變模型中,箭頭方向顯示該相機切向畸變的增大方向,在相機的左側其切向畸變與徑向畸變的方向相反,使得整體畸變模型中,相機左側的畸變較小。
圖11 右相機鏡頭畸變圖
圖12 右相機徑向畸變圖
圖13 右相機切向畸變圖
對於圖11到13,圖中的0點與左相機相同,即為右相機光學中心,圖中的箭頭顯示相機影象的畸變方向。圖11右相機整體畸變模型中,該相機的中間及偏左側畸變不明顯,若物體的影象在此則不易受畸變因素影響造成線條的彎曲;圖12右相機徑向畸變模型中,該相機的畸變係數由中心向外增大,但右相機比左相機在光軸中心附近有更大的區域畸變很小,因此位於右側相機光學中心的影象,其線條因受畸變造成的彎曲很小;圖13右相機切向畸變模型中,箭頭方向顯示該相機切向畸變的增大方向,在相機的左側其切向畸變與徑向畸變的方向相反,使得整體畸變模型中,位於右相機影象左側的線條受畸變影響較小。
opencv標定結果:
在此列舉的opencv標定結果是我雙目視覺標定且優化後的結果,與matlab的會有差異。
左側相機的內引數矩陣:
(9)右側相機的內引數矩陣:
(10)
該式(9)-(10)與式(1)相對應。而matlab中的cc對應於式(1)中的相機光軸中心在影象平面的投影座標,fc即為式(1)中的和。
至此,講解完了opencv與matlab所對應的相機標定內引數矩陣的含義。
opencv與matlab標定中的差異:
opencv的標定引數中,對於鏡頭畸變採用的方法是brown博士在71年發表的文章中提到的;而matlab中的鏡頭畸變引數採用基於heikkil博士提出的方法,將非線性干擾因素引入到內外引數的求解過程。
heikkil採用的矩陣來表示以上的兩種畸變係數。根據brown的非線性模型,和表示鏡頭的徑向畸變係數,通常只使用兩項,只是針對即便較大的鏡頭(例如魚眼鏡頭,其餘情況下該系數值為0),而和表示切向畸變係數,由式(11)和式(12)求解該矩陣,本文的畸變係數求解伴隨在相機標定過程中。
(11)
其中,是像平面上的任一點座標值,是進行徑向畸變矯正後的座標值,是作為光學中心畸變為0的點進行泰勒級數展開後得到的。
(12)
其中,是像平面上的任一點座標值,是進行切向畸變矯正後的座標值,如式(11)的定義相同。
4.外引數的作用及其在相機標定中的意義
外引數定義了如圖2所示的影象平面到世界座標系的變換關係。而標定就是通過相機尋找影象平面中如圖3所示的標定板的特徵點位置,所以得到的外引數是影象平面與標定板所處平面的線性變換關係。在我的2010-06-14基於matlab的雙目視覺定位問題研究中,通過matlab標定工具箱產生的圖4與圖5就可以表達上述含義。
因此,對於不同的棋盤格標定板空間位置,必然對應於不同的外引數矩陣。同樣的,在視覺伺服中,雅可比矩陣也有同樣的數學意義。對於視覺伺服,個人認為可以看些徐德的**入門。
5.opencv標定程式說明
用於尋找影象中的棋盤格標定板的特徵點:
cvsize
board_sz= cvsize( board_w,board_h );
iplimage* imgleft=cvcreateimage(cvsize(imgl->width,imgl->height),imgl->depth,imgl->nchannels);
iplimage* imgright=cvcreateimage(cvsize(imgr->width,imgr->height),imgr->depth,imgr->nchannels);
cvpoint2d32f* cornersleft= new
cvpoint2d32f[board_n ];
cvpoint2d32f* cornersright= new
cvpoint2d32f[board_n ];
intcorner_countleft,corner_countright;
cvresize(imgl,imgleft,cv_inter_linear);
cvresize(imgr,imgright,cv_inter_linear);
if(frame++ % board_dt == 0)
cv_mat_elem(*point_counts,int,success,0)= board_n;
}隨後呼叫cvcalibatecamera2和cvstereocalibate函式進行相機的標定。標定的例程可以參考learningopencv。
學習opencv(中文版) 於仕琪譯 清華大學出版社,2009;(opencv 2.0庫)
基於opencv的計算機視覺技術實現 陳勝勇,劉盛編著 科學出版社,2008;(opencv 1.0庫)
www.opencv.org.cn中文論壇
希望這篇總結對於各位有所幫助。
相機標定(1) 初識相機標定 標定的含義,意義
1 相機標定含義 解決什麼是相機標定 在影象測量過程以及機器視覺應用中,為確定空間物體表面某點的三維幾何位置與其在影象中對應點之間的相互關係,必須建立相機成像的幾何模型,這些幾何模型引數就是相機引數。在大多數條件下這些引數必須通過實驗與計算才能得到,這個求解引數的過程就稱之為相機標定 或攝像機標定 ...
相機標定原理 機器視覺相機標定的目的 原理及步驟
在影象測量過程以及機器視覺應用中,為確定空間物體表面某點的三維幾何位置與其在影象中對應點之間的相互關係,必須建立相機成像的幾何模型,這些幾何模型引數就是相機引數。進行攝像機標定的目的 求出相機的內 外引數,以及畸變引數。標定相機後通常是想做兩件事 乙個是由於每個鏡頭的畸變程度各不相同,通過相機標定可...
關於相機標定的理解
平時我們都說要做視覺識別 測量云云,然後我們就會去拍照,再對數字影象做各種處理,顏色處理 灰度化 濾波 邊緣檢測 霍夫變換,最後得到了希望得到的特徵,是這樣的對吧?不過請注意!到了這一步,其實我們僅僅是得到了一坨坨感興趣的畫素而已!究竟要怎樣才能把這些畫素轉化到現實世界的物件中呢?也就是說,究竟要怎...