我在使用opencv的undistort()api时遇到了问题。
目前,我正在尝试通过将结果与GML校准工具箱(//graphics.cs.msu.ru/en/node/909)进行比较来验证校准结果。
以下是使用 GML
获得的结果=== Intrinsic ===
778.200465 0.000000 264.299668
0.000000 757.938633 383.228433
0.000000 0.000000 1.000000
=== Distortion ===
-0.102929 0.142385 0.001972 0.007185
=== Position ===
0.0 0.0 0.0
=== Extrinsic ===
0.022835 0.913067 0.407170 -13.413557
0.642153 -0.325546 0.694016 -176.271870
0.766236 0.245618 -0.593763 251.019585
0.000000 0.000000 0.000000 1.000000
pixle error [0.12, 0.06]
以下是 OPENCV 2.4.8发布的结果
%YAML:1.0
nframes: 2
image_width: 480
image_height: 752
square_size: 15.
flags: 0
camera_matrix: !!opencv-matrix
rows: 3
cols: 3
dt: d
data: [ 7.7831650886449142e+002, 0., 2.6427482436286419e+002, 0.,
7.5794845379782328e+002, 3.8328330268344854e+002, 0., 0., 1. ]
distortion_coefficients: !!opencv-matrix
rows: 5
cols: 1
dt: d
data: [ -1.0303815300339793e-001, 1.4247900680485645e-001,
1.9600293643082536e-003, 7.1852707322515265e-003, 0. ]
avg_reprojection_error: 1.3913581417364859e-001
per_view_reprojection_errors: !!opencv-matrix
rows: 2
cols: 1
dt: f
data: [ 1.34592891e-001, 1.47803366e-001 ]
GML和OPENCV的结果与我的眼睛相似,但不成比例的结果看起来完全不同。
附上2张图片
显示orignal和gml之间的差异未失真
- “2_gml_calib_undistorted.bmp” - 使用gml toolbox undistortion
显示orignal和opencv之间的差异未失真
- “3_opencv2.4.8_calib_undistorted.bmp” - 使用opencv
还尝试将GML校准数据提供给opencv undistort()函数,结果与opencv类似。所以我得出结论,问题在于无法使用api。 但我还是无法解决这个问题。
请注意: 我使用以下opencv apis
findChessboardCorners(viewGray, boardData.boardSize, point2Dbuf,CV_CALIB_CB_ADAPTIVE_THRESH+CV_CALIB_CB_FILTER_QUADS);
calibrateCamera(objectPoints, imagePoints, imageSize, *cameraMatrix,*distCoeffs, rvecs, tvecs, flags|CV_CALIB_FIX_K3|CV_CALIB_FIX_K4|CV_CALIB_FIX_K5,TermCriteria(CV_TERMCRIT_EPS+CV_TERMCRIT_ITER, 100,DBL_EPSILON));
undistort(view, rview, *cameraMatrix, *distCoeffs);
解决此问题的任何指示都会有很大帮助。
谢谢,
哈