在使用镜头拍照后,图片会发生畸变,为了在后续处理中得到较好的结果,我们需要使用畸变矫正方法。此处提供一种使用matlab自带工具箱进行畸变的方法。
1.使用标定板拍照,此处多拍一些(最好多于50张,后面会删除);
2.打开matlab,如图中红色线条圈出的地方,此处使用matlab2016b使用matlab求解镜头畸变参数以及使用opencv进行畸变矫正
3.打开存放照片的文件夹,全部选中,导入图片使用matlab求解镜头畸变参数以及使用opencv进行畸变矫正
4.此处填写标定板方块边长,我们使用的是30mm的使用matlab求解镜头畸变参数以及使用opencv进行畸变矫正
5.处理前调整红色区域选项,然后点击Calibrate使用matlab求解镜头畸变参数以及使用opencv进行畸变矫正
6.使用matlab求解镜头畸变参数以及使用opencv进行畸变矫正
7.处理过后的图片如下,右上侧已经经过修改使用matlab求解镜头畸变参数以及使用opencv进行畸变矫正
8.处理完后点击Export Camera Parameters(就是绿色对勾)就可以导出数据,可以在matlab的工作区看见,右侧标出的是以后主要用到的数据使用matlab求解镜头畸变参数以及使用opencv进行畸变矫正
9.在使用opencv中的undistort进行畸变矫正时,需要使用8个参数即fc1, fc2, cc1, cc2, kc1, kc2, kc3, kc4;
RadialDistorion中的参数分别是:kc1,kc2,kc5(不常用)
TangentialDistortion中的参数分别是:kc3,kc4
IntrinsicMatrix中的参数分别是:
fc1 不用 0
不用 fc2 0
cc1 cc2 1
opencv的畸变矫正程序如下:
double fc1, fc2, cc1, cc2, kc1, kc2, kc3, kc4;
fc1 = ;
fc2 = ;
cc1 = ;
cc2 = ;
kc1 = ;
kc2 = ;
kc3 =;
kc4 =;
Mat intrinsic_matrix = (Mat_(3, 3) << fc1, 0, cc1, 0, fc2, cc2, 0, 0, 1);
Mat distortion_coeffs = (Mat_(1, 4) << kc1, kc2, kc3, kc4);
//矫正
undistort(Img,ImgUndistort,intrinsic_matrix,distortion_coeffs);
output_image = ImgUndistort;

分类:

技术点:

相关文章: