matlab单目相机标定代码 棋盘标定法图像去畸变 包含棋盘内外参数重投影误差散点图重投影误差柱状图角点提取重投影误差分布矫正前后图像 代码标注清晰而且附带图像适合初学者 双目相机可以标定内外参数无代码先准备20张不同角度的棋盘格照片建议实际拍摄时棋盘占画面1/3以上。把图片存到imgs文件夹后直接运行这段角点提取代码% 读取所有棋盘图像 imageDir fullfile(imgs); imgs imageDatastore(imageDir); % 检测角点 [imagePoints, boardSize] detectCheckerboardPoints(imgs.Files); % 可视化第5张图的角点检测结果 I readimage(imgs,5); imshow(I); hold on; plot(imagePoints(:,1,5), imagePoints(:,2,5), gx, LineWidth,2); title(角点提取效果示例);!角点提取效果示例绿色叉号就是算法找到的角点边缘清晰的话基本都能识别接下来是重头戏——相机标定。设置棋盘格实际物理尺寸这里假设每个方格30mmsquareSize 30; % 单位毫米 worldPoints generateCheckerboardPoints(boardSize, squareSize); % 执行标定 params estimateCameraParameters(imagePoints, worldPoints);标定完别急着关窗口注意看弹出的结果窗口这里能看到内参矩阵焦距、主点坐标畸变系数径向畸变k1,k2和切向畸变p1,p2外参中的旋转矩阵和平移向量重点关注重投影误差这个值越小越好。通常要低于0.5像素% 绘制误差分布 figure; subplot(1,2,1); showReprojectionErrors(params); title(重投影误差散点); subplot(1,2,2); histogram(params.ReprojectionErrors(:),50); title(误差分布直方图);!误差分析matlab单目相机标定代码 棋盘标定法图像去畸变 包含棋盘内外参数重投影误差散点图重投影误差柱状图角点提取重投影误差分布矫正前后图像 代码标注清晰而且附带图像适合初学者 双目相机可以标定内外参数无代码左图是每个角点的误差分布右图显示大部分误差集中在0.2像素左右最后来个直观的去畸变效果对比% 原始图像 origImg imread(fullfile(imgs,test.jpg)); figure; imshow(origImg); title(原始图像); % 去畸变处理 undistImg undistortImage(origImg, params); figure; imshow(undistImg); title(矫正后图像);!去畸变对比注意看图中门框线条的变化矫正后明显更笔直几个避坑指南棋盘格数量建议9x6以上拍摄时要有俯仰、倾斜等多种角度环境光照要均匀避免反光标定板要完全出现在画面中至于双目标定原理其实差不多主要多了基线距离计算和左右相机坐标对齐。不过Matlab的stereoCameraCalibrator工具已经能可视化操作这里就不展开代码了。
直接上干货!今天咱们用Matlab整一波单目相机标定,手把手带你处理棋盘格数据。别慌,代码都是带详细注释的,小白也能直接抄作业
matlab单目相机标定代码 棋盘标定法图像去畸变 包含棋盘内外参数重投影误差散点图重投影误差柱状图角点提取重投影误差分布矫正前后图像 代码标注清晰而且附带图像适合初学者 双目相机可以标定内外参数无代码先准备20张不同角度的棋盘格照片建议实际拍摄时棋盘占画面1/3以上。把图片存到imgs文件夹后直接运行这段角点提取代码% 读取所有棋盘图像 imageDir fullfile(imgs); imgs imageDatastore(imageDir); % 检测角点 [imagePoints, boardSize] detectCheckerboardPoints(imgs.Files); % 可视化第5张图的角点检测结果 I readimage(imgs,5); imshow(I); hold on; plot(imagePoints(:,1,5), imagePoints(:,2,5), gx, LineWidth,2); title(角点提取效果示例);!角点提取效果示例绿色叉号就是算法找到的角点边缘清晰的话基本都能识别接下来是重头戏——相机标定。设置棋盘格实际物理尺寸这里假设每个方格30mmsquareSize 30; % 单位毫米 worldPoints generateCheckerboardPoints(boardSize, squareSize); % 执行标定 params estimateCameraParameters(imagePoints, worldPoints);标定完别急着关窗口注意看弹出的结果窗口这里能看到内参矩阵焦距、主点坐标畸变系数径向畸变k1,k2和切向畸变p1,p2外参中的旋转矩阵和平移向量重点关注重投影误差这个值越小越好。通常要低于0.5像素% 绘制误差分布 figure; subplot(1,2,1); showReprojectionErrors(params); title(重投影误差散点); subplot(1,2,2); histogram(params.ReprojectionErrors(:),50); title(误差分布直方图);!误差分析matlab单目相机标定代码 棋盘标定法图像去畸变 包含棋盘内外参数重投影误差散点图重投影误差柱状图角点提取重投影误差分布矫正前后图像 代码标注清晰而且附带图像适合初学者 双目相机可以标定内外参数无代码左图是每个角点的误差分布右图显示大部分误差集中在0.2像素左右最后来个直观的去畸变效果对比% 原始图像 origImg imread(fullfile(imgs,test.jpg)); figure; imshow(origImg); title(原始图像); % 去畸变处理 undistImg undistortImage(origImg, params); figure; imshow(undistImg); title(矫正后图像);!去畸变对比注意看图中门框线条的变化矫正后明显更笔直几个避坑指南棋盘格数量建议9x6以上拍摄时要有俯仰、倾斜等多种角度环境光照要均匀避免反光标定板要完全出现在画面中至于双目标定原理其实差不多主要多了基线距离计算和左右相机坐标对齐。不过Matlab的stereoCameraCalibrator工具已经能可视化操作这里就不展开代码了。