MATLAB 相機標定(單目)使用工具箱TOOLBOX_calib
環境MATLAB R2014a+windows7 64位
1.單目攝像機標定
(1)首先把解壓的TOOLBOX_calib資料夾的路徑設定到MATLAB裡,在主頁->環境->設定路徑->選擇工具箱路徑,如圖:
然後儲存,關閉
(2)此時,將你採集到的圖片放到工具箱以外的資料夾中,在MATLAB中開啟,如圖:
注意上面的路徑,必須選擇影象所在的資料夾,不然下一步會出現錯誤“No image in this directory in either ras, bmp, tif, pgm, ppm or jpg format. Change directory and try again.”跟這有關。
(3)回到MATLAB介面,輸入命令,calib_gui
選擇standard,出現如下視窗,如圖所示:
(4)點選Image name,出現
此時提示你輸入Basename,Basename就是你的所有圖片的名字中相同的部分,例如我的圖片Basename就是image2_
然後按照要求輸入圖片格式,例如我的圖片是JPG格式就輸入“j”
回車,圖片就讀入到了MATLAB裡,出現所有圖片的縮圖,如圖
(5)點選Extract grid corners,提取每幅圖的角點,點選完成後出現如下介面
直接回車(沒有引數)選擇所有的影象,否則就需要輸入影象索引如[2 5 8 10 12]來提取這些影象中的角點。然後通過直接輸入“Enter”來選擇預設的角點尋找視窗尺寸:wintx=winty=5。這就產生了一個11X11個畫素有效的視窗尺寸,
(6)點選長方形棋盤格的四個邊角點。選擇的位置在下圖中顯示出來(注意:儘量精確地點選這四個角點,控制在實際角點的5個畫素範圍內,否則一些角點可能會被檢測器丟失掉)。
點選的順序規則:第一個點被用來作為棋盤格座標系的原點。其他三個點可以以任何順序點選。第一個點選的的點非常重要,尤其是對於多相機的情況(例如當計算幾個相機在空間之間的相互關係的時候)。當處理多相機系統時對於不同的相機標定影象需要總是選擇同一個棋盤格座標系。
(7)經過上面的步驟之後,標定棋盤的邊界就顯示出來了:輸入網格中每個方格在X和Y方向上的尺寸dX和dY(在這裡,dX=dY=30mm=defaultvalues)(要根據自己的棋盤做調整),例如我的棋盤設定為28mm的正方形。程式會自動對各個方向的方格數進行計數,然後在顯示出沒有畸變的預估角點。如圖
角點以大約0.1個畫素的精度被提取出來。對第2、3、4...影象採用上述同樣的步驟。
(8)在角點提取完之後,就可以單擊標定工具箱面板上的“Calibration”來執行主要的相機標定程式。標定主要通過兩個步驟來完成:初次初始化以及非線性優化。
初始化步驟中對標定引數進行閉環計算,這個過程不包括任何鏡頭畸變(程式名:init_calib_param.m)
非線性優化過程中將對所有的標定引數最小化總體對映誤差(從最小二乘的角度出發)(9個內參以及6X20=129個外參)。優化是對特定雅可比矩陣進行計算然後往梯度下降的方向進行的。下圖為非線性優化的結果:
從上圖中我們可以注意到:為了達到最小值,只用了15次梯度迭代。這就意味著只有15次對對映函式、雅可比計算
以及求逆的評估。快速收斂的一個原因就是初始化程式所要計算的引數的有一個好的初始預估值。
現在,忽略推薦的可以減少畸變的模型的系統。對一個模型的複雜性進行判斷的對映誤差仍然很大。這主要是因為
對於一些影象一些網格角點並沒有被精確地提取。
(9)單擊面板上的“Reproject on images”來將網格角點對映到原始影象中。這些對映是基於當前的內參和外參計算
出來的。輸入一個空字元(直接按"Enter")作為“Number(s) of image(s) to show([]=all images)”來
表示你想檢視所有影象,下面的影象顯示了最初的四張檢測到的角點的影象(叉)以及對映的網格角點(圓)。
對映誤差也以有顏色的叉叉顯示在圖中:
(10)在面板中單擊“ShowExtrinsic”。外參(棋盤格相對於相機的相對位置)就以3D的形式顯示出來了:
、
(11)工具“Analyseerror”允許你去檢查哪個點對應大的誤差。單擊“Analyse error”並且選擇影象由上角的那個點。
退出誤差分析工具,在影象上的任何位置右擊。
單擊選中之後,下面的資訊就會出現在命令列視窗:這就意味著對應的點在第9張影象中,在標定板網格座標的(3,4)的位置。
(12)單擊“Save”儲存標定結果(內參和外參)到matlab檔案“Calib_Results.mat”
雙目標定見MATLAB 相機標定(雙目)使用工具箱TOOLBOX_calib - CSDN部落格