求解相机参数的过程就称之为相机标定。

1.相机模型中的四个平面坐标系:

1.1图像像素坐标系(u,v)

以像素为单位,是以图像的左上方为原点的图像坐标系;

1.2图像物理坐标系(也叫像平面坐标系)(x,y)

以毫米为单位,用物理单位表示图像像素位置,定义坐标系OXY,原点O定义在相机Zc轴与图像平面交点;

1.3相机坐标系(Xc,Yc,Zc)

以毫米为单位,以相机的光心作为原点,Zc轴与光轴重合,并垂直于成像平面,且取摄影方向为正方向,Xc、Yc轴

与图像物理坐标系的x,y轴平行,且OcO为摄像机的焦距f;

1.4世界坐标系(Xw,Yw,Zw)

根据具体情况而定,该坐标系描述环境中任何物体的位置,根据具体情况而定,满足右手法则;

四个坐标系关系作图如下:

2.四个坐标系转换

2.1世界坐标系(Xw,Yw,Zw)->相机坐标系(Xc,Yc,Zc):

摄像机的外参数: 旋转向量(大小为1×3的矢量或旋转矩阵3×3)和平移向量(Tx,Ty,Tz)

从相机坐标系到世界坐标系的变换,是通过旋转矩阵R和平移矩阵t完成的。

式中,M1称为相机的外参数. R为3*3矩阵,T为3*1矩阵,0为(0,0,0),旋转矩阵R是坐标轴依次绕x,y和z轴旋转角度ψ,φ和θ,所形成的三个矩阵Rx(ψ),Ry(φ),Rz(θ)的总乘积,

如下:

矩阵R的计算公式为:

2.2相机坐标系(Xc,Yc,Zc):->图像物理坐标系(x,y):

摄像机的内参数:摄像机内参数矩阵(fx,fy,u0,v0)和畸变系数(三个径向k1,k2,k3,两个切向p1,p2)

OpenCV中的畸变系数的排列(这点一定要注意k1,k2,p1,p2,k3)、

理想的摄像机模型是针孔模型,但是实际的镜头不符合这种假设。另外,相机的构造以及制造、安装、工艺等因素也会造成误差,导致相机通常会存在多种非线性畸变,使得上面介绍的针孔相机模型并不能准确地描述最终的成像关系。所以,为了使相机标定结果更加准确,在进行相机标定时应该将相机的非线性畸变考虑进来,修正理想投影模型。

径向畸变

径向畸变产生的主要原因是镜头径向曲率的不规则变化,它会导致图像的扭曲变形,例如,空间中的一条直线成像到图像平面后发生弯曲,变形成一条曲线。这种畸变的特点是以主点为中心,沿径向移动,离的距离越远,产生的变形量就越大。径向畸变是导致图像畸变的主要因素。如图所示,一个矩形的严重径向失真被较正成理想线性镜头的图像。

径向畸变模型在OpenCV中被描述为:

xcorrected=x(1+k1r2+k2r4+k3r6)ycorrected=y(1+k1r2+k2r4+k3r6)

径向畸变如下图所示,有桶形畸变和枕形畸变两种。

切向畸变

由于透镜不是完美地平行于图像平面,所以存在切向畸变。这种畸变使得一些区域看上去比预期的近。畸变模型为:

xcorrected=x+[2p1xy+p2(r2+2x2)]ycorrected=y+[p1(r2+2y2)+2p2xy]

通常还有离心畸变、薄棱镜畸变等,但主要畸变是径向畸变和切向畸变,故opencv中使用这个5个参数描述摄像机畸变,即:

Distortion  coefficients=(k1,k2,p1,p2,k3)

针孔模型下的理想透视投影变换:
表示为矩阵形式为:
f表示有效焦距

2.3图像物理坐标系(x,y):->图像像素坐标系(u,v):

上述公式中我们假设物理坐标系中的单位为毫米,那么dx的的单位为:毫米/像素。那么x/dx的单位就是像素了,即和u的单位一样都是像素,u0 ,v0是图像中心(光轴与图像平面的交点)坐标,dx,dy分别为一个像素在X与Y 方向上的物理尺寸.
上式表示为齐次坐标与矩阵形式表示出来即为:
其逆关系可表示为:

3.世界坐标系与图像像素坐标系之间的变换关系:

M1称为相机的内参数,M2称为外参数

单应性矩阵H,来自于不同角度的拍摄,

转自:http://blog.csdn.net/yonger_/article/details/55194602

相机标定 和 单应性矩阵H的更多相关文章

  1. 机器学习进阶-案例实战-图像全景拼接-图像全景拼接(RANSCA) 1.sift.detectAndComputer(获得sift图像关键点) 2.cv2.findHomography(计算单应性矩阵H) 3.cv2.warpPerspective(获得单应性变化后的图像) 4.cv2.line(对关键点位置进行连线画图)

    1. sift.detectAndComputer(gray, None)  # 计算出图像的关键点和sift特征向量 参数说明:gray表示输入的图片 2.cv2.findHomography(kp ...

  2. OpenCV仿射变换+投射变换+单应性矩阵

    本来想用单应性求解小规模运动的物体的位移,但是后来发现即使是很微小的位移也会带来超级大的误差甚至错误求解,看起来这个方法各种行不通,还是要匹配知道深度了以后才能从三维仿射变换来入手了,纠结~ esti ...

  3. opencv 仿射变换 投射变换, 单应性矩阵

    仿射 estimateRigidTransform():计算多个二维点对或者图像之间的最优仿射变换矩阵 (2行x3列),H可以是部分自由度,比如各向一致的切变. getAffineTransform( ...

  4. OpenCV 之 平面单应性

    上篇 OpenCV 之 图象几何变换 介绍了等距.相似和仿射变换,本篇侧重投影变换的平面单应性.OpenCV相关函数.应用实例等. 1  投影变换 1.1  平面单应性 投影变换 (Projectiv ...

  5. 单应性(homography)变换的推导

    矩阵的一个重要作用是将空间中的点变换到另一个空间中.这个作用在国内的<线性代数>教学中基本没有介绍.要能形像地理解这一作用,比较直观的方法就是图像变换,图像变换的方法很多,单应性变换是其中 ...

  6. 【Computer Vision】图像单应性变换/投影/仿射/透视

    一.基础概念 1. projective transformation  = homography = collineation. 2. 齐次坐标:使用N+1维坐标来表示N维坐标,例如在2D笛卡尔坐标 ...

  7. python opencv3 FLANN单应性匹配

    git:https://github.com/linyi0604/Computer-Vision 匹配准确率非常高. 单应性指的是图像在投影发生了 畸变后仍然能够有较高的检测和匹配准确率 # codi ...

  8. OpenCV-Python 特征匹配 + 单应性查找对象 | 四十五

    目标 在本章节中,我们将把calib3d模块中的特征匹配和findHomography混合在一起,以在复杂图像中找到已知对象. 基础 那么我们在上一环节上做了什么?我们使用了queryImage,找到 ...

  9. halcon相机标定及图像矫正

    https://blog.csdn.net/humanking7/article/details/44756073 相机标定内容详解:转载自 祥的博客 预备知识 标定中的四个坐标系 1.1.平面旋转 ...

随机推荐

  1. 面向 Unity* 软件和虚拟现实的优化:运行时生成内容

    优化游戏以实现高性能一直是游戏开发过程中的一个重要因素.虽然开发人员一直尝试将硬件推向极致,但当移动游戏成为主流时,优化技术变得尤为突出.Unity* 软件.Unreal* 等常见引擎最初都是面向 P ...

  2. java面向对象的栈 队列 优先级队列的比较

    栈 队列 有序队列数据结构的生命周期比那些数据库类型的结构(比如链表,树)要短得多.在程序操作执行期间他们才被创建,通常用他们去执行某项特殊的任务:当完成任务之后,他们就会被销毁.这三个数据结构还有一 ...

  3. Beta发布-----欢迎来怼团队

    欢迎来怼项目小组—Beta发布展示 一.小组成员 队长:田继平 成员:葛美义,王伟东,姜珊,邵朔,阚博文 ,李圆圆 二.文案+美工展示 链接:http://www.cnblogs.com/js2017 ...

  4. Requests库常用方法及其详解

    request库七个方法详解 1. request方法 所有方法的的基础方法,三个参数:method,url,**kwargs. 1.1 method:请求方式 method参数共有七个可选的值,分别 ...

  5. 线段树-hdu2795 Billboard(贴海报)

    hdu2795 Billboard 题意:h*w的木板,放进一些1*L的物品,求每次放空间能容纳且最上边的位子 思路:每次找到最大值的位子,然后减去L 线段树功能:query:区间求最大值的位子(直接 ...

  6. 升级Xcode之后VVDocumenter-Xcode不能用的解决办法

    VVDocumenter-Xcode上一款快速添加标准注释,并可以自动生成文档的插件.有了VVDocumenter-Xcode Objective-C效果图: Swift效果图:从UUID证书从而保证 ...

  7. OSG学习:LOD、数据分页、动态调度

    LOD(level of detail):是指根据物体模型的结点在显示环境中所处的位置和重要度,决定物体渲染的资源分配,降低非重要物体的面数和细节度,从而获得高效率的渲染运算.在OSG的场景结点组织结 ...

  8. (一)MySQL基础篇

    1.mysql简介 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库. 主流的数据库有:sqlserver,mysql,Oracle.SQLite.Access.MS SQL Se ...

  9. 结对编程——paperOne基于java web的简易四则运算出题网站

    项目成员:张金生     张政 需求分析: 1.要进行四则运算: 2.运算题目随机: 3.进行对错判断: 4.整数运算. 程序概要: 1.用JSP实现: 2.用户可选择题目数量: 3.答题页用表格列出 ...

  10. 数据输出保存生成word文档

    ob_start(); //打开缓冲区 $header_str = '<html xmlns:o="urn:schemas-microsoft-com:office:office&qu ...