机器视觉学习笔记(4)——单目摄像机标定参数说明

from:https://blog.csdn.net/xuelabizp/article/details/50314633

机器视觉学习笔记(4)——单目摄像机标定参数说明

标签: 机器视觉


1.针孔摄像机模型

  • 在介绍摄像机标定参数之前,需要先简单说一下针孔摄像机的原理。投影平面到小孔的距离为焦距f,物体到小孔的距离为Z,其中物体和投影是倒立相似的关系,下图为针孔摄像机的投影示意图:

  • 如果按照实际的投影关系建立坐标系,那么投影坐标和物体坐标的符号总是相反的,考虑起来不太方便,于是在“数学上”把投影平面平移到其关于小孔对称的位置,这样投影坐标和物体坐标符号就相同了,示意图如下:

  • 根据三角形相似的原理,可以列出如下等式: 

    fZ=ll

2.摄像机中的坐标系

  • 摄像机中的坐标系有4个,均为右手坐标系,分别记为{world},{camera},{picture},{pixel},下图所示列出了{camera},{picture}和{pixel}坐标系:

  • {world},{camera},{picture}和{pixel}坐标系的坐标用下标来区分,分别是W,c,p,pix

  • {world},{camera},{picture}坐标系单位为长度,一般为mm;{pixel}坐标系单位为像素,一般为pix
  • {world}坐标系为世界坐标系,可以任意指定,其他坐标系都有明确的定义
  • {camera}坐标系为摄像机坐标系,原点在小孔的位置,z轴与光轴重合,Xc轴和Yc轴分别和投影面两边平行
  • {picture}坐标系为图像坐标系,光轴和投影面的交点为原点,Xp轴和Yp轴分别和投影面两边平行
  • {pixel}坐标系为像素坐标系,从小孔向投影面方向看,投影面的左上角为原点Opix,Xpix轴和Ypix轴和投影面两边重合

3.各个坐标系的坐标转换

3.1{world}到{camera}

设某点在{world}坐标系中的坐标为 PW=[xW,yW,zW,]T PW=[xW,yW,zW,]T,该点在{camera}坐标系中的坐标为Pc=[xc,yc,zc,]TPc=[xc,yc,zc,]T,则有 

Pc=[R0T1]PW(1)(1)Pc=[RT01]PW

其中R是正交旋转矩阵: 
R=r11r21r31r12r22r32r13r23r33(2)(2)R=[r11r12r13r21r22r23r31r32r33]

T是平移矩阵: 
T=[txtytz]T(3)(3)T=[txtytz]T

确定R需要3个参数,确定T需要3个参数,共需6个参数,这6个参数称为 摄像机的外部参数

3.2{camera}到{picture}

根据三角形相似原理,可得 

xp=fxczcyp=fyczc(4)(4){xp=fxczcyp=fyczc

写成矩阵形式 
zcxpyp1=f000f0001000xcyczc1(5)(5)zc[xpyp1]=[f0000f000010]⋅[xcyczc1]

3.3{picture}到{pixel}

sxsx表示Xpix方向上单位mm的像素数,单位是pix/mm 
sysy表示Ypix方向上单位mm的像素数,单位是pix/mm 
x0,y0x0,y0表示投影平面中心在{pixel}中的坐标,则有 

{xpix=x0+xpsxypix=y0+ypsy(6)(6){xpix=x0+xp⋅sxypix=y0+yp⋅sy

写成矩阵形式 
xpixypix1=sx000sy0x0y01xpyp1(7)(7)[xpixypix1]=[sx0x00syy0001]⋅[xpyp1]

3.4{world}到{pixel}

记 

{fx=fsxfy=fsy(8)(8){fx=f⋅sxfy=f⋅sy

分别表示焦距f在Xpix和Ypix方向上的等效焦距,单位是pix,结合(1)(5)(7)(8)式可得 
zcxpixypix1=fx000fy0x0y01000[R0T1]xWyWzW1(9)(9)zc[xpixypix1]=[fx0x000fyy000010]⋅[RT01][xWyWzW1]

3.5小结

单目摄像机需要标定参数就是fx,fy,x0,y0fx,fy,x0,y0这4个参数

  • fx,fy,x0,y0fx,fy,x0,y0叫做摄像机的内部参数,因为这些参数只和摄像机有关系,和具体的摄像场景,和世界坐标系没有关系
  • RRTT内部一共有6个独立的参数,叫做外部参数。外部参数是描述世界坐标系和摄相机坐标系的参数,所以只要世界坐标系和摄相机坐标系的相对位姿发生了变化,RRTT就会改变,甚至可以说,每一张图片的RRTT都不一样
  • 单目摄像机标定就是已知像素坐标系下的坐标PpixPpix和世界坐标系下的坐标PWPW,列方程组求解内部参数

4.摄像机透镜畸变

由于针孔可以透过的光线太少,成像会不清楚,所以往往都会加上凸透镜汇聚更多的光线。但是加上凸透镜以后,会导致成像畸变,所以还需要校正透镜畸变。透镜的畸变主要分为两类,一类是径向畸变,一类是切向畸变

4.1径向畸变

径向畸变会产生“鱼眼”现象。成像中心处径向畸变为0,径向畸变随着与成像中心距离增大而增大,在图像边缘处达到最大径向畸变。常常用偶次幂的泰勒公式描述径向畸变 

{xcerrected=x(1+k1r2+k2r4+k3r6)ycerrected=y(1+k1r2+k2r4+k3r6)(10)(10){xcerrected=x(1+k1r2+k2r4+k3r6)ycerrected=y(1+k1r2+k2r4+k3r6)

4.2切向畸变

切向畸变由透镜和成像平面不平行引起。常用如下公式描述 

{xcerrectedycerrected=x+[2p1y+p2(r2+2x2)]=y+[p1(r2+2y2)+2p2x](11)(11){xcerrected=x+[2p1y+p2(r2+2x2)]ycerrected=y+[p1(r2+2y2)+2p2x]

4.3小结

单目摄像机透镜畸变校正需要确定的就是k1,k2,k3,p1,p2k1,k2,k3,p1,p2这5个参数,如果“鱼眼”现象不明显的话,常常使用k1,k2k1,k2来校正径向畸变

5.总结

  • 单目摄像机标定和校正最终将获得9个参数,内部参数是4个,畸变校正参数是5个
  • 单目摄像机标定常用的工具有OpenCV库和Matlab摄像机标定工具箱

具体如何使用OpenCV标定单目摄像机(含源代码),请参考下一篇博文机器视觉学习笔记(5)——基于OpenCV的单目摄像机标定


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/458244.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql 5.6 binlog组提交

mysql 5.6 binlog组提交实现原理http://blog.itpub.net/15480802/viewspace-1411356 Redo组提交 Redo提交流程大致如下 lock log->mutex write redo log buffer to disk unlock log->mutex fsync Fsync写磁盘耗时较长且不占用log->mutex,也就是其执行期间其…

python基础(正则表达式)

http://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html 转载于:https://www.cnblogs.com/wanderingzj/p/5253325.html

LinuxShell脚本之利用rsync+ssh实现Linux文件系统远程备份

功能介绍:该脚本用于定期(结合crontab一起使用)将本地目录通过rsyncssh传输到远程服务器,每次执行都生成一个带有以时间命名的目录,并且当前最新版本的数据链接到一个名字叫current的符号链接上,便于查找和…

张正友相机标定Opencv实现以及标定流程标定结果评价图像矫正流程解析(附标定程序和棋盘图)

from:https://blog.csdn.net/dcrmg/article/details/52939318使用Opencv实现张正友法相机标定之前,有几个问题事先要确认一下,那就是相机为什么需要标定,标定需要的输入和输出分别是哪些?相机标定的目的:获…

软件测试技术 homework2

Code 1 1.fault是迭代的条件应该是 i > 0 而不是 i > 0 2.当测试用例是 [3,2,1],1 时。 3.当测试用例是 [2,3,4],1 。 4.当测试用例是 [2],1 。 Code 2 1.fault是应该逆序迭代,正确为for(int i x.length-1;i>0;i--) 2.当测试用例是[0,1&#x…

header的安全配置指南

0x00 背景 在统计了Alexa top 100万网站的header安全分析之后(2012年11月 - 2013年3月 - 2013年11月),我们发现其实如何正确的设置一个header并不是一件容易的事情。尽管有数不胜数的网站会使用大量有关安全方面的header,但 并没有…

opencv双目视觉标定、匹配和测量 (附代码)

from:https://blog.csdn.net/bcj296050240/article/details/52778741双目视觉原理方面参照《学习Opencv》和大牛博客 http://blog.csdn.net/chenyusiyuan/article/details/5970799中16-19系列博客。本文主要记录我自己在双目视觉标定,立体匹配&#xff0…

dom内容区域的滚动overflow,scroll

去掉手机上点击点中的默认高亮效果 -webkit-tap-highlight-color: rgba(0,0,0,0); ios手动启动一下监听touch事件以响应css伪类: document.addEventListener("touchstart", function(){}, true) 传统 pc 端中,子容器高度超出父容器高度,通常使…

工业相机的选择方法

信号  工业相机的信号类型有模拟信号和数字信号两种。模拟相机必须有图像采集卡,标准的模拟相机分辨率很低,采集到的是模拟信号,经数字采集卡转换为数字信号进行传输存储。工业数字相机采集到的是数字信号,数字信号不受电噪声影…

atitit.短信 验证码  破解  v3 p34  识别 绕过 系统方案规划----业务相关方案 手机验证码  .doc...

atitit.短信 验证码 破解 v3 p34 识别 绕过 系统方案规划----业务相关方案 手机验证码 .doc 1. 手机短信验证码 vs 图片验证码 安全性(破解成本)确实要高一些1 1.1. 破解基本原则有两种,一种是绕过验证码。一种是拦截1 2. 手机 短信 验证…

SpringMvc整合Quartz实现定时任务项目源码

项目中一直使用Quartz做定时任务,但是一直没有去仔细阅读详细参数配置说明以及它源码,最近花了一点时间做了一个整理。系统的看了一下源码实现并顺手做了一个简单的Demo。 一、说明 spring版本4.0.5、Quartz版本2.2.2 注意定时任务的配置需要spring-cont…

工业相机基本参数以及选型

from: https://blog.csdn.net/dcrmg/article/details/52851913工业相机基础知识(一) CCD与CMOS 工业相机按照图像的传感器元件的不同分为CCD(Charge Coupled Device,电荷耦合元件)和CMOS(金属氧化物半导体元件&#xf…

读《我是一只IT小小鸟》有感

学期刚开始老师就在课堂上给我们这些未来的IT行业工作者推荐了这本《我是一只IT小小鸟》。其实在这之前我对这本书是早有耳闻的,许多人的推荐足以证明它是一本好书,然而那时的我并未能料到自己会成为软件工程专业的学生,也对这个专业一无所知…

socket编程初级

什么是socket定义socket通常也称作套接字,用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过套接字向网络发出请求或者应答网络请求。socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,对于文件…

OpenCV—基本数据结构与示例

OpenCV的基本数据结构及示例OpenCV中强大的Mat类型大家已经比较熟悉了。这里梳理一些在工程中其他经常用到的几种基本数据类型。包括:VecScalarPointSizeRectRotatedRect1. Vec类1.1 基本概念Vec是一个模板类,主要用于存储数值向量。1.2 用法&#xff08…

使用var声明的变量 和 直接赋值并未声明的变量的区别

在看JS高级程序设计时忽然想到这个问题,众所周知,直接赋值一个变量而为声明,会产生一个全局变量(或者说是全局对象的属性),但用var声明的变量 和 直接赋值而并未声明的变量 都有哪些区别呢,这是…

转载-程序员编程技术迅速提高的终极攻略

2019独角兽企业重金招聘Python工程师标准>>> 前言 你是否觉得自己从学校毕业的时候只做过小玩具一样的程序?走入职场后哪怕没有什么经验也可以把以下这些课外练习走一遍(朋友的抱怨:学校课程总是从理论出发,作业项目都…

工作记录二-Docker+Dockerfile

1. 安装虚拟机 Oracle VM VirtualBox, 安装centos 7.2版本2. 需要在命令行中先设置代理: export http_proxyproxy.xxxxx.com:8080 3. 运行 yum install docker安装docker 安装 docker-compose curl -L https://github.com/docker/compose/releases/down…

SVM

from:https://blog.csdn.net/liugan528/article/details/79448379 SVM 1. 基本概念 支持向量机(Support Vector Machine, SVM)的基本模型是在特征空间上找到最佳的分离超平面使得训练集上正负样本间隔最大。SVM是用来解决二分类问题的有监督学…

listView当中有嵌套了有onClickListener的控件时ListView自身的onItemClick无响应的解决方案...

参考:http://www.cnblogs.com/bluestorm/archive/2013/03/24/2979557.html 解决方案 在ListView要显示的Item的外层加上 android:descendantFocusability"blocksDescendants"转载于:https://www.cnblogs.com/jinglecode/p/5683724.html