【原文轉自】:http://blog.csdn.net/qq_15947787/article/details/51441031
前兩天發表的時候沒注意,代碼出了點錯誤,所以修改了一下,重新發上來。
參考:
http://docs.opencv.org/3.0.0/db/d58/group__calib3d__fisheye.html#gga91b6a47d784dd47ea2c76ef656d7c3dca0899eaa2f96d6eed9927c4b4f4464e05
http://docs.opencv.org/master/modules/calib3d/doc/calib3d.html
opencv3.0 fisheye model reference
http://stackoverflow.com/questions/31089265/what-are-the-main-references-to-the-fish-eye-camera-model-in-opencv3-0-0dev/34388476#34388476
Kannala J, Brandt S S. A generic camera model and calibration method for conventional, wide-angle, and fish-eye lenses[J]. Pattern Analysis and Machine Intelligence, IEEE Transactions on, 2006, 28(8): 1335-1340.
文獻地址:http://download.csdn.net/detail/qq_15947787/9583006
opencv也是參考matlab的Calib_gui_fisheye處理,但是不清楚為什么,Calib_gui_fisheye不能准確的提取角點
魚眼鏡頭模型
魚眼鏡頭的內參模型可以表示為 ,與普通鏡頭的內參一樣,但畸變參數不同,為
,含義如下:
設(X,Y,Z)為一個三維坐標點,投影在圖像上的二維坐標為(u,v),如果不考慮畸變,投影關系如下:
R和t分別代表相機外參中的旋轉矩陣和平移向量。
標定流程
首先調用OpenCV的FindChessboardCorners()來尋找圖像上的標定板的角點,再根據標定板的尺寸指定這些角點對應的三維點的三維坐標,再調用fisheye::calibrate()來進行標定,利用標定結果中的內參和畸變參數調用fisheye::undistortImage()對圖像做去畸變操作。最后調用一張待測試的畸變圖片利用標定結果進行畸變校正。
后續,兩個代碼下載鏈接:
代碼下載:
附件中刪除了部分圖像(有臉的圖都刪了……^-^)
http://download.csdn.net/detail/qq_15947787/9527601
2016/12/2 20:00在做雙目標定及空間點計算時,突然看到stereoRectify有一個alpha參數,可以調節校正圖的大小,而initUndistortRectifyMap中的size是校正圖的大小,並不是原圖大小,這樣應該就好辦了吧。
還有一個是在http://blog.csdn.net/dip007/article/details/51498644看到了方法,在這里謝謝他,直接把上面代碼的最后一部分替代即可,代碼如下
懶得復制的可以直接下載
http://download.csdn.net/detail/qq_15947787/9700379