(单目)相机标定算法:张正友的算法
一些帖子对摄像头畸变原理的总结:
http://www.baidu.com/link?url=Y-D_PIABMU-1VZsusDcBCMoFz-br4wg69tYUbnDIFMlfRlRBL7hnal_4r47cnDxSsm1eHYEDJJ43qslLTN-p4D4qz7WSsKCRX-u0yWiuWda&wd=&eqid=e1e90abc00064dc400000006567b5327
《学习OpenCV》一书中对摄像头标定有详尽说明:第11章——“摄像机标定”一节 P422
VC下实现相机标定,主要分两步:matlab中计算标定参数、利用opencv的接口对输入图像进行标定
主要看以下内容:
这一步关键是采集一系列不同角度拍摄的棋盘格图像
opencv的标定相关函数如下:(基于opencv 3.0)
void initUndistortRectifyMap(InputArray cameraMatrix, InputArray distCoeffs, InputArray R, InputArray newCameraMatrix, Size size, int m1type, OutputArray map1, OutputArray map2)用于获得标定时的变换矩阵,参数说明:
cameraMatrix,内参数矩阵,A = [ fx, 0, cx ; 0, fy, cy; 0, 0, 1],大小3*3,其中与matlab工具箱计算结果的对应关系为:fx、fy对应fc的两项,cx、cy对应cc的两项
distCoeffs,外参数(失真参数)矩阵, distortion coefficients,包含4, 5, or 8 元素的一维矩阵,对应matlab计算结果的kc
R,矫正矩阵,用于双目摄像头,这里设为空矩阵即可
newCameraMatrix,同样是双目时用到,这里输入cameraMatrix即可
size,输入图像尺寸
m1type,map1的类型,设为CV_32F
map1、map2,X、Y方向的变换矩阵
void remap(InputArray src, OutputArray dst, InputArray map1, InputArray map2, int interpolation, int borderMode=BORDER_CONSTANT, const Scalar& borderValue=Scalar())按两个变换矩阵对输入图像进行变换
interpolation为插值算法,设为cv::INTER_NEAREST即可
void undistort(InputArray src, OutputArray dst, InputArray cameraMatrix, InputArray distCoeffs, InputArray newCameraMatrix=noArray() )
一个整合版函数,包括以上两个函数
效果:
原始
校正后