
1. 为什么需要相机标定刚接触计算机视觉的朋友可能会好奇为什么拍个照片还要搞什么标定这就像你用卷尺量东西如果尺子本身刻度不准那测量结果肯定有问题。相机标定就是解决这个刻度不准的问题——通过数学方法找出相机成像过程中的误差建立真实世界和像素坐标之间的准确对应关系。我去年做的一个机器人抓取项目就吃过这个亏。当时直接用手机摄像头拍物体位置结果机械臂总是抓偏。后来发现是镜头畸变导致图像边缘的物体位置偏差达到5cm标定后误差立刻降到2mm以内。常见的应用场景还包括三维重建把2D照片变3D模型增强现实让虚拟物体准确贴合真实场景自动驾驶精确计算障碍物距离2. 准备工作棋盘格与拍摄技巧2.1 棋盘格打印注意事项标定用的棋盘格就像摄影师的色卡质量直接影响标定精度。建议使用A3尺寸打印最小方格边长建议≥2cm选择哑光材质我试过光面纸会反光边缘留白≥5cm方便手持用直尺检查实际尺寸我的打印机曾把25mm打成24.8mm提示MATLAB默认棋盘格是方形如果使用长方形需修改代码参数2.2 拍摄时的六个黄金法则多角度覆盖像炒菜翻面一样让棋盘格出现在画面各个位置倾斜多样性至少包含30°、45°、60°的倾斜角度光照均匀避免强光直射产生的反光阴天拍摄效果最佳数量控制15-20张足够太多反而影响效率分辨率统一所有照片用相同分辨率推荐1280×720以上拒绝模糊快门速度≥1/100秒可用三脚架固定实测案例在光照不足的车间环境我用手机闪光灯拍摄的标定结果RMS误差达到1.8像素改用LED补光灯后降到0.7像素。3. MATLAB标定实操详解3.1 标定工具启动与设置打开MATLAB后别急着写代码App里藏着神器 cameraCalibrator % 或者通过APP菜单进入关键设置项解析3 Coefficients考虑更复杂的径向畸变鱼眼镜头必选Skew处理像素非正方形的情况手机摄像头通常不需要Tangential Distortion应对镜头组装偏差工业相机建议勾选我常用的参数组合是勾选3 Coefficients和Tangential Distortion这样在普通镜头上能获得最佳平衡。3.2 图像导入与参数调整添加图片时会让你输入棋盘格实际尺寸。这里有个坑输入的是单个方格的实际边长单位米不是棋盘格整体尺寸比如我的方格是25mm就输入0.025。遇到报错未能检测到棋盘格怎么办检查图片是否过曝/过暗尝试调整Grid Size参数用imtool()手动确认角点是否清晰4. 结果分析与精度优化4.1 看懂标定报告标定完成后会显示关键指标Mean Reprojection Error一般要0.5像素Radial Distortionk1值通常在[-0.3, 0.3]之间Tangential Distortionp值绝对值应0.01我曾遇到k10.8的异常情况检查发现是广角镜头拍摄时边缘畸变过大改用中心区域后恢复正常。4.2 剔除异常图像MATLAB会用红色标注误差大的图片。删除时注意不要一次性删超过1/3的图片保留不同角度的代表性图片每次删除后重新标定观察误差变化推荐保留误差在平均误差2倍以内的图片。有个偷懒技巧直接点击Sort by Error按钮自动排序。5. 参数提取与应用5.1 内参矩阵解读导出参数后在命令行输入 format long cameraParams.IntrinsicMatrix你会得到类似这样的3×3矩阵[fx 0 0; s fy 0; cx cy 1]其中fx/fy焦距像素单位(cx,cy)主点坐标图像中心s倾斜系数通常≈0注意内参矩阵需要转置后使用MATLAB的存储方式特殊5.2 畸变参数处理 cameraParams.RadialDistortion % [k1 k2 k3] cameraParams.TangentialDistortion % [p1 p2]实际使用时要注意OpenCV等库的k1/k2顺序可能与MATLAB不同部分库只支持2阶径向畸变k30正向/反向畸变模型别搞混6. 实战经验与避坑指南标定板晃动问题用磁吸支架固定比手持稳定10倍温度影响工业相机工作1小时后焦距可能变化0.3%自动对焦陷阱标定前先用胶带固定镜头焦距多分辨率处理4K和720p的标定参数不能混用参数验证技巧用标定板重新拍摄验证距离测量误差最近帮客户调试时发现个有趣现象使用蓝色棋盘格比黑白格标定精度提高15%原因是蓝色通道的信噪比更高。不过这个效果因相机而异建议大家可以多做对比实验。