张正友相机标定全解析
标定为了做什么——我们肯定都或多或少地想过,我们能不能用一张图片就能知道图片中物体的尺寸。下一步我们会想如何得到尺寸呢?我们用勾股定理,只要我们知道距离就行。那么知道了相机到图像的距离和相机自身的焦距后就可以了么?显然这么做是没有精度可言的,因此相机标定就应运而生了。
1.首先明确一个概念,相机标定不是一劳永逸的,每次参数的改变都需要对相机重新标定。改变包括(焦距,定焦环,光圈和世界坐标的位置关系。)
2.摄像机虽然结构复杂,但有时候可以等效于针孔模型(小孔成像),在精度要求较高时,便不能直接进行等效替换。
3.当相机参数在使用过程会发生变化时,需要进行实时标定,方法有两种:①场景内存在标定块;②设备可以自定标(无需标定块)。
4.坐标系统:图像坐标系、摄像机坐标系、世界坐标系。
单位:图像坐标系是像素点,摄像机和世界的都是毫米。
图中可以清晰地看出我们的图像坐标系是由两个坐标系统组成的:像素坐标和物理坐标,像素坐标的单位是像素个数,物理坐标的单位是毫米。像素坐标原点是图像的左上角,这点和matlab定义是一样的,但是有一个需要注意,matlab是先行后列,就是(行数,列数),而此处定义的坐标是(列数,行数),这样定义是为了和x,y统一(u,v)和(x,y)。包括在matlab中,我都比较喜欢使用(y,x)这样定义索引。
这里引入矩阵是为了后面更好操作,如果不觉得麻烦,使用方程组也是可以的。
那个第二个矩阵用的比较多,因为我们很多情况下是知道一张图的像素坐标的,因为我们可以通过变换得到我们使用的物理坐标(01,x,y)。而这个也只是中间过程,最终我们达到的效果就是从图中像素点对应到实际物体中。
这里我们引入摄像机坐标系后,其实我们已经可以确定物体与图像之间的关系了。其中Zc为摄像机光心,垂直于成像面;O~O1之间的线段为f,相机的焦距(这个焦距和我们调镜头的焦距以及图片信息里面的焦距是不同的)。
到这里,我们可以设想一下,我们想要描述一个物体和相机的相对位置关系,那么我们怎么知道包括相机在内的所有物体的坐标呢?这个坐标是需要统一的。因此引入世界坐标系,上升到两个坐标系的变化,求一个坐标系下的一个物体在另一个坐标系下的坐标,只需要进行坐标系的变换,既旋转和平移。
这里的变换是利用中心投影(其实就是最简单的三角形关系),实现摄像机坐标与图像坐标的对应。Zc放到了方程以外,可知Zc在变换过程中不起作用,因此在这一步还没有解决点具体对应到多远的物体。
其实我们比较简单地能够看出,我们摄像机坐标系的每一个轴都是由世界坐标的三个轴上经过旋转和平移来得到的。这里不用纠结具体为什么的原因,因为那又是另一门学问了。
内参和外参作为我们标定的最终数值,十分有用。内参是摄像机内部的参数,和外界无关;外参是摄像机坐标系和世界坐标系的关系。我们先细想一下,我们已知了世界坐标系,我们就可以通过上面的变化,得到图像坐标u,v,然而我们从u,v反推时,在不知道Zc的情况下,我们是得不到世界坐标系的。这也就说明了图像坐标可以按照变换反应为一条线,而点具体在线的什么部分是未知的。这一点可以看出两边在运算时可以将Zc消去,当然也可以乘以一个Zc。
求参数——
上面我们已经建立了三个坐标系之间的关系,之后我们需要求出我们在这中间的一些未知参数。
首先我们按我之前提到的“输入输出”分析法进行分析一下。
输入:多组(世界坐标+像素坐标)
输出:方程中多个未知参数
此类问题为:多组数据求多个参数,数据远超方程个数,因此采用拟合的方法——最小二乘法。
①化简
我们直接用上面的矩阵进行求解肯定是非常费事的,因此这里有简化过程,直接把整个过程看成一个整体,也就是一个3X4的矩阵。
上面就是我们化简的结果,可以看出最终剩下了两个式子,12个未知数。
我们有11个未知量,需要11个方程组就能求解,也就是6个点(每个点对应两个方程组,每个点有图像像素值和世界坐标值)就可以求解了。
求解完成之后,我们就可以根据之前的公式进行反求解了,求解出内参和外参。
注意:
①上面的M求解完成后我们拥有了十一个未知数的解;我们的原内参独立变量有4个,外参R和t独立变量有6个,总共为十个变量。可以看出我们求的M内部的十一个变量,有一些是有一些内在联系的,因此此处需要格外注意。
先写到这,等下次更新。
张正友相机标定全解析相关推荐
- 张正友相机标定Opencv实现以及标定流程标定结果评价图像矫正流程解析(附标定程序和棋盘图)
from:https://blog.csdn.net/dcrmg/article/details/52939318 使用Opencv实现张正友法相机标定之前,有几个问题事先要确认一下,那就是相机为什么 ...
- 张正友相机标定程序实现
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/hongbin_xu/article/details/78988450 前言 在前面的博客中( 三维重 ...
- OpenCV实现张正友相机标定源代码
本源代码基于VC++和opencv Opencv2.4.13.6版本开发,实现张正友相机标定源代码,资源包括完整源代码和12张棋盘图片,完美运行. Opencv2.4.13.6安装包下载地址:http ...
- 张正友相机标定算法详解
张正友相机标定算法详解 1.齐次表示法与一些基本结论 1.1 点与直线的齐次表示 在射影几何中,通常用齐次方式来表达点与直线.比如p=(u,v)p=(u,v)p=(u,v)被表示成p^=(x1,x ...
- [毕设系列] 一、张正友相机标定
张正友相机标定 预备知识 0.1 刚体.仿射.线性.旋转变换 0.2 什么是标定? 0.3 为什么要进行标定? 0.4 什么是畸变? 一.张正友标定法 1.1 简介 1.2 流程 1.3 畸变公式 二 ...
- opencv C++ 张正友相机标定
//张正友相机标定 //https://blog.csdn.net/u010925447/article/details/77997735 #include <opencv2/core/core ...
- 张正友相机标定(全流程,含畸变,matlab源代码解析)
张正友标定的具体原理很多文章已经介绍,这里主要结合源代码对其中的基本原理及本人遇到的问题进行介绍.(仅介绍基本原理供本人复习,同时方便他人,如有问题,请及时指正勿喷) 1. 标定基本思路介绍 相机标定 ...
- 三维重建学习(3):张正友相机标定推导
前言 前面的几篇博客中介绍了有关相机标定的基础知识(三维重建学习(1):基础知识:旋转矩阵与旋转向量.三维重建学习(2):相机标定基础).这次介绍一个十分经典的单目相机标定方法--张正友标定,并给出数 ...
- 张正友相机标定算法原理与源代码(OpenCV+C++)
摄像机的标定问题是机器视觉领域的入门问题,可以分为传统的摄像机定标方法和摄像机自定标方法.定标的方法有很多中常见的有:Tsai(传统)和张正友(介于传统和自定标)等, 摄像机成像模型和四个坐标系(通用 ...
- 【计算机视觉】张正友相机标定Calibration原理过程结果
一.数学原理 1.将世界坐标转换为图像坐标: 2.图像坐标转换为像素坐标系: 3.针孔成像下的透视投影矩阵: 4.世界坐标系转换为像素坐标系 5.张氏标定法的畸变模型: 以上参考:https://bl ...
最新文章
- Using rqt_console and roslaunch
- delphi if多个条件_屡试不爽!使用策略模式代替多个if条件语句
- 广告banner:手动滑动切换,自动切换,点击跳转,异步加载网络图片
- 商城项目:装nginx时碰到的各种问题
- 转document.documentElement和document.body的区别
- 控制元素的div属性
- linux网络编程之-----基础理论篇
- Kafka 学习笔记之 架构
- PaddlePaddle:CNN对Cifar10图像分类(1)
- zr-djypvp计算机电缆,ZR-DJYPVP计算机电缆ZR-DJYPVP-2X2X1.0
- 作用域和作用域链的理解
- python 为女神编朵玫瑰花的代码,python绘制玫瑰的代码
- PS绘制飘逸彩色丝带教程
- 苹果公司的“多样化”定义:包括加拿大人
- Oracle DBA日常工作手册
- C博客作业00--我的第一篇博客
- 【目标设定】1. 目标设定模板
- 平面设计入门新手怎么做数字线条海报设计
- SQL SERVER2000免安装版 下载
- div id与div class详解
热门文章
- 聚合支付、第四方支付有哪些平台?
- 2019年国内开源镜像站点汇总(已更新,之前的好多不能使用的)
- java px pt转化_pt和px的转换
- SAP PI PO XSLT Mapping of Adapter-Specific Message Attributes
- 一文告诉你怎样“火起来”
- 昆山java自行车,剁手清单:剁手的路上总会有几个“毒友”加持
- 计算机会计表格应用所有知识,2016会计电算化考点总结:电子表格软件在会计中的应用...
- DPlayer.js视频播放插件
- 【Python实战】 ---- 批量图片压缩
- 2d unity 多物体 射线_Unity3D 之射线检测