相机标定 和 单应性矩阵H
求解相机参数的过程就称之为相机标定。
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)
2.3图像物理坐标系(x,y):->图像像素坐标系(u,v):
3.世界坐标系与图像像素坐标系之间的变换关系:
M1称为相机的内参数,M2称为外参数
单应性矩阵H,来自于不同角度的拍摄,













转自:http://blog.csdn.net/yonger_/article/details/55194602
相机标定 和 单应性矩阵H的更多相关文章
- 机器学习进阶-案例实战-图像全景拼接-图像全景拼接(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 ...
- OpenCV仿射变换+投射变换+单应性矩阵
本来想用单应性求解小规模运动的物体的位移,但是后来发现即使是很微小的位移也会带来超级大的误差甚至错误求解,看起来这个方法各种行不通,还是要匹配知道深度了以后才能从三维仿射变换来入手了,纠结~ esti ...
- opencv 仿射变换 投射变换, 单应性矩阵
仿射 estimateRigidTransform():计算多个二维点对或者图像之间的最优仿射变换矩阵 (2行x3列),H可以是部分自由度,比如各向一致的切变. getAffineTransform( ...
- OpenCV 之 平面单应性
上篇 OpenCV 之 图象几何变换 介绍了等距.相似和仿射变换,本篇侧重投影变换的平面单应性.OpenCV相关函数.应用实例等. 1 投影变换 1.1 平面单应性 投影变换 (Projectiv ...
- 单应性(homography)变换的推导
矩阵的一个重要作用是将空间中的点变换到另一个空间中.这个作用在国内的<线性代数>教学中基本没有介绍.要能形像地理解这一作用,比较直观的方法就是图像变换,图像变换的方法很多,单应性变换是其中 ...
- 【Computer Vision】图像单应性变换/投影/仿射/透视
一.基础概念 1. projective transformation = homography = collineation. 2. 齐次坐标:使用N+1维坐标来表示N维坐标,例如在2D笛卡尔坐标 ...
- python opencv3 FLANN单应性匹配
git:https://github.com/linyi0604/Computer-Vision 匹配准确率非常高. 单应性指的是图像在投影发生了 畸变后仍然能够有较高的检测和匹配准确率 # codi ...
- OpenCV-Python 特征匹配 + 单应性查找对象 | 四十五
目标 在本章节中,我们将把calib3d模块中的特征匹配和findHomography混合在一起,以在复杂图像中找到已知对象. 基础 那么我们在上一环节上做了什么?我们使用了queryImage,找到 ...
- halcon相机标定及图像矫正
https://blog.csdn.net/humanking7/article/details/44756073 相机标定内容详解:转载自 祥的博客 预备知识 标定中的四个坐标系 1.1.平面旋转 ...
随机推荐
- 1.6 JAVA高并发之线程池
一.JAVA高级并发 1.5JDK之后引入高级并发特性,大多数的特性在java.util.concurrent 包中,是专门用于多线程发编程的,充分利用了现代多处理器和多核心系统的功能以编写大规模并发 ...
- Java实现网上商城
// 第一个JavaWeb项目 //练手项目没有使用框架 github下载 https://github.com/dejavudwh/Online-Shopping 项目截图 1.基本实现了购物网站该 ...
- leetcode个人题解——#48 rotage image
思路:本题要求不能利用额外的二维数组实现旋转,所以重点在于弄清矩阵旋转的数学方法. 我的方法是,首先按照副对角线进行对称,然后按照水平中轴线进行对称即可. class Solution { publi ...
- 月薪45K的Python爬虫工程师告诉你爬虫应该怎么学,太详细了!
想用Python做爬虫,而你却还不会Python的话,那么这些入门基础知识必不可少.很多小伙伴,特别是在学校的学生,接触到爬虫之后就感觉这个好厉害的样子,我要学.但是却完全不知道从何开始,很迷茫,学的 ...
- Github二次学习
作者声明:本博客中所写的文章,都是博主自学过程的笔记,参考了很多的学习资料,学习资料和笔记会注明出处,所有的内容都以交流学习为主.有不正确的地方,欢迎批评指正. 本节课视频内容:https://www ...
- python中的os.walk
原文出处:https://www.jianshu.com/p/bbad16822eab python中os.walk是一个简单易用的文件.目录遍历器,可以帮助我们高效的处理文件.目录方面的事情. 1. ...
- String、Date、Calendar之间的转换
1.String.Date.Calendar之间的转换 要用到格式化类SimpleDateFormat package com.rong.se; import java.text.ParseExcep ...
- 软工实践团队展示——WorldElite
软工实践团队展示--WorldElite 本次作业链接 团队成员 031602636许舒玲(组长) 031602237吴杰婷 031602634吴志鸿 081600107傅滨 031602220雷博浩 ...
- 解决pciss_spc导入提示表空间不存在以及扩展失败的问题
select NAME FROM USER$ ORDER BY NAME ; CREATE USER pciss IDENTIFIED BY pciss ; GRANT DBA TO pciss ; ...
- promise你懂了吗?
你能答对几题? 题目一 const promise = new Promise((resolve, reject) => { console.log(1) resolve() console.l ...