相机投影模型
针孔相机模型
针孔照相机模型是计算机视觉中广泛使用的照相机模型。该照相机从一个小孔采集射到暗箱内部的光线,在针孔照相机模型中,在光线投影到图像平面之前,从唯一一个点经过,即照相机中心C。如下图所示:
据 x = f X Z x=\frac{fX}{Z} x=ZfX以及 y = f Y Z y=\frac{fY}{Z} y=ZfY可推出:
像主点偏移
内参矩阵
畸变现象
- 图像径向畸变
透镜质量原因
光线在远离透镜中心的地方比靠近中心的地方更加弯曲 - 桶状畸变
- 枕形畸变
畸变矫正
外参矩阵
两类参数
- 相机内部参数/内方位元素: 焦距、像主点坐标、畸
变参数 - 相机外部参数/外方位元素: 旋转、平移
相机标定
- 同步标定内部参数和外部参数,一般包括两种策
略:
- 光学标定: 利用已知的几何信息(如定长棋盘格)实
现参数求解。 - 自标定: 在静态场景中利用 structure from
motion估算参数。
线性回归 (最小二乘)
- 优点:
所有的相机参数集中在一个矩阵中,便于求解
通过矩阵可以直接描述世界坐标中的三维点,到二维图像平面中点的映射关系。 - 缺点:
无法直接得知具体的内参数和外参数
求解出的11个未知量,比待标定参数(9个)更多。带来了参数不独立/相关的问题
对噪声/误差敏感
高精度的标定板难以制作
非线性优化
用概率的视角去看最小二乘问题
• 特征点投影方程:
• 给定{(ui,vi)},标定参数矩阵 M 的似然函数为:
• 给定{(ui,vi)},标定参数矩阵 M 似然函数的对数为:
相应求解策略: 牛顿方法、高斯-牛顿方法、Levenberg-Marquardt算法等
标定过程
- 打印一张棋盘格A4纸张(黑白间距已知),并贴在一个平板上
- 针对棋盘格拍摄若干张图片(一般10-20张)
- 在图片中检测特征点(Harris角点)
- 根据角点位置信息及图像中的坐标,求解Homographic矩阵
- 利用解析解估算方法计算出5个内部参数,以及6个外部参数
- 根据极大似然估计策略,设计优化目标并实现参数的refinement
相机标定优点:
• 仅需要平面标定板,拍摄若干张图片
• 标定板中的模式十分灵活,可以是棋盘格,也可以是其他几何结构已知的图形
• 实验结果表明具有很好的标定精度
• 具有很强的灵活性
实验过程
具体代码:
import cv2
import numpy as np
import glob
# 找棋盘格角点
# 阈值
criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 30, 0.001)
#棋盘格模板规格
w = 11 #内角点个数,内角点是和其他格子连着的点
h = 8
# 世界坐标系中的棋盘格点,例如(0,0,0), (1,0,0), (2,0,0) ....,(8,5,0),去掉Z坐标,记为二维矩阵
objp = np.zeros((w*h,3), np.float32)
objp[:,:2] = np.mgrid[0:w,0:h].T.reshape(-1,2)
# 储存棋盘格角点的世界坐标和图像坐标对
objpoints =