使用MATLAB工具箱进行双目相机的标定,导出参数,没有内参,使用的是MATLAB2022b版本。
一、实验目的:掌握量化原理
二、实验内容:试对lenagray.jpg图像分别量化为64级灰度图像、32级灰度图像、8级灰度图像和4级灰度图像,观察图像质量的变化
第一幅图是原图,第二幅图是不同量化程度对应的图像
代码如下:
%将界面上的内容全部清空 clc; clear; close all; I=imread('D:/Mypicture/lenagray.jpg'); I64=histeq(I,64);%将图像的灰度级数改为64 I32=histeq(I,32);%将图像的灰度级数改为32 I16=histeq(I,16);%将图像的灰度级数改为16 I8=histeq(I,8);%将图像的灰度级数改为8 I4=histeq(I,4);%将图像的灰度级数改为4 I2=histeq(I,2);%将图像的灰度级数改为2 figure; subplot(2,3,1),imshow(I64),title('64x64'); subplot(2,3,2),imshow(I32),title('32x32'); subplot(2,3,3),imshow(I16),title('16x16'); subplot(2,3,4),imshow(I8),title('8x8'); subplot(2,3,5),imshow(I4),title('4x4'); subplot(2,3,6),imshow(I4),title('2x2');
根据提供的信息,可能出现无法获得相机的内参的原因是相机标定失败,或者是标定精度不够高导致内参无法正确计算出来。以下是可能的解决方案:
检查所使用的图片是否满足标定的要求,至少需要15-20张具有不同姿态的图片来进行标定。同时,图片需要质量足够好,没有过多的噪声和模糊。也需要保证图片中的标定板占据与整个图片相似的面积。
在提取角点时,需要设置适当的窗口大小以及按照指定的方式正确选择角点,建议按顺时针方向选取四个角点。可以通过 Recomp. corners 按钮提高标定精确度。
查看标定结果中的误差值,如果误差值太大(大于3),说明标定精度不够高,可以通过增加参与标定的图片数量,或者更换标定板来提高标定精度。
如果仍然无法获得相机的内参,可以考虑使用其他相机标定工具或者重新采集并标定图片。
以下是一些MATLAB的代码示例:
载入图片:
% 输入需要处理的图片数目,默认回车为刚才导入的全部图片
% 选择默认的 corner finder 窗口大小(就是十字光标),wintx=winy=5
imageFileNames = {'image1.jpg','image2.jpg',...};
[imagePoints,boardSize] = detectCheckerboardPoints(imageFileNames);
提取角点:
% 通过 Recomp. corners 按钮提高标定精确度;
% 角落提取引擎含有自动计算方块个数的系统
squareSize = 30; % mm
worldPoints = generateCheckerboardPoints(boardSize, squareSize);
% 进行上述角点提取操作(第一次标定必须很麻烦的一幅一幅的操作)
%
% 角点提取完毕后,运行以下代码生成一个变量 imagePoints,包含每个照片中检测出的检测板角点在图像坐标系下的坐标
% 在双目标定中,需要分别对左右图像计算 imagePoints
实施标定:
% 运行以下命令,生成变量 cameraParams,包含内参以及外参
cameraParams = estimateCameraParameters(imagePoints, worldPoints);
% 展示相机内参
cameraParams.IntrinsicMatrix
% 展示相机旋转矩阵和平移向量
cameraParams.RotationMatrices
cameraParams.TranslationVectors
保存标定结果:
% 运行以下命令,将标定结果保存到文件中
save('Calib_Result_left.mat', 'cameraParams');
% 右侧摄影机同理
双目相机的标定是将两个摄像机的内参和外参参数求解出来,从而实现三维空间中的点与图像坐标之间的转换。在使用MATLAB工具箱进行双目相机的标定时,如果无法获得内参参数,可能有以下几种原因:
标定板不适合:标定板必须采用高精度的制造工艺,并且必须满足一定的要求,例如正交性、平整性等。如果标定板不符合要求,则会导致标定结果不准确。
图像质量差:如果图像质量不好,例如存在较大的畸变、噪声或者模糊等问题,都会导致标定结果不准确。因此,在进行标定前需要对图像进行预处理,例如去除畸变、降噪等操作。
标定参数设置错误:在进行标定时,需要设置一些参数,例如标定板大小、角点数量等。如果这些参数设置不当,也会导致标定结果不准确。
算法选择错误:MATLAB工具箱提供了多种标定算法,例如Tsai算法、Zhang算法、Bouguet算法等。不同的算法适用于不同的场景,如果选择的算法不适合当前场景,也会导致标定结果不准确。
针对以上问题,可以采取以下措施:
更换标定板:使用具有高精度制造工艺的标定板,或者自己制作一个较好的标定板。
改善图像质量:对于存在畸变、噪声等问题的图片进行预处理,例如去除畸变、降噪等操作。
调整标定参数:根据具体情况调整标定参数,例如标定板大小、角点数量等。
尝试不同算法:使用不同的算法进行标定,找到适合当前场景的算法。