机器视觉的相机标定到底是什么?
刚开始看标定,先从单个相机开始看。标定板为何需要在不同角度拍20张照片?每次拍照时标定板位置放置有什么讲究?
大概科普下吧,细节我再琢磨,计算工作基本没看懂。修改
• 邀请回答
15 个回答
在去除畸变的情况下,相机标定就是求intrinsic matrix——K,因为3D点可以用(X,Y,Z,1)表示,2D点可以用(X,Y,1)来表示,因此3*3的矩阵K就包含了全部相机模型的内部参数(intrinsic matrix),K[R|t]就是三维点到二维点的线性变化关系(R是3-by-3 Rotation,t是translation,如果以其中一个相机C0为Reference Camera,那么R=eyes(3),t=[0,0,0]',其他的R和t都是关于C0的R和t)。
在去除畸变的理想情况下,K的参数可以一一对应到针孔相机的焦距f,offset (x0,y0)以及skew s四个参数上,具体关系为K=[fx,s,x0;0,fy,y0;0,0,1]。理想情况的针孔相机,fx=fy,但是在大部分实测情况下,fx和fy之间仍然会有误差。
理想状态下,Zhang's method的二维标定板的摆放不影响标定结果。但考虑到三维点实际投射到相机sensor上的误差符合Gaussian distribution,因此尽量把所有网格包含在图像内,不要角度过于偏,过于远乃至偏到了toolbox无法精确提取calibration board的边界即可。
畸变模型可以是高阶线性甚至非线性的,通常相机厂商已经内置了去畸变的方法,输出的图像很精准了,当然如果有再次去畸变的要求可以阅读相关论文,反正我最高也只实现过三次线性畸变移除。
20张当然不是定数,但理论上张数越多,normalize之后解中间那个矩阵误差越小,上课时老师讲过误差分析,具体的我一时想不起来,Berkeley的课件上应该有。
当然也有三维的标定方法(拿一组三维的,互成90度的黑白格放在一起,并提取其中若干点),一维的标定(也是张正友提出的方法,在一根木棒上标定若干点,然后把一端放在桌子上,另一端做圆锥形运动,拍下若干张。这也是我上这门课的final project)等等等等。总之都是用几何关系尽可能地找到K。
(我只回答关于相机模型问题。关于单反相机的使用,保养,技巧以及相机选购问题一律不懂,大家就不要邀请我了,靴靴
收藏 • 没有帮助 • 举报 • 申请转载 收起
相机标定的目的是确定相机的一些参数的值。通常,这些参数可以建立定标板确定的三维坐标系和相机图像坐标系的映射关系,换句话说,你可以用这些参数把一个三维空间中的点映射到图像空间,或者反过来。
相机需要标定的参数通常分为内参和外参两部分。外参确定了相机在某个三维空间中的位置和朝向,至于内参,可以说是相机内部的参数(这好像是废话...笑),我觉得需要引入一点光学的东西来更好地解释一下。现有的相机都至少包含一个光学镜头和一个光电传感器(CCD或CMOS)。
通过镜头,一个三维空间中的物体经常会被映射成一个倒立缩小的像(当然显微镜是放大的,不过常用的相机都是缩小的),被传感器感知到。
- 理想情况下,镜头的光轴(就是通过镜头中心垂直于传感器平面的直线)应该是穿过图像的正中间的,但是,实际由于安装精度的问题,总是存在误差,这种误差需要用内参来描述;
- 理想情况下,相机对x方向和y方向的尺寸的缩小比例是一样的,但实际上,镜头如果不是完美的圆,传感器上的像素如果不是完美的紧密排列的正方形,都可能会导致这两个方向的缩小比例不一致。内参中包含两个参数可以描述这两个方向的缩放比例,不仅可以将用像素数量来衡量的长度转换成三维空间中的用其它单位(比如米)来衡量的长度,也可以表示在x和y方向的尺度变换的不一致性;
- 理想情况下,镜头会将一个三维空间中的直线也映射成直线(即射影变换),但实际上,镜头无法这么完美,通过镜头映射之后,直线会变弯,所以需要相机的畸变参数来描述这种变形效果。
然后,说到为什么需要20张图片,这只是一个经验值,实际上太多也不好,太少也不好。单纯从统计上来看,可能越多会越好,但是,实际上图片太多可能会让参数优化的结果变差,因为棋盘格角点坐标的确定是存在误差的,而且这种误差很难说是符合高斯分布的,同时,标定过程所用的非线性迭代优化算法不能保证总是得到最优解,而更多的图片,可能会增加算法陷入局部最优的可能性。
拍照时的标定板位置和朝向的多样性,会让内参的估计更为准确。准确的内参可以较好地把整个图像的畸变都进行矫正,但如果给定的标定板的位置过于单一,比如都是在图像的左上角,那么优化得到的内参也可能只会比较好地纠正图像左上角的畸变。推荐找个畸变较大的镜头做做实验,会更形象。
收藏 • 没有帮助 • 举报 • 作者保留权利
标定的方法有好多,想必你是看的张氏标定法,那就找论文看看啊
Zhengyou Zhang, A Flexible New Technique for Camera Calibration
http://research.microsoft.com/en-us/um/people/zhang/Papers/TR98-71.pdf
标定板为何需要在不同角度拍20张照片?
张氏标定法理论上最少需要2张,要提高精度当然得多一点,太多又不好,浪费时间,20张不知是谁的经验值,具体看你需求,
张数的讨论可以看论文 “Performance w.r.t. the number of planes.”部分
每次拍照时标定板位置放置有什么讲究?
看论文“Performance w.r.t. the orientation of the model plane.”部分
写的很明白为什么不自己先看看呢
收藏 • 没有帮助 • 举报 • 作者保留权利
收藏 • 没有帮助 • 举报 • 作者保留权利
收藏 • 没有帮助 • 举报 • 作者保留权利
相机参数一般包括内参数和外参数,内参数又包括相机焦距、驻点坐标、X轴和Y轴垂直扭曲skew、畸变参数;外参数包括旋转矩阵和平移矩阵。像lz提到的单相机标定通常主要为了获取相机内参数;双目时内参数和外参数都需要进行标定。
对于相同标定版,标定时为了提高标定精度以及稳定性,需要从不同角度拍摄标定版获取标定图像,同时标定板尽量占有整个相机视野,拍摄次数不能太少,我们当时大概6次左右吧,20次觉得必要性不大。
顺便回答1.@张丝苇问题的:matlab标定工具箱有棋盘格自动提取算法,opencv也有;2.@周德福的问题:全景拼接时需要利用图像之间匹配的特征点和转换模型对相机之间内外参数进行标定,标定结果的好坏直接影响拼接效果,参数不准确会造成拼接错误等。
收藏 • 没有帮助 • 举报 • 禁止转载
1.为什么要用多张标定板图片做标定?
具体数学实现题主可以自行找文献,这里只说原理。单目标定说白了其实就是解一个矩阵方程,其未知量是内、外参数矩阵。
根据线性代数,把解矩阵方程转化成解方程组的问题,由于一张棋盘格只能提供8条相互独立的方程(具体原因请查阅透视变换原理),所以不足以求出10个未知数。理论上,只需2个棋盘格便足够解出全部参数了,但是matlab、opencv等为了增强鲁棒性,还内设了优化方法,使用更多的棋盘格也就是用更多的信息来求得最优解。感谢这些大神吧。
2.如何摆放标定板?
刚才说了,要这么多棋盘格图片其实是为了获得更多的图像坐标-世界坐标信息,进而做优化,得到标定参数的最优解。所以摆放的选择只有一个:彼此位姿越不同越好。
位姿越不同的两张棋盘格图片,其利用角点坐标建立的方程就越独立,越有代表性。可以用极限法去理解上面的话:假如每张棋盘摆放都完全一样,那就算拍了一万张标定板图片,也只能提供8条相互独立的方程,依然解不了方程组。
-------------------------------------下面是原回答:
上面的回答都很专业,不过我觉得题主主要是要理清标定、识别、测量之间逻辑。请跟着我的思路,可能在某一步就能豁然开朗了。我尽可能避免理论和公式,希望能用尽可能通俗的话解释。
我们从单目视觉说起。平时我们都说要做视觉识别、测量云云,然后我们就会去拍照,再对数字图像做各种处理,颜色处理、灰度化、滤波、边缘检测、霍夫变换,最后得到了希望得到的特征,是这样的对吧?
不过请注意!到了这一步,其实我们仅仅是得到了一坨坨感兴趣的像素而已!究竟要怎样才能把这些像素转化到现实世界的对象中呢?也就是说,究竟要怎样对这些仅存在于图像中的东西进行测量,才能得到具有实际意义和尺度的数据呢?这个时候我们就懵逼了……
没错, 摄像机标定的存在意义就是解决这个蛋疼的问题!!!
我们继续看看,通过摄像机标定我们可以知道些什么:
1.外参数矩阵。告诉你现实世界点(世界坐标)是怎样经过旋转和平移,然后落到另一个现实世界点(摄像机坐标)上。
2.内参数矩阵。告诉你上述那个点在1的基础上,是如何继续经过摄像机的镜头、并通过针孔成像和电子转化而成为像素点的。
3.畸变矩阵。告诉你为什么上面那个像素点并没有落在理论计算该落在的位置上,还tm产生了一定的偏移和变形!!!
好了,到这里是不是明白了一点?上述3点的每一个转换,都有已经有成熟的数学描述,通过计算,我们完全可以精确地重现现实世界的任意一个点到其数字图像上对应像素点的投影过程。
对于双目视觉系统,通过立体标定还能进一步得到下面的参数:
4.结构参数。告诉你右摄像机是怎样相对于左摄像机经过旋转和平移达到现在的位置。
通过结构参数,便能把左右摄像机获取的图像的每一个像素点之间的关系用数学语言定量描述,保证两个相机都处于我们“可求”的状态。
总的来说,摄像机标定是通过寻找对象在图像与现实世界的转换数学关系,找出其定量的联系,从而实现从图像中测量出实际数据的目的。
当然,其实上述的各个转换过程大部分都不需要用户自己一个个写程序实现,比如opencv就集成了单目标定函数calibracamera()、畸变校正函数undistortinitialmap()、双目标定函数stereocalibrate()……
其实自己亲自走一遍流程就很容易领会到整个视觉测量的逻辑。比如说,在畸变校正中需要用到单目标定的畸变参数输出和内参数输出,在双目标定中需要用到单目标定的外参数输出,在外极线校准中需要用到双目标定的结构参数输出,在立体匹配中中需要用到外极线校准的输出参数,在三维反求中需要用到立体匹配的输出参数。用户自己走完一遍这个流程,基本上就发现没有做标定的话,几乎什么都干不了。
收藏 • 没有帮助 • 举报 • 作者保留权利
收藏 • 没有帮助 • 举报 • 作者保留权利
每个镜头的畸变程度各不相同,通过摄像机标定可以校正这种镜头畸变。
另外在摄像机标定后就可以得到在世界坐标系中目标物体米制单位的坐标,例如多少米或多少毫米。
不深究得话这些对理解来说足够了。学到再补充。
收藏 • 没有帮助 • 举报 • 作者保留权利
收藏 • 没有帮助 • 举报 • 作者保留权利
收藏 • 没有帮助 • 举报 • 作者保留权利
收藏 • 没有帮助 • 举报 • 作者保留权利
收藏 • 没有帮助 • 举报 • 禁止转载
机器视觉的相机标定到底是什么?相关推荐
- 相机标定:PNP基于单应面解决多点透视问题
利用二维视野内的图像,求出三维图像在场景中的位姿,这是一个三维透视投影的反向求解问题.常用方法是PNP方法,需要已知三维点集的原始模型. 本文做了大量修改,如有不适,请移步原文: ...
- 相机标定得到什么以及如何使用
相机标定得到什么以及如何使用 相机都有不同的内部参数.外部参数: 内部参数:有一个参数矩阵(fx,fy,cx,cy)和一个畸变系数(三个径向k1,k2,k3;两个切向p1,p2):内部参数是唯一的,就 ...
- Halcon学习笔记——机器视觉应用工程开发思路及相机标定
机器视觉应用工程开发思路 机器视觉应用工程主要可划分为两大部分,硬件部分和软件部分. 1.硬件部分,硬件的选型至关重要,决定了后续工作是否可以正常开展,其中关键硬件部分包括:光源,相机以及镜头. 2. ...
- 机器视觉-相机标定及畸变矫正
摘要:本文首先介绍了针孔相机模型(线性模型),然后推导四个坐标轴变换的关系,引出R.T.K.D中包含相机的5个内参,6个外参.然后介绍相机畸变的原因以及畸变模型(非线性模型),引出相机的5个畸变参数. ...
- 机器视觉基础回顾:相机标定中的坐标系
前一段尝试了相机标定,虽然做到一半放弃了,但感觉机器视觉很多东西仍然有相当大的必要去深入了解下.就像程序员多少也要懂点计算机硬件的东西,才能从底层思维的角度去优化代码. 所以留一些痕迹. 前置基础知识 ...
- 机器视觉篇之相机标定
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自|新机器视觉 在图像测量过程以及机器视觉应用中,为确定空间 ...
- 《机器视觉算法与应用》第3章 机器视觉算法之相机标定——学习笔记
文章目录 3.9 相机标定 3.9.1 面阵相机的摄像机模型 针孔摄像机模型的透视投影关系 3.9.2 线阵相机的相机模型 3.9.3 标定过程 第一个需求 第二个需求 3.9.4 从单幅图像中提取世 ...
- 机器视觉——相机标定
1 机器视觉为什么要做相机标定 机器视觉是采用相机成像来实现对三维场景的测量.定位.重建等过程.是一个利用二维图像进行三维反推的过程,我们所处的世界是三维的,而图像或者照片是二维的,可以把相机认为是一 ...
- c++ opencv 通过网络连接工业相机_摄像头和机器人视觉开发中的「相机标定」,你了解多少?...
目前我们团队在做一个项目,通过采集到的人脸图像测量人脸上两个瞳孔间的实际距离.注意是实际距离,不是两个瞳孔之间隔多少个像素点.找了很久资料,好像"相机标定"可以解决我的问题,看了不 ...
最新文章
- python day1
- 说说“开源杀死商业开发工具”
- 验证occ和vtk整合工作的demo
- 光动能表怎么维护_男士手表什么牌子好,男士手表品牌推荐, 天梭、阿玛尼、西铁城、天王表、罗西尼、卡西欧男手表推荐...
- java web认证考试_用Java实现Web服务器HTTP协议
- linux sed写文件内容,Linux学习——文本处理:sed
- 成功与不成功并非智商差别:男人,如何唤醒心灵的巨人
- Oracle中drop_column的几种方式和风险
- hanlp提取文本关键词的使用方法记录
- node.js 处理 http 请求
- matlb:kmeans命令进行聚类和pdist2进行预测(含代码)
- mysql姓氏笔画排序_mysql中怎么按姓氏笔画排序
- 音频功率放大器,250种功放电路图集锦,文件是JPG文件
- 华为员工离职心声:菊厂15年退休,感恩公司,让我实现了财务自由!
- UE4文件读写(.txt文本文档)
- inflate()方法详解和源码分析
- 为什么说龙妈能活到最后?
- 如何使用一台电脑远程控制多台电脑
- Apollo学习(二)appollo安装与部署
- 【毕业设计_课程设计】基于网络爬虫的新闻采集和订阅系统的设计与实现(源码+论文)