一、相机标定的原理

原理参考:https://blog.csdn.net/honyniu/article/details/51004397

一般来说,标定的过程分为两个部分:
第一步是从世界坐标系转换为相机坐标系,这一步是三维点到三维点的转换,包括 R,t(相机外参)等参数;
第二部是从相机坐标系转为图像坐标系,这一步是三维点到二维点的转换,包括 K(相机内参)等参数;

相机坐标系转换到图像坐标系

计算机视觉学习(七)-- 相机标定
上图所示(图片来自UIUC计算机视觉课件),是一个小孔成像的模型

相机转换到像平面

知道上面的简单知识后,如果知道相机坐标系中的一个点 X(现实三维世界中的点),在像平面坐标系对应的点是 x,要求求从相机坐标系转为像平面坐标系的转换,也就是从 X 点的(X,Y,Z)通过一定的转换变为 x 点的(x,y)。注意:(X,Y,Z)(大写)是在相机坐标系,而(x,y)(小写)是在像平面坐标系(还不是图像坐标系,原点不同。)观察第二个图,很简单的可以得到这个转换:
计算机视觉学习(七)-- 相机标定
可以简写为 x=PX(P 就是所谓的投影矩阵,当然现在还不完整):

世界坐标系转换到图像坐标系

计算机视觉学习(七)-- 相机标定
如上图所示(图片来自UIUC计算机视觉课件),从世界坐标系转换到相机坐标系是三维空间到三维空间的变换,一般来说需要一个平移操作和一个旋转操作就可以完成这个转换,用公式表示如下(可以理解为世界坐标系原点先平移到相机坐标系的位置然后在做一次坐标系旋转,使坐标轴对齐。):
计算机视觉学习(七)-- 相机标定
计算机视觉学习(七)-- 相机标定

畸变参数(distortion parameters)

在几何光学和阴极射线管(CRT)显示中,畸变(distortion) 是对直线投影(rectilinear projection)的一种偏移。简单来说直线投影是场景内的一条直线投影到图片上也保持为一条直线。那畸变简单来说就是一条直线投影到图片上不能保持为一条直线了,这是一种光学畸变(optical aberration)。可能由于摄像机镜头的原因,这里不讨论,有兴趣的可以查阅光学畸变的相关的资料。
畸变一般可以分为两大类,包括径向畸变和切向畸变。主要的一般径向畸变有时也会有轻微的切向畸变。

径向畸变(Radial distortion)

径向畸变的效应有三种,一种是桶形畸变(barrel distortion),另一种是枕形畸变(pincushion distortion),还有一种是两种的结合叫做胡子畸变(mustache distortion),从图片中可以很容易看出区别,具体见下图(图片来自wikipedia):
计算机视觉学习(七)-- 相机标定

切向畸变(tangential distortion)

切向畸变是由于透镜与成像平面不严格的平行,其可以用如下公式修正:
计算机视觉学习(七)-- 相机标定
所以最终得到5个畸变参数:
D=(k1,k2,p1,p2,k3)

相机标定

那么可以利用这些来进行最终的任务相机标定,简单的过程可以描述为通过标定板,如下图,可以得到n个对应的世界坐标三维点 XiXi 和对应的图像坐标二维点 xixi,这些三维点到二维点的转换都可以通过上面提到的相机内参 KK,相机外参 RR 和 tt,以及畸变参数 DD 经过一系列的矩阵变换得到。现在就用这些对应关系来求解这些相机参数。

二、实现(MATLAB)

实验参考:相机标定教程 https://blog.csdn.net/heroacool/article/details/51023921

实验结果:

实验参数:
cameraParams =

cameraParameters (具有属性):

Camera Intrinsics
IntrinsicMatrix: [3x3 double]
FocalLength: [2.8605e+03 2.9318e+03]
PrincipalPoint: [1.8364e+03 1.3761e+03]
Skew: 0

Lens Distortion
RadialDistortion: [0.0254 -0.0664]
TangentialDistortion: [0 0]

Camera Extrinsics
RotationMatrices: [3x3x18 double]
TranslationVectors: [18x3 double]

Accuracy of Estimation
MeanReprojectionError: 0.6537
ReprojectionErrors: [49x2x18 double]
ReprojectedPoints: [49x2x18 double]

Calibration Settings
NumPatterns: 18
WorldPoints: [49x2 double]
WorldUnits: ‘mm’
EstimateSkew: 0
NumRadialDistortionCoefficients: 2
EstimateTangentialDistortion: 0
实验截图:计算机视觉学习(七)-- 相机标定计算机视觉学习(七)-- 相机标定
计算机视觉学习(七)-- 相机标定

相关文章: