【计算机视觉05】相机标定(Matlab工具箱实现)

文章目录

  • 一. 相机标定的原理
    • 1.1 概念
    • 1.2 各坐标系的转换
  • 二.通过标定能知道些什么?
        • 1.外参数矩阵
        • 2.内参数矩阵
        • 3.畸变矩阵
        • 4.模型求解
  • 三. 实验过程及分析
        • 3.1 实验步骤:
        • 3.2 实验准备:
        • 3.4 标定结果:
        • 3.3 实验小结

一. 相机标定的原理

1.1 概念

  1. 相机标定(Camera calibration)是从世界坐标系换到图像坐标系的过程,也就是求最终的投影矩阵 P 的过程。 在传统的相机模型中共有 4 套坐标系,标定的过程分为两个部分:
  • 第一步是从世界坐标系转换为相机坐标系,这一步是三维点到三维点的转换,包括 R,t (相机外参)等参数;
  • 第二步是从相机坐标系转为图像坐标系,这一步是三维点到二维点的转换,包括 K(相机内参)等参数;
    【计算机视觉05】相机标定(Matlab工具箱实现)_第1张图片
  1. 世界坐标系(world coordinate system):用户定义的三维世界的坐标系,为了描述目标物在真实世界里的位置而被引入,用(X, Y, Z)表示其坐标值。
    相机坐标系(camera coordinate system)
    Oc-XcYcZc
    :在相机上建立的坐标系,以相机光心为原点,为了从相机的角度描述物体位置而定义。
    图像坐标系(image coordinate system)
    o-xy
    :为了描述成像过程中物体从相机坐标系到图像坐标系的投影透射关系而引入,方便进一步得到像素坐标系下的坐标。
    像素坐标系(pixel coordinate system)
    uv
    :为了描述物体成像后的像点在数字图像上(相片)的坐标而引入,是我们真正从相机内读取到的信息所在的坐标系。单位为个(像素数目)。

1.2 各坐标系的转换

已知一个现实世界中的物体点的在世界坐标系中的坐标为(X, Y, Z),经过相机拍摄得到图片,在图片上的像素坐标为(u , v )。假设在图像坐标系中的坐标为( x , y ),在相机坐标系中的坐标为(Xc, Yc, Zc)

  • 图像坐标系与像素坐标系的关系:
    【计算机视觉05】相机标定(Matlab工具箱实现)_第2张图片
    他们之间的转换关系为:
    u = x d x + u 0 u=\frac{x}{dx} \quad +u_0 u=dxx+u0
    v = y d y + v 0 v=\frac{y}{dy} \quad +v_0 v=dyy+v0
    采用齐次坐标再用矩阵形式将上式表示为:
    【计算机视觉05】相机标定(Matlab工具箱实现)_第3张图片
  • 图像坐标系与相机坐标系的关系
    x f = X c Z c \frac{x}{f}=\frac{Xc}{Zc} \quad fx=ZcXc
    y f = Y c Z c \frac{y}{f}=\frac{Yc}{Zc} \quad fy=ZcYc
    其中 f 为焦距(像平面与相机坐标系原点的距离),用齐次坐标系和矩阵表示上述关系:
    【计算机视觉05】相机标定(Matlab工具箱实现)_第4张图片
  • 相机坐标系与世界坐标系的关系
    【计算机视觉05】相机标定(Matlab工具箱实现)_第5张图片
    其中 R 为3 × 3正交旋转矩阵,t 为三维平移向量。
  • 像素坐标系与世界坐标系的关系
    由式(1)(2)(3)可得:
    【计算机视觉05】相机标定(Matlab工具箱实现)_第6张图片
    坐标转换参考博客: 博客链接.

二.通过标定能知道些什么?

1.外参数矩阵

就是知道现实世界点(世界坐标)是怎样经过旋转和平移,然后落到另一个现实世界点(摄像机坐标)上。

2.内参数矩阵

上述那个点在1的基础上,是如何继续经过摄像机的镜头、并通过针孔成像和电子转化而成为像素点的。

3.畸变矩阵

上面那个像素点为什么没有落在理论计算该落在的位置上,而且还产生了一定的偏移和变形。

4.模型求解

内外参数求解参考:内外参数求解.
畸变矩阵求解参考: 畸变矩阵求解.

三. 实验过程及分析

3.1 实验步骤:

(1)打印一张棋盘格A4纸张(黑白间距已知),并贴在一个平板上
(2)针对棋盘格拍摄若干张图片(一般10-20张) 本次实验用了12张图片
(3)在图片中检测特征点
(4)解算出5个内部参数,以及6个外部参数

3.2 实验准备:

本次实验是用matlab工具箱 进行相机标定;
设定的棋盘格大小为3cm
实验标定设备:iPhone7plus
实验结果

  • 相机外部参数可视化
  • 内参矩阵
  • 径向畸变
  • 切向畸变
    常用术语:
    【计算机视觉05】相机标定(Matlab工具箱实现)_第7张图片
3.4 标定结果:

【计算机视觉05】相机标定(Matlab工具箱实现)_第8张图片
该标定方法中要求每一幅图片都从不同的角度去拍摄,即一幅图片就是一个视场,因此标定至少需要 2 幅不同视角的图像。但为了获得稳定的数值结果,通常采集的图片数量会远远超过次数。如果采集图像不足,明显会对内部参数计算带来一定的误差。本次实验平均误差1.52,误差较大(其他博客说低于0.5是合理的)。

误差最小(左)和误差最大(右)的图片如下:
【计算机视觉05】相机标定(Matlab工具箱实现)_第9张图片
实验只采集了12张图片,数量不够也是造成误差较大的原因之一,但采集图像过多一也会影响标定的精度,造成误差累积,增加错误概率。

相机外部参数:(以棋盘格为中心)
【计算机视觉05】相机标定(Matlab工具箱实现)_第10张图片
相机外部参数:(以相机为中心)
【计算机视觉05】相机标定(Matlab工具箱实现)_第11张图片
内参矩阵:
【计算机视觉05】相机标定(Matlab工具箱实现)_第12张图片
径向畸变:
【计算机视觉05】相机标定(Matlab工具箱实现)_第13张图片
切向畸变:【计算机视觉05】相机标定(Matlab工具箱实现)_第14张图片
当图片数量增加为20张,平均误差降低了但误差还是较大。
【计算机视觉05】相机标定(Matlab工具箱实现)_第15张图片
又试了一次,这次把图片全部压缩,平均误差减小了。(我觉得这个误差是和图片像素大小有关的,因为压缩之后的图片像素就低了很多)
【计算机视觉05】相机标定(Matlab工具箱实现)_第16张图片

3.3 实验小结
  • 每张图标定后设置的X,Y和起始点都不完全一样,会根据拍摄角度自己选择坐标系,说明图片的旋转和角度变换不会影响标定结果。
  • 张正友标定法标定相机参数,只用一张棋盘格,角点明显,标定的精度高。

你可能感兴趣的:(笔记)