计算机视觉----相机标定

相机标定概念:图像测量过程以及计算器视觉中,为确定空间物体某点的三维几何关系位置与其在图像中对应点之间的相互关系,必须建立相机成像的几何模型,模型的参数就是相机的参数。求解参数的过程称为相机标定

开源代码参考

–Intel’s OpenCV library:http://www.intel.com/research/mrl/research/opencv/

–Matlab version by Jean-Yves Bouget:http://www.vision.caltech.edu/bouguetj/calib_doc/index.html

–Zhengyou Zhang’s web site:http://research.microsoft.com/~zhang/Calib/

opencv角点检测、棋盘格检测、亚像素cvFindCornerSubPix()

相机标定(Camera calibration)

OpenCV相机标定和姿态更新

实验步骤:

1.打印一张棋盘格A4纸张(黑白间距已知),并贴在一个平板上

2.针对棋盘格拍摄若干张图片(一般10-20张)

3.在图片中检测特征点(Harris特征)

4.利用解析解估算方法计算出5个内部参数,以及6个外部参数

5.根据极大似然估计策略,设计优化目标并实现参数的refinement

相机成像过程涉及坐标变换

包含世界坐标系(Xw,Yw,Zw),相机坐标(Xc,Yc,Zc),平面坐标(x,y),像素坐标(u,v).

1.1图像坐标系

坐标系中,每个像素坐标都是像素来表示的,但是像素表示不能反映图像中的物理尺寸,所以把像素坐标转换为图像坐标。像素坐标系的原点平移到图像的中心,就定为坐标系的原点,图像坐标系x,y分别与像素坐标系的u,v轴平行,方向相同。相机中感光器件每个像素物理尺寸dx*dy,则图像坐标系中的坐标(x,y)与像素坐标系中的坐标(u,v)之间的关系可以表示为:

改写成其次矩阵形式为:

1.2相机坐标系

相机坐标系以相机的光轴作为z轴,光现在相机的光学系统中心位置就是原点Oc,相机坐标系Xc,Yc分别于图像坐标系X,Y轴平行。相机坐标原点与图像坐标系的原点之间距离OcOf之间的距离f,即焦距。

相机坐标系                            立体几何坐标系

由图中的几何关系能够得到:

1.3世界坐标系

世界坐标系图像与真实物体之间的映射关系。也就是真实物体尺寸与图像尺寸的映射关系。相机坐标系到世界坐标系的变换公式为:

其中R=RxRyRz,T=[tx  ty  tz]T,分别是旋转矩阵和平移矩阵。

相机的内参和外参

外参:摄像机的旋转平移属于外参,用于描述相机在静态场景下相机的运动,或者在相机固定时,运动物体的刚性运动。因此,在图像拼接或者三维重建中,就需要使用外参来求几幅图像之间的相对运动,从而将其注册到同一个坐标系下面来.

内参:下面给出了内参矩阵,需要注意的是,真实的镜头还会有径向和切向畸变,而这些畸变是属于相机的内参的。由前面步骤得到像素坐标系到世界坐标系映射关系:

即:                              

其中,fx=f/dx,fy=f/dy,f是相机的焦距。RT是外参,矩阵K是内参,包含5个未知数,标定的时候,如果物体距离相机不同位置,那么我们必须在不同位置对相机坐标定。简单理解就是当物体离相机近的时候成像效果大,实际代表尺寸就小。因此每一个位置都要去标定。

图像的畸变以及矫正

2.1径向畸变:

透镜作为中心的原点,往外是透镜的半径方向,光线越靠近中心位置,畸变越小。径向畸变矫正公式:

   (x,y)是理想无畸变的坐标

2.2切向畸变

镜面与成像平面不平行,就产生畸变。类似于透视变换。矫正公式:

作用于真实图像后的矫正模型

畸变就是距离的变化,而距离的变化反应到坐标值上就是加减的关系。

相机的标定原理与方法

在图像测量过程以及机器视觉应用中,为确定空间物体表面某点的三维几何位置与其在图像中对应点之间的相互关系,必须建立相机成像的几何模型,这些几何模型参数就是相机参数。在大多数条件下这些参数必须通过实验与计算才能得到,这个求解参数的过程就称之为相机标定(或摄像机标定)本实验采用张正友标定法对相机进行标定。在张氏标定中用于标定的棋盘格是三维场景中的一个平面,成像平面的像是另一个平面。知道了这两个对应点的坐标,就可以求解得到两个平面的单应性矩阵H..其中,标定棋盘是特质的,交点坐标是已知的,通过角点的提取算法得到,这样就可以得到棋盘平面和图像平面的单应性矩阵H。通过上面的相机模型,令

H是成像平面和标定棋盘格之间的单应性矩阵,通过对应点解的H后,可以通过上面的等式得到相机内参数K,以及外参旋转矩阵R和平移向量t。假设棋盘格所在的平面为世界坐标Z=0的平面,这样的棋盘格任意一点P的世界坐标为(X,Y,0)。所以第三行r3的数据可以被省略。↓

由于每个单应性方程能提供两个方程,内参数矩阵包含5个方程,要求解至少需要3个单应性矩阵,使用至少三幅棋盘格对图片进行标定,改变相机与标定板之间的相对位置来得到三个不同的图片,通过图像得到关于内参数的两个等式,令

对称B是一个对称矩阵,未知量只有6个,将6个未知量写成向量的形式

令hi为单应性矩阵的第i个行向量,则有:

故:

结合上面两式重写矩阵可以推导出:

上面是取得约束的约束等式,假如n幅图像,则V是2n×6“的矩阵。Vb=0最后,使用SVD求解最小二乘,得到相机的各个内参数

以及外参数。

注意:当观测平面 n ≥ 3 时,可以得到b的唯一解

当 n = 2时, 一般可令畸变参数γ = 0

当 n = 1时, 仅能估算出α 与 β, 此时一般可假定像主点坐标 u0 与 v0 为0

实验结果?:

两个照片:

发现出现了虚数,没有得到唯一解

用三个:

四个:

五个:(得到的结果越来越精确)

消除径向畸变

张氏标定法只关注了较大的径向畸变,设(u,v)是理想无畸变的像素坐标,

是畸变后的像素坐标,使用下面式子表示径向畸变:

K1,K2分别表示径向畸变的系数,径向畸变的中心和相机中心是在相同的位置。

假设y=0,则有:

和上面类似,利用最大似然估计取得最优解,利用LM的方法估计使得下面式子是最小值的参数值

得到畸变参数之后,现将图像进行去畸变处理。然后用去畸变后图像坐标估计相机的内参数

数据采集,(12张图)                                       确定角点范围

 

角点提取 :

参数解算:

输入cameraParams.IntrinsicMatrix得到相机内参矩阵cameraParams.RadialDistortion径向畸变

matlab棋盘格标定角点,相机标定(Camera calibration)Matlab——棋盘格标定原理,流程...相关推荐

  1. 基于平面的约束2D激光雷达和相机的联合标定(2D Laser and Camera Calibration )原理及项目代码具体使用——旷视

    1 基于平面的约束2D激光雷达和相机的联合标定(2D Laser and Camera Calibration )原理 这是旷视做的一个关于2D激光雷达和相机的联合标定算法,在看这个标定算法之前,你可 ...

  2. OpenCV相机校准camera calibration的实例(附完整代码)

    OpenCV相机校准camera calibration的实例 OpenCV相机校准camera calibration的实例 OpenCV相机校准camera calibration的实例 #inc ...

  3. 相机参数标定(camera calibration)及标定结果如何使用

    重要更新:本文的第二次更新已发布.为了不破坏现有内容的结构,故重新开始新的一篇文章.同时本文的一些内容也会涵盖进去. 欢迎关注. <第二更,相机参数标定基础:从小孔成像开始到单双目标定> ...

  4. 单目相机(Mono camera)在MATLAB中的表示与实例

    目录 1 概述 2 单目相机(Mono camera) 2.1 基本概念 2.2 车体坐标系到相机坐标系 2.3 相机坐标系到像素坐标系 2.4 相关类和函数 2.4.1 monoCamera类 2. ...

  5. opencv基础:相机参数标定(camera calibration)及标定结果如何使用

    1.关于坐标系旋转和物体旋转对应的旋转矩阵差别 相关参考:https://blog.csdn.net/tangyongkang/article/details/5484636 注意旋转方向导致的旋转角 ...

  6. 求解相机参数Camera Calibration

    1 主要思想 使用黑白棋盘格,记录世界坐标系中关键点的坐标,然后使用手机拍照,记录相应点像素点的坐标. 这样就得到了许多3D-2D的配对点 2 详细过程 由 上一篇博客 内容可知, 其中 P' 为像素 ...

  7. 相机标定(Camera calibration)原理、步骤

    这已经是我第三次找资料看关于相机标定的原理和步骤,以及如何用几何模型,我想十分有必要留下这些资料备以后使用.这属于笔记总结. 1.为什么要相机标定? 在图像测量过程以及机器视觉应用中,为确定空间物体表 ...

  8. 工业互联网(十四)——相机标定(Camera calibration)原理、步骤

    转载: 最详细.最完整的相机标定讲解 图像处理--相机标定(Camera calibration) 相机标定 相机标定(Camera calibration)原理.步骤 工业相机标定相关知识整理 相机 ...

  9. Basler相机内参标定及Basler相机和Livox-avia激光雷达联合标定

    本次相机内参标定及相机-激光雷达联合标定采用的数据为同一批.数据采集系统:ubuntu-20.04,ROS-noetic. 前期准备 关于系统安装以及ROS环境配置,在这里不写出具体步骤,可查阅其他相 ...

最新文章

  1. BZOJ4152 AMPPZ2014 The Captain(最短路)
  2. 报名 | 风控中的A/B卡:申请模型和行为模型讲座
  3. 微软BI 之SSAS 系列 - 多维数据集维度用法之二 事实维度(退化维度 Degenerate Dimension)...
  4. Mysql创建触发器实现不同表的插入、更新、删除操作
  5. C#通过获取快捷方式指向目标的小示例触碰WMI
  6. jdk jre jvm 关系
  7. blob的真实地址怎么获得_《和平精英》不夜海上花套装怎么获得 不夜海上花免费领取地址_和平精英...
  8. 计算机二级offic考试题库2017,2017年9月计算机二级MSOffice考试题「带答案」
  9. entity framework使用技巧
  10. Java 几种常用 JSON 库性能比较
  11. oracle强大函数,oracle 函数排行
  12. 我,对安全研究专家下手的黑客!
  13. C++之List保存类内存问题
  14. centos7安装(二进制包)mysql8
  15. 2018-2019-1 20165214 《信息安全系统设计基础》第九周学习总结
  16. 宿命传说2之女神召唤java_【更新公告】新SSR装备召唤概率限时UP!梅林领悟了全新助战技!...
  17. html模板里引入js函数的几种方法
  18. 竞态条件的赋值_Go 译文之竞态检测器 race
  19. linux 系统定时任务 服务 详解
  20. 台式计算机启用时间查看,win7系统如何查看电脑的开关机时间想知道是否有他人使用...

热门文章

  1. linux c控制进程并发量,浅谈Linux环境下并发编程中C语言fork()函数的使用
  2. 数据结构实验(严蔚敏版)----栈与队列
  3. 921天,从小厂到入职阿里
  4. Codeforces Round #504 (rated, Div. 1 + Div. 2, based on VK Cup 2018 Final)切题报告(A-B题)
  5. Lattice并购案我国FPGA发展路径
  6. 一个转来的简单T9输入法
  7. 小博老师解读经典Java面试题—Java位运算
  8. 区块链系列课第二讲区块链的核心优势
  9. 打造个人云数据生活解决方案示例
  10. 初学者学习网页设计用什么软件最好?