Python计算机视觉编程_04

本文介绍了相机投影模型和参数,包括内部参数如焦距、像主点偏移和径向畸变,以及外部参数的位移和旋转。详细讨论了相机标定的过程,包括线性标定和非线性优化方法,分析了各自的优缺点,并提供了标定的代码实现。

前言

之前我们进行了平面图像的特征点检测,特征点匹配,图像拼接,而近几年计算机视觉更偏向三维模型相关的内容,包括但不限于3D建模,3D点云,机器人(无人机等)的定位,自动驾驶等。
而在进行以上这些工程的时候,我们得先确定我们使用工具的具体信息,哪怕我们使用的各种仪器(摄像头,照相机等)都有提供对应的参数,但因为工艺问题或者使用不当,参数都会有一定的波动,这就需要我们进行相机标定来进行相机参数的确定。

1.相机投影模型

进行参数标定之前我们肯定要先明白相机是如何将三维的现实世界压缩成二维图片的。
在这里插入图片描述
图为简易的模型,事实上相机的投影应该是在光心center的左边,但为了便于理解和方便演示,我们将投影对称的放到光心的右边;很明显,根据初中的数学知识,现实空间的点可以等比的投影到平面上,这个比例为f(光心到投影平面的距离,即焦距)/Z(目标到光心的距离,即目标与相机之间的距离)
所以我们很显然可以得到这个公式
f/Z=x/X=y/Y
在这里插入图片描述
整理变化后,我们可以得到如图所示的式子,这里我们引入齐次坐标以解决统一计算和欧式空间中,无穷远点无法表示的问题,具体原理可以参考这篇文章:https://www.jianshu.com/p/0cce4406d5ad

2.相机参数

2.1.内部参数

在这里插入图片描述
在这里插入图片描述
u0,v0表示像主点P的偏移距离,f为焦距,实际上相机的内部参数还涉及到非正方形像素(像素点不是正方形),径向畸变(光线在远离透镜中心的地方比靠近中心的地方更加弯曲)

2.2.外部参数

相机相对于立体世界的坐标系的变化就是相机的外部参数(位移和旋转)
在这里插入图片描述
位移是简单粗暴的坐标原点之差(可以理解为相机中心在立体坐标系中的坐标),而旋转就有点复杂了
在这里插入图片描述
在这里插入图片描述

3.相机标定

同步标定内部参数和外部参数,一般包括两种策略:
1.光学标定: 利用已知的几何信息(如定长棋盘格)实
现参数求解。
2.自标定: 在静态场景中利用 structure from
motion估算参数。
而参数的计算方法也有两种:
1.线性回归(最小二乘法)
2.非线性优化

3.1.线性标定

在这里插入图片描述
我们通过空间中已知坐标的(特征)点 (Xi,Y i,Zi),以及它们在图像中的对应坐标 (ui,vi),直接估算 11 个待求解的内部和外部参数。
在这里插入图片描述
在这里插入图片描述
就像以前介绍过的那样,最小二乘法解11个未知参数至少需要6个匹配对(每个匹配对提供2个方程从而解得两个未知数)
线性标定的优缺点都很明显
优点:
1.所有的相机参数集中在一个矩阵中,便于求解
2.通过矩阵可以直接描述世界坐标中的三维点,到二维图像平面中点的映射关系
缺点:
1.无法直接得知具体的内参数和外参数
2.求解出的11个未知量,比待标定参数(9个)更多。带来了参数不独立/相关的问题
3.对噪声/误差敏感
4.高精度的标定板难以制作

3.2.非线性标定

采用概率的角度开看这个最小二乘问题,特征点投影方程为:
在这里插入图片描述
给定{(ui,vi)},标定参数矩阵 M 的似然函数为:
在这里插入图片描述
给定{(ui,vi)},标定参数矩阵 M 似然函数的对数为:
在这里插入图片描述
等价为:
在这里插入图片描述
相应求解策略: 牛顿方法、高斯-牛顿方法、Levenberg-Marquardt算法等就不具体展开了,感兴趣的同学自行百度搜索

4.代码实现

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 = [] # 在世界坐标系中的三维点
imgpoints = [
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值