author@jason_ql(lql0716)
在图像测量过程以及机器视觉应用中,为确定空间物体表面某点的三维几何位置与其在图像中对应点之间的相互关系,必须建立相机成像的几何模型,这些几何模型参数就是相机参数。在大多数条件下这些参数必须通过实验与计算才能得到,这个求解参数的过程就称之为相机标定(或摄像机标定)。无论是在图像测量或者机器视觉应用中,相机参数的标定都是非常关键的环节,其标定结果的精度及算法的稳定性直接影响相机工作产生结果的准确性。因此,做好相机标定是做好后续工作的前提,提高标定精度是科研工作的重点所在。 常用术语 内参矩阵: Intrinsic Matrix 焦距: Focal Length 主点: Principal Point 径向畸变: Radial Distortion 切向畸变: Tangential Distortion 旋转矩阵: Rotation Matrices 平移向量: Translation Vectors 平均重投影误差: Mean Reprojection Error 重投影误差: Reprojection Errors 重投影点: Reprojected Points
1、坐标系的转换1.1 世界坐标系世界坐标系(world coordinate)(xw,yw,zw)(xw,yw,zw),也称为测量坐标系,是一个三维直角坐标系,以其为基准可以描述相机和待测物体的空间位置。世界坐标系的位置可以根据实际情况自由确定。
1.2 相机坐标系相机坐标系(camera coordinate)(xc,yc,zc)(xc,yc,zc),也是一个三维直角坐标系,原点位于镜头光心处,x、y轴分别与相面的两边平行,z轴为镜头光轴,与像平面垂直。
1.3 世界坐标系转换为相机坐标系⎡⎣⎢⎢⎢xcyczc1⎤⎦⎥⎥⎥=[R0t1]⎡⎣⎢⎢⎢xwywzw1⎤⎦⎥⎥⎥[xcyczc1]=[Rt01][xwywzw1] 其中RR为3*3的旋转矩阵,tt为3*1的平移矢量,(xc,yc,zc,1)T(xc,yc,zc,1)T为相机坐标系的齐次坐标,(xw,yw,zw,1)T(xw,yw,zw,1)T为世界坐标系的齐次坐标。 1.4 像素坐标系、图像坐标系图1:
 像素坐标系(pixel coordinate) 如图1,像素坐标系uovuov是一个二维直角坐标系,反映了相机CCD/CMOS芯片中像素的排列情况。原点oo位于图像的左上角,uu轴、vv轴分别于像面的两边平行。像素坐标系中坐标轴的单位是像素(整数) 。 像素坐标系不利于坐标变换,因此需要建立图像坐标系XOYXOY,其坐标轴的单位通常为毫米(mm) ,原点是相机光轴与相面的交点(称为主点),即图像的中心点,XX轴、YY轴分别与uu轴、vv轴平行。故两个坐标系实际是平移关系,即可以通过平移就可得到。 图像坐标系转换为像素坐标系
⎡⎣⎢uv1⎤⎦⎥=⎡⎣⎢1/dX0001/dY0u0v01⎤⎦⎥⎡⎣⎢XY1⎤⎦⎥[uv1]=[1/dX0u001/dYv0001][XY1] 其中,dXdX、dYdY分别为像素在XX、YY轴方向上的物理尺寸,u0,v0u0,v0为主点(图像原点)坐标。 1.5 针孔成像原理图2:
 如图,空间任意一点PP与其图像点pp之间的关系,PP与相机光心oo的连线为oPoP,oPoP与像面的交点pp即为空间点PP在图像平面上的投影。 该过程为透视投影,如下矩阵表示: s⎡⎣⎢XY1⎤⎦⎥=⎡⎣⎢f000f0001000⎤⎦⎥⎡⎣⎢⎢⎢xyz1⎤⎦⎥⎥⎥s[XY1]=[f0000f000010][xyz1] 其中,ss为比例因子(ss不为0),ff为有效焦距(光心到图像平面的距离),(x,y,z,1)T(x,y,z,1)T是空间点PP在相机坐标系oxyzoxyz中的齐次坐标,(X,Y,1)T(X,Y,1)T是像点pp在图像坐标系OXYOXY中的齐次坐标。 1.6 世界坐标系转换为像素坐标系s⎡⎣⎢uv1⎤⎦⎥=⎡⎣⎢1/dX0001/dY0u0v01⎤⎦⎥⎡⎣⎢f000f0001000⎤⎦⎥[R0t1]⎡⎣⎢⎢⎢xwywzw1⎤⎦⎥⎥⎥=⎡⎣⎢αx000αy0u0v01000⎤⎦⎥[R0t1]⎡⎣⎢⎢⎢xwywzw1⎤⎦⎥⎥⎥=M1M2Xw=MXws[uv1]=[1/dX0u001/dYv0001][f0000f000010][Rt01][xwywzw1]=[αx0u000αyv000010][Rt01][xwywzw1]=M1M2Xw=MXw 其中,αx=f/dXαx=f/dX、αy=f/dYαy=f/dY,称为uu、vv轴的尺度因子,M1M1称为相机的内部参数矩阵,M2M2称为相机的外部参数矩阵,MM称为投影矩阵。
2 相机内参与畸变参数2.1 相机内参2.2 畸变参数2.2.1 opencv中的畸变模型以下公式由泰勒展式得出,在opencv中K=1K=1,r2=x2+y2r2=x2+y2, (x,y)(x,y)为真实坐标(发生畸变),(x′,y′)(x′,y′)为理想坐标。 δxr=x(k1r2+k2r4+k3r6+K)δxr=x(k1r2+k2r4+k3r6+K) δyr=y(k1r2+k2r4+k3r6+K)δyr=y(k1r2+k2r4+k3r6+K) δxd=2p1xy+p2(r2+2x2)+Kδxd=2p1xy+p2(r2+2x2)+K δyd=2p1(r2+2y2)+2p2xy+Kδyd=2p1(r2+2y2)+2p2xy+K 理想坐标(x′,y′)(x′,y′)与真实坐标(x,y)(x,y):
x′=x+δxr+δxdx′=x+δxr+δxd y′=y+δyr+δydy′=y+δyr+δyd 也即: [x′y′]=(1+k1r2+k2r4+k3r6)[xy]+[2p1xy+p2(r2+2x2)2p1(r2+2y2)+2p2xy][x′y′]=(1+k1r2+k2r4+k3r6)[xy]+[2p1xy+p2(r2+2x2)2p1(r2+2y2)+2p2xy] 实际计算过程中,如果考虑太多高阶的畸变参数,会导致标定求解的不稳定。 2.2.2 张氏标定中的畸变模型张正友的方法只考虑了径向畸变,没有考虑切向畸变 模型: y¯=y+y[k1(x2+y2)+k2(x2+y2)2]y¯=y+y[k1(x2+y2)+k2(x2+y2)2] 其中k1k1,k2k2是径向畸变系数(coefficients of the radial distortion)。 像素坐标表示为:
u¯=u+(u−u0)[k1(x2+y2)+k2(x2+y2)2]u¯=u+(u−u0)[k1(x2+y2)+k2(x2+y2)2] v¯=v+(v−v0)[k1(x2+y2)+k2(x2+y2)2]v¯=v+(v−v0)[k1(x2+y2)+k2(x2+y2)2] 即:
[(u−u0)(x2+y2)(v−v0)(x2+y2)(u−u0)(x2+y2)2(v−v0)(x2+y2)][k1k2]=[u¯−uv¯−v][(u−u0)(x2+y2)(u−u0)(x2+y2)2(v−v0)(x2+y2)(v−v0)(x2+y2)][k1k2]=[u¯−uv¯−v]
理想情况下(没有畸变)图片的像素坐标为: (u,v)(u,v) 真实的像素坐标为: (u¯,v¯)(u¯,v¯) 真实坐标与理想坐标的关系式(泰勒展开):
(x,y)(x,y) and (x¯,y¯)(x¯,y¯) are the ideal (distortion-free) and real (distorted) normalized image coordinates.
x¯=x+x[k1(x2+y2)+k2(x2+y2)2]x¯=x+x[k1(x2+y2)+k2(x2+y2)2]
2.2.3 Tasi畸变模型2.3 相机标定相机标定步骤:
1、打印一张棋盘格,把它贴在一个平面上,作为标定物。
2、通过调整标定物或摄像机的方向,为标定物拍摄一些不同方向的照片。
3、从照片中提取棋盘格角点。
4、估算理想无畸变的情况下,五个内参和六个外参。
5、应用最小二乘法估算实际存在径向畸变下的畸变系数。
6、极大似然法,优化估计,提升估计精度。
3 Matlab相机标定






cameraParams =
cameraParameters (具有属性):
Camera Intrinsics
IntrinsicMatrix: [3x3 double]
FocalLength: [510.6720 511.9534]
PrincipalPoint: [332.3800 238.4849]
Skew: 0
Lens Distortion
RadialDistortion: [0.0618 -0.4877]
TangentialDistortion: [0 0]
Camera Extrinsics
RotationMatrices: [3x3x50 double]
TranslationVectors: [50x3 double]
Accuracy of Estimation
MeanReprojectionError: 0.1923
ReprojectionErrors: [77x2x50 double]
ReprojectedPoints: [77x2x50 double]
Calibration Settings
NumPatterns: 50
WorldPoints: [77x2 double]
WorldUnits: 'mm'
EstimateSkew: 0
NumRadialDistortionCoefficients: 2
EstimateTangentialDistortion: 0
estimationErrors =
cameraCalibrationErrors (具有属性):
IntrinsicsErrors: [1x1 intrinsicsEstimationErrors]
ExtrinsicsErrors: [1x1 extrinsicsEstimationErrors]
>> cameraParams.IntrinsicMatrix
ans =
510.6720 0 0
0 511.9534 0
332.3800 238.4849 1.0000
>> cameraParams.RadialDistortion
ans =
0.0618 -0.4877
参考资料
|