我正在研究Fisheye相机校准,我没有得到预期的结果,我不知道我错在哪里。我是这个相机校准的新手。
我的参数来自校准
Focal Length: fc = [ 410.7476 408.0925 ]
Principal point: cc = [ 369.3690 299.0193 ]
Skew: alpha_c = [ 0.8336 ]
Fisheye Distortion: kc = [ -0.3726 0.0931 0.0107 0.0000 ]
我的代码是不失真的:
fisheye::estimateNewCameraMatrixForUndistortRectify(intrinsic, distCoeffs, input.size(), Matx33d::eye(), newK, 1);
fisheye::undistortImage(input, output, intrinsic, distCoeffs, newK, input.size());//Size(640,360));
这是我的输入图片:
这是我得到的输出:
我不认为,你的结果是来自错误使用的无瑕疵功能。我认为,校准中的Camera Matrix是错误的。你应该再试一次。并且不要忘记,您必须使用相机拍摄~20张图像,您还应该确保使用不同的视口来拍摄棋盘或圆弧的图像。在那之后取消图像并查看结果。
我的相机校准有时会得到不好的结果,但经过成功的校准和良好的Camera Matrix一切都很好。
甚至在他提到的这个Tutorial中,校准可能会给你带来不好的结果。
如果不使用fisheye :: estimateNewCameraMatrixForUndistortRectify和fisheye :: undistortImage,可以在鱼眼图像的不成比例中获得良好的效果。通过fisheye :: calibrate获得K(相机矩阵)和D(畸变系数)后,您可以将它们直接放到initUndistortRectifyMap中。这将通过cv :: remap生成未失真图像生成的地图