基于MATLAB的相机内参标定及其原理——附实现教程
1.什么是相机内参标定?
相机内参标定是为了确定相机的内部参数,包括焦距、光心位置和畸变系数等,以准确描述相机的成像过程。通过标定可以校正图像中的畸变,恢复图像与真实三维场景之间的几何关系,提升目标检测的精度。
2.相机内参标定的原理是什么?
3.说白了就是求其内参矩阵,呢该怎么操作呢?
3.1首先启动matlab程序点击相应的软件标定程序,点击APP中的图像处理和计算机视觉当中的Camera Clibrator:
3.2之后进入的相应的标定程序界面可以选择来自文件夹或者相机,不过相机第一次打开的时候需要安装相应的插件,在线安装可以参考其他博客,这里展示一下如何离线安装:
首先去官网手动下载相应的驱动包,地址为:MATLAB Support Package for USB Webcams - File Exchange - MATLAB Central
点击下载download,之后再matlab中将当前文件夹切换为软件包所在的文件夹,如下所示,双击该文件然后进行安装:
3.3之后出现以下页面安装成功,之后连接相机就可以在线捕捉数据,这里我提前整好了,所以以文件夹为例。
4.之后导入数据后选择标定板的格式以及大小:
5.确定之后, 会自动加载相应的数据:
6.然后会显示自动标定之后的相应结果,
7.然后点击calibrate,进行标定,标定结果如下:
8.呢么结果怎么看呢,右上角第一个是重投影每张图片的误差,一 般来说精度在0.5以下可以使用,当然越低越好。右下角第二个是以相机为中心视角的外参情况,中间为相应的可视化结果。
9.之后我们可以导出相应模型的参数文件或者导入到工作空间:
10:怎么看我们此次标定的结果呢?就是我们需要的参数在哪里?点击我们导入的参数,双击后其参数如下所示:
其中:
-
ImageSize
图像的尺寸[高度, 宽度]
,单位是像素。例如[1080, 1920]
表示图像的分辨率为 1920×1080 像素。 -
RadialDistortion
径向畸变系数,通常表示为[k1, k2, k3...]
。用于修正由于镜头曲率导致的图像失真。例如:k1
: 一阶径向畸变系数。k2
: 二阶径向畸变系数。
如果值为负,可能代表桶形畸变(图像边缘向内弯曲);如果为正,可能代表枕形畸变(图像边缘向外弯曲)。
-
TangentialDistortion
切向畸变系数[p1, p2]
。切向畸变由镜头不对称安装引起,使得图像的某些部分出现拉伸或压缩。在这里值为[0, 0]
,表示没有检测到切向畸变。 -
WorldPoints
标定板上的世界坐标点的二维数组,表示真实场景中的点(通常单位是毫米)。 -
WorldUnits
世界坐标点的单位,通常是'millimeters'
,也可能是米或其他单位。 -
EstimateSkew
表示是否估计相机像素的非正交性:- 值为
0
表示未估计(像素假定为正交的)。 - 值为
1
表示允许非正交像素(不常见)。
- 值为
-
NumRadialDistortionCoefficients
径向畸变的系数数量。例如,这里为2
,表示只考虑k1
和k2
。 -
EstimateTangentialDistortion
是否估计切向畸变:- 值为
0
表示未估计切向畸变。 - 值为
1
表示估计切向畸变。
- 值为
-
ReprojectionErrors
投影误差(重投影误差)的数组,表示每个校准点的实际图像位置与理论计算位置的偏差。 -
DetectedKeypoints
标定过程中在图像中检测到的特征点(通常是标定板上的角点)的逻辑数组。 -
RotationVectors
旋转向量,表示相机相对于标定板的旋转信息,长度为 3 的向量。 -
K相机内参矩阵(
3x3
矩阵),其形式为:- fx,fy: 焦距(像素单位)。
- cx,cy: 主点(光轴在图像平面上的交点)坐标。
- Skew: 像素间的非正交性。
-
NumPatterns
用于标定的标定板图片数量,例如这里为18
。 -
Intrinsics
包括所有相机内参的对象,通常包括焦距、主点坐标、畸变系数等。 -
PatternExtrinsics
标定板相对于相机的外参信息,包括平移向量和旋转矩阵。 -
FocalLength
焦距[f_x, f_y]
,单位是像素。 -
PrincipalPoint
主点坐标[c_x, c_y]
,单位是像素。 -
Skew
像素的非正交性,通常为 0 表示像素正交。 -
MeanReprojectionError
平均重投影误差,衡量相机标定的准确性。值越小,标定结果越好。例如这里为0.5054
,表示误差约为 0.5 像素。 -
ReprojectedPoints
通过标定参数计算的投影点坐标,与实际图像中的特征点相比,用于计算重投影误差。
11.呢么我们需要的只是K相机内参矩阵,如下所示: