计算机视觉-相机标定(Camera Calibration)
1.相机标定基本原理
1.1 简介
在图像测量过程以及机器视觉应用中,为确定空间物体表面某点的三维几何位置与其在图像中对应点之间的相互关系,必须建立摄像机成像的几何模型,这些几何模型参数就是摄像机参数。在大多数条件下这些参数必须通过实验与计算才能得到,这个求解参数的过程就称之为相机标定。简单来说是从世界坐标系换到图像坐标系的过程,也就是求最终的投影矩阵PPP的过程。
无论是在图像测量或者机器视觉应用中,摄像机参数的标定都是非常关键的环节,其标定结果的精度及算法的稳定性直接影响摄像机工作产生结果的准确性。因此,做好摄像机标定是做好后续工作的前提,是提高标定精度是科研工作的重点所在。其标定的目的就是为了相机内参、外参、畸变参数。
1.2 基本的坐标系
世界坐标系:用户定义的三维世界的坐标系,为了描述目标物在真实世界里的位置而被引入。
相机坐标系:在相机上建立的坐标系,为了从相机的角度描述物体位置而定义,作为沟通世界坐标系和图像/像素坐标系的中间一环。
图像坐标系:为了描述成像过程中物体从相机坐标系到图像坐标系的投影透射关系而引入,方便进一步得到像素坐标系下的坐标。
- 一般来说,标定的过程分为两个部分:
第一步是从世界坐标系转换为相机坐标系,这一步是三维点到三维点的转换,包括 RRR,ttt(相机外参)等参数;
第二步是从相机坐标系转为图像坐标系,这一步是三维点到二维点的转换,包括 KKK(相机内参)等参数;
- 同步标定内部参数和外部参数,一般包括两种策略s:
光学标定: 利用已知的几何信息(如定长棋盘格)实现参数求解。
自标定: 在静态场景中利用 structure from motion估算参数
1. 3 畸变参数
理想的小孔成像模型,物和像满足相似三角形的关系。实际上由于相机光学系统制造工艺的误差,实际成像与理想成像存在几何失真,称为畸变。畸变主要分为径向畸变和切向畸变。
(1)径向畸变(枕形、桶形):
①透镜质量原因
②光线在远离透镜中心的地方比靠近中心的地方更加弯曲。
径向畸变可以用如下公式修正:
(2)切向畸变(薄透镜畸变和离心畸变):
切向畸变是由于透镜制造上的缺陷使得透镜本身与图像平面不平行而产生的。
切向畸变可以用如下公式修正:
其中:
xdisx_{dis}xdis,ydisy_{dis}ydis表示有畸变的坐标;
xcorrx_{corr}xcorr,ycorry _{corr}ycorr表示修复后的坐标;
k1k_1k1,k2k_2k2,k3k_3k3 表示径向畸变参数;
p1p_1p1,p1p_1p1表示切向畸变参数
- 可知畸变有k1k_1k1,k2k_2k2,k3k_3k3,p1p_1p1,p2p_2p2五个参数,对于质量比较好的相机来说,切向畸变很小,可忽略,径向畸变系数k3k_3k3也可忽略,只计算k1k_1k1,k2k_2k2两个参数。张正友标定中就默认为p1p_1p1,p2p_2p2为0
1.4 相机标定
通过空间中已知坐标的(特征)点 ( XiX_iXi ,YiY_iYi ,ZiZ_iZi ) ,以及它们在图像中的对应坐标( uiu_iui , viv_ivi ) ,直接估算 11 个待求解的内部和外部参数。
xxx∼K[R∣t]XK[R|t]XK[R∣t]X=MXMXMX
相机模型:
1.4.1 线性标定(最小二乘)
线性标定不考虑相机的畸变而只考虑空间坐标转换。
每个坐标点有X,Y两个变量,可列两个方程,相机内参有5个未知数,外参平移和旋转各3个,共有11个变量,因此至少需要6个特征点来求解。
将xxx∼K[R∣t]XK[R|t]XK[R∣t]X=MXMXMX表示为
可得:
变形得:
可以表示为矩阵形式:
便可用最小二乘法求解。
给定超定方程(超定方程组是指方程个数大于未知量个数的方程组。对于方程组RaRaRa=yyy,R为n×mn×mn×m矩阵,如果RRR列满秩,且n>m。则方程组没有精确解,此时称方程组为超定方程组):AX=bA_X=bAX=b
其中x的解为等式两边的误差平方和最小化。
1.4.2 非线性标定
当镜头畸变明显时必须引入畸变模型,将线性标定模型转化为非线性标定模型,
通过非线性优化的方法求解相机参数:
用概率的视角去看最小二乘问题
特征点投影方程为
给定{(ui,vi)},标定参数矩阵 MMM 的概率为:
给定{(ui,vi)},标定参数矩阵 M 的似然函数为:
相应求解策略: 牛顿方法、高斯-牛顿方法、Levenberg-Marquardt算法等
1.4.3 张正友标定法(只考虑径向畸变,不考虑切向畸变)
张正友标定法利用棋盘格标定板可以利用相应的角点提取算法(如Harris角点)得到每一个角点的像素坐标(u,v)(u,v)(u,v)。
张正友标定法将世界坐标系固定于棋盘格上,则棋盘格上任一点的物理坐标 W=0W=0W=0,由于标定板的世界坐标系是人为事先定义好的,标定板上每一个格子的大小是已知的,我们可以计算得到每一个角点在世界坐标系下的物理坐标(U,V,W)=0(U,V,W)=0(U,V,W)=0。
我们将利用这些信息:每一个角点的像素坐标(u,v)(u,v)(u,v) 、每一个角点在世界坐标系下的物理坐标(U,V,W)=0(U,V,W)=0(U,V,W)=0,来进行相机的标定,获得相机的内外参矩阵、畸变参数。
1.4.3.1 基本原理
(1) 基本概念
其中:
sss: 世界坐标系到图像坐标系的尺度因子
AAA: 相机内参矩阵
(u0u_0u0,v0v_0v0): 像主点坐标
α, β: 焦距与像素横纵比的融合
γ: 径向畸变参数
(2)求解Homographic矩阵
不妨设棋盘格位于ZZZ = 0
定义旋转矩阵RRR的第iii列为 rir_iri, 则有:于是空间到图像的映射可改为:
其中HHH是描述Homographic矩阵
HHH矩阵可以根据特征点/棋盘格角点的空间坐标,以及其图像坐标用最小二乘法很容易求解。
Homography 有 8 个自由度,
由r1和r2正交,且r1和r2的模相等,可以得到如下约束:
(3)计算内参数矩阵
(4)计算外参数矩阵
(5)极大似然估计
给定nnn张棋盘格图像,每张图像有mmm个角点
最小化下述公式等同于极大似然估计:
上述非线性优化问题可以利用Levenberg-Marquardt 算法求解
需要初值
计算机视觉-相机标定(Camera Calibration)相关推荐
- matlab棋盘格标定角点,相机标定(Camera calibration)Matlab——棋盘格标定原理,流程...
计算机视觉----相机标定 相机标定概念:图像测量过程以及计算器视觉中,为确定空间物体某点的三维几何关系位置与其在图像中对应点之间的相互关系,必须建立相机成像的几何模型,模型的参数就是相机的参数.求解 ...
- 相机标定(Camera calibration)
前言:非测量相机 用于摄影测量的相机总体上可分为量测相机和非量测相机.对于专门为测量而设计的量测相机,具有已知的内方位元素.焦距.较小的镜头畸变以及定向设备,能达到相当高的精度:相对于价格较贵且设备复 ...
- OpenCV-Python相机标定:Camera Calibration
1.概述: 在使用相机拍照片时,大多数人会考虑拍的好不好看,关注相机中物体坐标的并不多,但是对于地信学科来说,如果能从照片中获取物体的真实位置,对地理信息获取大有帮助,在这里面,十分关键的一步就是相机 ...
- OpenCV相机校准camera calibration的实例(附完整代码)
OpenCV相机校准camera calibration的实例 OpenCV相机校准camera calibration的实例 OpenCV相机校准camera calibration的实例 #inc ...
- 计算机视觉----相机标定模型
简介 提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.相机标定简介 二.张友正黑白棋盘标定 1.思想 2.原理 3.模型求解 三.实验内容及过程 3.1 实验要求 ...
- 计算机视觉——相机标定
一.相机标定简介 相机标定指建立相机图像像素位置与场景点位置之间的关系,根据相机成像模型,由特征点在图像中坐标与世界坐标的对应关系,求解相机模型的参数.相机需要标定的模型参数包括内部参数和外部参数. ...
- 计算机视觉—— 相机标定
目录 简介 一.相机模型 1.坐标系 2.坐标系变化 3.相机畸变模型 二.相机标定原理 三.张正友黑白棋盘格标定 2.1.算法思想 2.2.求解内参和外参的积 2.3.求解内参矩阵 2.4.求解外参 ...
- 计算机视觉——相机标定之张正友标定法
这里写目录标题 一.相机标定 1.相机标定原理 2.相机标定步骤 3.数据集其他注意事项 二.相机标定实验 1.数据集 2.代码实现 3.实验结果 4.代码解读 一.相机标定 1.相机标定原理 2.相 ...
- ROS 教程之 vision: 摄像头标定camera calibration
在上一个ROS教程视觉文章中,我们使用usb_cam包读入并发布了图像消息,但是图像没有被标定,因此存在畸变.ROS官方提供了用于单目或者双目标定的camera_calibration包.这个包是使用 ...
最新文章
- No space left on device
- 第一次作业之成员介绍
- 云HBase小组成功抢救某公司自建HBase集群,挽救30+T数据
- 从一个点云里面创建一个深度图
- php字节怎么转化成字符串,php将utf-8(3字节)字符串转换成字节
- 【中级】【后台】 微信小程序 - 腾讯云 - wafer2 - PHP - DEMO - 003 - 源码分析 - 03 - 腾讯后台初始化 和 CodeIgniter
- PHP占用内存越来越多,解决phpQuery占用内存过多的问题
- Python学习:命令行运行,循环结构
- oracle null的解析
- C#下拉列表绑定数据库的使用三层实现
- ARMv8的OP-TEE源代码的获取和编译
- 远端异步调用事件结果
- java snmpv3_snmpv3 java实现
- 【博弈论】势博弈(potential game)、EPG以及最佳响应、Nash均衡和帕累托(pareto)最优的理解
- [状压DP]帮助Bubu
- 阿里云云虚拟主机开启安装SSL证书,开启HTTPS访问
- 【论文排版】参考文献的格式设置
- 音频视频点播收费在线观看系统网站小程序app开发建设
- 如何从零开始开发一款嵌入式产品!
- java中separator_JAVA中file.separator ,path.separator,line.separator
热门文章
- 网易2019笔试牛牛找工作Java解法
- 解决RecyclerView实现聊天界面,但点击下面的EditText后弹出的输入法会遮盖RecyclerView内容的方法
- 公众号授权微信昵称带表情符号保存时报错解决办法——昵称进行Base64加密解密
- 如何退出谷歌共享的云端网盘_如何在不更改共享链接的情况下更新Google云端硬盘中的共享文件...
- 《Using OpenRefine》翻译~12
- 《Using OpenRefine》翻译~4
- 【算法导论07】回溯法-旅行售货员问题
- c语言isnumber函数的使用方法,ISNUMBER函数详解_Excel公式教程
- 四个翅膀的飞机Simulink与轨迹跟踪仿真
- 第三章 正则表达式括号的作用