版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、本文是一篇關(guān)于相機標定意義和原理的個人總結(jié),包含了OpenCV和Matlab中常用的相機標定函數(shù)的注解。相機標定是機器視覺的基礎(chǔ),標定結(jié)果的好壞直接決定了機器視覺的系統(tǒng)精度,作用可見一斑。在這一年半的時間里,我個人也是隨著實驗和程序的進一步理解,對標定的原理和意義有了更多的想法。同樣,由于博文的關(guān)系,仍有一些朋友會常常詢問標定的程序問題。本人的2010-05-17OpenCV標定程序的問題也多次被朋友詢問,由于當(dāng)時對標定的認識還不夠系統(tǒng),因此現(xiàn)在認為該文對標定的意義和原理有很多誤解,并在此推薦一些較好的博文拱大家學(xué)習(xí):雙目測距與三維重建的OpenCV實現(xiàn)問題集錦(一)圖像獲取與單目標定;雙目測
2、距與三維重建的OpenCV實現(xiàn)問題集錦(二)雙目標定與雙目校正;雙攝像頭測距的OpenCV實現(xiàn);分享一些OpenCV實現(xiàn)立體視覺的經(jīng)驗;下面結(jié)合本人的畢業(yè)論文及一年半來對機器視覺的學(xué)習(xí),對相機標定的意義和原理進行敘述。1.單目相機模型單目相機模型中的三種坐標系關(guān)系如圖1所示,相機坐標系即是以光軸中心O為原點的坐標系,其z軸滿足右手法則,成像原點所代表平面即為像平面坐標系(實際應(yīng)用中,均以圖像左上角為坐標系原點),實際物體坐標系即為世界坐標系。圖1 單目相機模型的三坐標系統(tǒng)關(guān)系其中,在世界坐標系的值為,是在像平面坐標系的投影點,其相機坐標系的值為。是相機坐標系軸與像平面夾角,一般情況下軸與像平面
3、垂直,值為。且相機坐標系與像平面平行,為相機的焦距。對于從相機坐標系到像平面坐標系的變換,像平面坐標系是用像素單位來表示的,而相機坐標系則是以毫米為單位來表示,因此,要完成改變換過程就需要先得到像平面的像素單位與毫米單位之間的線性關(guān)系。在圖1中,相機光軸中心z軸方向上與像平面的交點稱為投影中心,坐標為,是像素單位,而每個像素在和的物理尺寸為和,單位是像素/毫米,則像平面的像素與毫米間的線性關(guān)系如式(1):(1)根據(jù)小孔模型下投影變換原理,像平面的物理坐標對應(yīng)的相機坐標系滿足式(2):(2)其對應(yīng)的矩陣形式為式(3):(3)聯(lián)立式(1)和式(3),得到式(4)即為相機坐標系與像平面坐標系變換的矩
4、陣。(4)其中,即為相機的6個內(nèi)參數(shù),其組成的矩陣即為內(nèi)參數(shù)矩陣。對于從相機坐標系到世界坐標系的變換,是通過旋轉(zhuǎn)矩陣R和平移矩陣T完成的,如圖2所示。圖2 相機坐標系與世界坐標系的變換關(guān)系其中,平移矩陣T是三維列向量,旋轉(zhuǎn)矩陣R是坐標軸依次繞和軸旋轉(zhuǎn)角度和所形成的三個矩陣的總乘積。它們的定義如式(5):(5)則矩陣R的計算公式如式(6):(6)因此,從相機坐標系到世界坐標系的變換如式(7),其中,表示,為旋轉(zhuǎn)矩陣,為平移矩陣,該變換矩陣稱為外參數(shù)矩陣。(7)最后,聯(lián)立式(4)和式(7)求得像平面坐標系與世界坐標系之間的變換關(guān)系,如式(8):(8)其中,即為透視投影矩陣,表示空間中三維點坐標與圖
5、像平面二維坐標之間的線性關(guān)系,表示的像平面齊次坐標值,表示的世界坐標系齊次坐標值。基于以上幾何原理和相機模型得到的圖像信息和三維信息之間的關(guān)系,存在不可逆性,即可以通過已知世界坐標系的坐標值求得二維坐標值,如果要進行二維坐標到三維坐標的反求還需要其他的數(shù)學(xué)模型輔助求解。2.Matlab標定工具箱應(yīng)用1) 制作標定板,標定板尺寸為324(mm)X252(mm),即7行9列63個36mm的正方形方格組成,如圖3所示。圖3 標定方格板2) 將水平平行的左右相機同時采集標定板的不同位姿圖像,共計12組位姿(對于采集的圖像,位姿越多,標定結(jié)果也會越精確,建議在10組到20組之間)如圖4,5所示。圖4 左
6、相機的標定圖像圖5 右相機的標定圖像3) 在工具箱中通過Extract grid corners提取每幅標定圖像的特征點(即黑方格與白方格的交點)。4) 進行單目標定,得到左右相機的內(nèi)外參數(shù)以及畸變系數(shù),并將參數(shù)保存到Calib_Results_left和Calib_Results_right兩個mat格式的文件中。3.Matlab標定結(jié)果與OpenCV標定結(jié)果的比較與分析Matlab標定結(jié)果:通過上節(jié)的步驟(1)-(4),可以得到如圖6和7所示的左右相機的內(nèi)參數(shù)、畸變系數(shù)結(jié)果。圖6 左相機的內(nèi)參數(shù)和畸變系數(shù)圖7 右相機的內(nèi)參數(shù)和畸變系數(shù)對于左右相機由于透鏡畸變造成的誤差使用工具箱中的visu
7、alize_distortions功能進行分析,可以得到左相機的畸變圖,如8、9、10所示,相應(yīng)的右相機畸變圖,如11、12、13所示。圖8 左相機鏡頭畸變圖圖9 左相機徑向畸變圖圖10 左相機切向畸變圖對于圖8到10,圖中的0點即為左相機光學(xué)中心,圖中的箭頭顯示相機圖像的畸變方向。圖8左相機整體畸變模型中,該相機的左側(cè)畸變不明顯,若物體的圖像在此則不易受畸變因素影響造成線條的彎曲;圖9左相機徑向畸變模型中,該相機的畸變系數(shù)由中心向外增大,即物體的圖像越靠近圖像邊緣,其線條的彎曲程度就越大;圖10左相機切向畸變模型中,箭頭方向顯示該相機切向畸變的增大方向,在相機的左側(cè)其切向畸變與徑向畸變的方向
8、相反,使得整體畸變模型中,相機左側(cè)的畸變較小。圖11 右相機鏡頭畸變圖圖12 右相機徑向畸變圖圖13 右相機切向畸變圖對于圖11到13,圖中的0點與左相機相同,即為右相機光學(xué)中心,圖中的箭頭顯示相機圖像的畸變方向。圖11右相機整體畸變模型中,該相機的中間及偏左側(cè)畸變不明顯,若物體的圖像在此則不易受畸變因素影響造成線條的彎曲;圖12右相機徑向畸變模型中,該相機的畸變系數(shù)由中心向外增大,但右相機比左相機在光軸中心附近有更大的區(qū)域畸變很小,因此位于右側(cè)相機光學(xué)中心的圖像,其線條因受畸變造成的彎曲很??;圖13右相機切向畸變模型中,箭頭方向顯示該相機切向畸變的增大方向,在相機的左側(cè)其切向畸變與徑向畸變的
9、方向相反,使得整體畸變模型中,位于右相機圖像左側(cè)的線條受畸變影響較小。OpenCV標定結(jié)果:在此列舉的OpenCV標定結(jié)果是我雙目視覺標定且優(yōu)化后的結(jié)果,與Matlab的會有差異。左側(cè)相機的內(nèi)參數(shù)矩陣:(9)右側(cè)相機的內(nèi)參數(shù)矩陣:(10)該式(9)-(10)與式(1)相對應(yīng)。而Matlab中的cc對應(yīng)于式(1)中的相機光軸中心在圖像平面的投影坐標,fc即為式(1)中的和。至此,講解完了OpenCV與Matlab所對應(yīng)的相機標定內(nèi)參數(shù)矩陣的含義。OpenCV與Matlab標定中的差異:OpenCV的標定參數(shù)中,對于鏡頭畸變采用的方法是Brown博士在71年發(fā)表的文章中提到的;而Matlab中的鏡
10、頭畸變參數(shù)采用基于Heikkil博士提出的方法,將非線性干擾因素引入到內(nèi)外參數(shù)的求解過程。Heikkil采用的矩陣來表示以上的兩種畸變系數(shù)。根據(jù)Brown的非線性模型,和表示鏡頭的徑向畸變系數(shù),通常只使用兩項,只是針對即便較大的鏡頭(例如魚眼鏡頭,其余情況下該系數(shù)值為0),而和表示切向畸變系數(shù),由式(11)和式(12)求解該矩陣,本文的畸變系數(shù)求解伴隨在相機標定過程中。(11)其中,是像平面上的任一點坐標值,是進行徑向畸變矯正后的坐標值,是作為光學(xué)中心畸變?yōu)?的點進行泰勒級數(shù)展開后得到的。(12)其中,是像平面上的任一點坐標值,是進行切向畸變矯正后的坐標值,如式(11)的定義相同。4.外參數(shù)的
11、作用及其在相機標定中的意義外參數(shù)定義了如圖2所示的圖像平面到世界坐標系的變換關(guān)系。而標定就是通過相機尋找圖像平面中如圖3所示的標定板的特征點位置,所以得到的外參數(shù)是圖像平面與標定板所處平面的線性變換關(guān)系。在我的2010-06-14基于Matlab的雙目視覺定位問題研究中,通過Matlab標定工具箱產(chǎn)生的圖4與圖5就可以表達上述含義。因此,對于不同的棋盤格標定板空間位置,必然對應(yīng)于不同的外參數(shù)矩陣。同樣的,在視覺伺服中,雅可比矩陣也有同樣的數(shù)學(xué)意義。對于視覺伺服,個人認為可以看些徐德的論文入門。5.OpenCV標定程序說明用于尋找圖像中的棋盤格標定板的特征點:CvSize board_sz =
12、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 ;CvPoin
13、t2D32f* cornersRight = new CvPoint2D32f board_n ;int corner_countLeft, corner_countRight;cvResize(imgL,imgLeft,CV_INTER_LINEAR);cvResize(imgR,imgRight,CV_INTER_LINEAR);if(frame+ % board_dt = 0) /Find chessboard corners:int foundLeft = cvFindChessboardCorners(imgLeft, board_sz, cornersLeft, &corn
14、er_countLeft,CV_CALIB_CB_ADAPTIVE_THRESH | CV_CALIB_CB_FILTER_QUADS);int foundRight = cvFindChessboardCorners(imgRight, board_sz, cornersRight, &corner_countRight,CV_CALIB_CB_ADAPTIVE_THRESH | CV_CALIB_CB_FILTER_QUADS);/Get Subpixel accuracy on those cornerscvCvtColor(imgLeft, grayLeft, CV_BGR2G
15、RAY);/if input is colorful then use thiscvCvtColor(imgRight, grayRight, CV_BGR2GRAY);/cvCopy(image1, gray_image1);/cvCopy(image2, gray_image2);cvFindCornerSubPix(grayLeft, cornersLeft, corner_countLeft,cvSize(11,11),cvSize(-1,-1), cvTermCriteria(CV_TERMCRIT_EPS+CV_TERMCRIT_ITER, 30, 0.1 );/尋找棋盤格標定板的
16、特征點cvFindCornerSubPix(grayRight, cornersRight, corner_countRight,cvSize(11,11),cvSize(-1,-1), cvTermCriteria(CV_TERMCRIT_EPS+CV_TERMCRIT_ITER, 30, 0.1 ); /尋找棋盤格標定板的特征點/畫出找到的特征點cvDrawChessboardCorners(imgLeft, board_sz, cornersLeft, corner_countLeft, foundLeft);cvDrawChessboardCorners(imgRight, board
17、_sz, cornersRight, corner_countRight, foundRight);if (corner_countLeft>=board_n && foundLeft && corner_countRight>=board_n && foundRight)/保存特征點在圖像坐標中的坐標值,用于Calibrate2和StereoCalibration的調(diào)用step = success*board_n;for( int i=step, j=0; j<board_n; +i,+j ) CV_MAT_ELEM(*ima
18、ge_pointsLeft, float,i,0) = cornersLeftj.x;CV_MAT_ELEM(*image_pointsLeft, float,i,1) = cornersLeftj.y;CV_MAT_ELEM(*image_pointsRight, float,i,0) = cornersRightj.x;CV_MAT_ELEM(*image_pointsRight, float,i,1) = cornersRightj.y;CV_MAT_ELEM(*object_points,float,i,0) = (float)(j/board_w);CV_MAT_ELEM(*object_points,float,i,1) = (float)(j%board_w);CV_MAT_ELEM(*object_poi
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024網(wǎng)絡(luò)安全風(fēng)險評估及整改合同
- 2024離婚后子女撫養(yǎng)費用支付及相關(guān)權(quán)利義務(wù)協(xié)議
- 2025年度創(chuàng)業(yè)孵化基地場地?zé)o償使用及創(chuàng)業(yè)支持合同4篇
- 2025年蔬菜運輸合同含蔬菜病蟲害防治服務(wù)條款3篇
- 二手挖掘設(shè)備買賣規(guī)范協(xié)議2024年版版
- 二零二四年衛(wèi)星導(dǎo)航技術(shù)研發(fā)合同3篇
- 2025年度休閑度假村場地租賃合同我方為承租方含休閑娛樂設(shè)施4篇
- 2025年廢鐵原料供應(yīng)與采購合作框架協(xié)議4篇
- 2025年度運動公園場地租賃合作協(xié)議范本3篇
- 2025年度特種廠房租賃及專業(yè)設(shè)備供應(yīng)合同4篇
- 二零二五年度無人駕駛車輛測試合同免責(zé)協(xié)議書
- 北京市海淀區(qū)2024-2025學(xué)年高一上學(xué)期期末考試歷史試題(含答案)
- 常用口服藥品的正確使用方法
- 2025年湖北華中科技大學(xué)招聘實驗技術(shù)人員52名歷年高頻重點提升(共500題)附帶答案詳解
- 2024年鉆探工程勞務(wù)協(xié)作協(xié)議樣式版B版
- 《心肺復(fù)蘇機救治院內(nèi)心搏驟?;颊咦o理專家共識》解讀
- 計算機二級WPS考試試題
- 2023中華護理學(xué)會團體標準-注射相關(guān)感染預(yù)防與控制
- 臨床研究技術(shù)路線圖模板
- GB∕T 2099.1-2021 家用和類似用途插頭插座 第1部分:通用要求
- 超潔凈管道(CL-PVC)施工技術(shù)
評論
0/150
提交評論