camera标定
来源:互联网 发布:centos忘记密码 编辑:程序博客网 时间:2024/06/09 09:14
相机标定是图像处理的基础,虽然相机使用的是小孔成像模型,但是由于小孔的透光非常有限,所以需要使用透镜聚焦足够多的光线。在使用的过程中,需要知道相机的焦距、成像中心以及倾斜因子(matlab的模型有考虑,实际中这个因子很小,也可以不考虑)。为了增加光照使用了透镜,而使用透镜的代价是会产生畸变,现在市面上买到的相机,都存在着或多或少的畸变。畸变的种类比较多,这里介绍常见的两种:径向畸变、切向畸变。相机标定就是求解相机的内参数以及畸变参数的过程。
畸变种类
(1)径向畸变(参考自《学习opencv》412页)
摄像头的透镜在传感器的边缘产生显著的畸变,如下图所示。对于径向畸变,光学中心的畸变为-,随着向边缘移动,畸变会越来越严重。由于畸变比较小,所以可以用泰勒级数的低阶项来近似。
(2)切向畸变。
另外一种需要考虑的相机畸变是切向畸变,切向畸变的主要原因是透镜本身和图像平面不平行,如下左图所示。切向畸变导致的结果是在成像平面上所成的像为下右图所示。
相机的标定
相机的标定主要有两种:传统的摄像头标定方法和摄像头自标定方法,典型的有:(1)Tsai(传统的标定方法);(2)张正友(介于传统和自标定之间)。张正友标定方法由于简单、效果好而得到广泛使用。这里只介绍张正友标定方法。
张正友标定法的标定步骤
1、打印一张模板并贴在一个平面上;
2、从不同角度拍摄若干张模板图像;
3、检测出图像中的特征点;
4、求出摄像机的外参数(单应性矩阵)和内参数(最大似然估计) ;
5、求出畸变系数;
6、优化求精。理论基础
现在来介绍张正友标定方法中的理论知识,以飨读者。张正友标定方法的主要思想是、
1、相机内参矩阵q=MQ
其中,
2、基础公式
对于不同位置的棋盘格到相机的成像,可以使用下面的公式进行表示:
其中,
进行化简得到:
其中
其中
3、单应矩阵求解:
这里使用的方法基于最大似然准则:假设提取的
则优化目标为
其中
求解上面的非线性优化问题可以使用LM算法。
(1)初始值求解
令
对于
Q:为什么用svd求了,还需要用最大似然方法来优化?svd求的
4、求解相机内参
(1)利用约束条件求解内参矩阵A
在公式中,由于
上面的公式写成方程组的形式如下所示:
上面的等式是一个最小二乘问题,可以使用SVD求解.由于A有5个参数:
也可以使用两个单应性矩阵,此时需要令
5、求解相机外参
在上面求解了相机的内参之后,可以求出棋盘格的位姿,公式如下:
在OpenCV中,上面的公式是用来求解优化参数的初始值的,最终的结果是使用优化的方法得到的。
由于存在误差,还是需要迭代求解以提高精度(问题描述如下):
给定棋盘格的
似然函数如下所示:
其中旋转矩阵
6、相机的畸变参数求解
上面的讨论中一直没有引入相机畸变的问题,这里引入相机的畸变。
记
对于径向畸变(这是张正友上的模型,泰勒展开):
用像素坐标表示则为:
写成如下形式:
给定
则
最小二乘方法求解:
如果求解了畸变参数
畸变参数
OpenCV的模型(《学习OpenCV》,这是Brown和Fryer的工作)还包括了切向畸变,并且镜像畸变有三项。因此,opencv中一共有五个参数
。
OpenCV的标定步骤
1、初始化参数求解;
a、求解单应性矩阵;
b、根据理论的第4步求解相机内参的初始值;
c、根据理论的第5步求解相机外参的初始值;
d、畸变参数设置为0。
2、迭代求解总体最小二乘问题,也就是上面6所示的最小二乘问题。
后面会接着介绍最小二乘中的数学相关知识
- camera标定
- Camera Calibration 相机标定
- Camera Calibration 相机标定
- 摄像机标定 camera calibration
- Camera Calibration 相机标定
- 相机标定 Camera Calibration
- 相机标定(Camera calibration)
- Camera-IMU标定过程
- 摄像机标定(Camera calibration)笔记
- 摄像机标定(Camera calibration)笔记
- 摄像机标定03_标定过程(Camera Calibration)
- camera calibration 摄像头标定 代码整理
- camera calibration 摄像头标定 代码整理a
- camera calibration 摄像头标定 代码整理
- Camera Calibration摄像机棋盘标定(单副图)源程序
- Camera Calibration 相机标定:Opencv应用方法
- 摄像机标定:理论--Calibrating a camera: Theory
- 张正友标定、Camera Calibration Toolbox for Matlab
- 数据结构与算法:二叉树
- JavaSE复习(一)java概述和基本语法上
- Linux下常见的关于目录操作的命令
- 设计模式之外观模式
- 基于MATLAB GUI的串口通信
- camera标定
- 零基础学小程序008----小程序列表实现+本地json数据解析渲染到小程序列表
- android.content.ActivityNotFoundException: No Activity found to handle Intent {
- HDU 5491 The Next(技巧性模拟)
- 在这里写上noip后要填的坑吧
- 光棍节的快乐
- 【2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛】 J Our Journey of Dalian Ends 【拆点费用流】
- 拓展-response响应头设置总结
- python数据分析复盘——数据分析相关库之Pandas