我正在研究鱼眼摄像机校准,我没有得到预期的结果,我不知道我哪里错了。我是这个相机校准的新手。
我的校准参数
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 ]
我的代码是unistort:
fisheye::estimateNewCameraMatrixForUndistortRectify(intrinsic, distCoeffs, input.size(), Matx33d::eye(), newK, 1);
fisheye::undistortImage(input, output, intrinsic, distCoeffs, newK, input.size());//Size(640,360));
这是我的输入图片:
这是我得到的输出:
答案 0 :(得分:0)
我不认为你的结果是来自错误使用未失真的功能。我认为,校准中的Camera Matrix是错误的。你应该再试一次。并且不要忘记,您必须使用相机拍摄~20张图像,您还应该确保使用不同的视口来拍摄棋盘或圆弧的图像。之后,取消图像并查看结果。
我的相机校准有时会出现不好的结果,但经过成功的校准和良好的Camera Matrix后,一切都很好。
即使在他提到的Tutorial中,校准也会给你带来不好的结果。
答案 1 :(得分:0)
可以在不使用鱼眼图像的情况下获得良好的鱼眼图像效果:: estimateNewCameraMatrixForUndistortRectify和fisheye :: undistortImage。 通过fisheye :: calibrate获得K(相机矩阵)和D(畸变系数)后,您可以将它们直接放到initUndistortRectifyMap中。这将通过cv :: remap
生成未失真图像生成的地图