一、前言

视觉系统一共有四个坐标系:像素平面坐标系(u,v)、图像坐标系(x,y)、相机坐标系(Xc,Yc,Zc)和世界坐标系(Xw,Yw,Zw),如下图所示。每种坐标系之间均存在联系,那么如何通过图像像素坐标定位到世界坐标系的坐标,需要通过相机标定来解决,其中关键的算法部分在于坐标系转换,而变换则需要通过齐次坐标的表示方式来完成。

二、坐标系变换

2.1像素坐标系和图像坐标系的变换

像素坐标就是像素在图像中的位置。像素坐标系是建立在图像中的,需要和相机坐标系进行变换,其单位为像素。其的左上角的顶点就是原点(Op),水平向右是u,垂直向下是v轴。
图像坐标系的单位为毫米,这是因为像素坐标没办法反应图片中点的具体尺寸大小,所以需要图像坐标系来表示,原点为Oi,为光轴与成像平面的交点。
两个坐标系都在成像平面上,只是各自的原点和度量单位不一样。转换时需要知道两个参数(dx,dy),分别表示感光芯片上像素的实际大小。

两者之间变换需要进行单位上的转换。在图中,假设图像中心的像素坐标是(u0,v0),那么,图像坐标系的坐标(x,y)与像素坐标系的坐标(u,v)之间的关系可以表示为:
u=x/dx+u0u=x/dx+u0u=x/dx+u0
v=y/dy+v0v=y/dy+v0v=y/dy+v0
转换为齐次坐标:
[uv1]\begin{bmatrix} u\\ v\\1\end{bmatrix}⎣⎡​uv1​⎦⎤​=[1/dx0u001/dyv0001]\begin{bmatrix} 1/dx&0&u0\\ 0&1/dy&v0\\0&0&1\end{bmatrix}⎣⎡​1/dx00​01/dy0​u0v01​⎦⎤​*[xy1]\begin{bmatrix} x\\ y\\1\end{bmatrix}⎣⎡​xy1​⎦⎤​

2.2 相机坐标系与图像坐标系转换

相机坐标系是以相机的光轴作为Z轴,光线在相机光学系统的中心位置就是原点Oc(实际上就是透镜的中心),相机坐标系的水平轴Xc与垂直轴Yc分别于图像坐标系的X轴和Y轴平行,OcOi之间的距离为f。
上图P点为图像点坐标,B为相机坐标系下物体坐标,可以通过相似三角形求解,如上图所示,最终也用齐次坐标进行表示。最后的表达式可以看出相机坐标系为三维,图像坐标系为2维,只能通过齐次坐标变换的形式升维。
那为什么像素坐标系会在相机坐标系的前面呢?
从原理图上我们可以看到像平面在镜面的右面,而在推导相机标定的坐标系关系时,却认为光线先通过成像平面,再在相机坐标系上汇聚到一个点。其原因是推导的时候,把像平面用虚拟像平面代替了。

2.3世界坐标系与相机坐标系转换

世界坐标系是目标物体位置的参考系,可以根据运算方便与否自由放置,单位为长度单位如mm。从世界坐标系转换到相机坐标系,涉及到旋转和平移(其实所有的运动也可以用旋转矩阵和平移向量来描述)。因为世界坐标系和摄像机坐标都是右手坐标系,所以其不会发生形变(刚性变换)。

计算过程:
平移,相机坐标点(Xc,Yc,Zc)平移距离为(tx,ty,tz)到世界坐标点(Xw,Yw,Zw):
[XwYwZw1]\begin{bmatrix} Xw\\ Yw\\Zw\\1\end{bmatrix}⎣⎢⎢⎡​XwYwZw1​⎦⎥⎥⎤​=[100tx010ty001tz0001]\begin{bmatrix} 1&0&0&tx\\0&1&0&ty\\0&0&1&tz\\0&0&0&1\end{bmatrix}⎣⎢⎢⎡​1000​0100​0010​txtytz1​⎦⎥⎥⎤​*[XcYcZc1]\begin{bmatrix} Xc\\Yc\\Zc\\1\end{bmatrix}⎣⎢⎢⎡​XcYcZc1​⎦⎥⎥⎤​
坐标点(Xc,Yc,Zc)在平移的过程中旋转一定角度到世界坐标点(Xw,Yw,Zw):
首先给定一个基本旋转矩阵和基本矩阵:
R=[cosθsinθ−sinθ−cosθ]\begin{bmatrix} cosθ&sinθ\\ -sinθ&-cosθ\end{bmatrix}[cosθ−sinθ​sinθ−cosθ​]
基本矩阵:
[1000010000100001]\begin{bmatrix} 1&0&0&0\\0&1&0&0\\0&0&1&0\\0&0&0&1\end{bmatrix}⎣⎢⎢⎡​1000​0100​0010​0001​⎦⎥⎥⎤​
如果坐标点(Xc,Yc,Zc)绕X,Y,Z轴分别旋转α,β,γ度,则最终的表达式为(哈哈,实在不想自己推导仿射变换的公式了,直接给最终结果,链接可以看下方):

那么和平移变换联合起来可以写为:

2.4像素坐标系到世界坐标系变换(终极变换)


红框内即为外参,R和T分别为旋转和平移量。
内参为是相机固有的属性,实际上就是焦距f,像元尺寸dx,dy。
Zc很明显,表示的是点离光轴的距离。

参考文章:
相机参数标定(camera calibration)及标定结果如何使用
3d变换基础:平移、旋转、缩放(仿射变换)详解——公式推导
计算机视觉:相机成像原理:世界坐标系、相机坐标系、图像坐标系、像素坐标系之间的转换

相机标定(二)深入理解四大坐标系与其变换关系相关推荐

  1. 相机标定(二)——图像坐标与世界坐标转换

    相机标定(一)--内参标定与程序实现 相机标定(二)--图像坐标与世界坐标转换 相机标定(三)--手眼标定 一.坐标关系 相机中有四个坐标系,分别为world,camera,image,pixel w ...

  2. 摄像机标定中四大坐标系之间的关系

    一.四个坐标系简介和转换 相机模型为以后一切标定算法的关键,只有这边有相当透彻的理解,对以后的标定算法才能有更好的理解.本人研究了好长时间,几乎每天都重复看几遍,最终才会明白其推导过程.      我 ...

  3. 原创 | 《相机标定》深入理解原理与实战(一)

    第 一 章 引言 1.1 为什么要相机标定 首先来看相机标定的意义,我们都知道,我们拍摄的图片是二维的,但是真实世界是三维的.一个场景是如何从三维变成二维的呢?相机起到的就是这个作用.我们可以把相机看 ...

  4. matlab相机标定_综述 | 相机标定方法

    点击上方"计算机视觉life",选择"星标" 快速获得最新干货 在图像测量过程以及机器视觉应用中,为确定空间物体表面某点的三维几何位置与其在图像中对应点之间的相 ...

  5. 综述 | 相机标定方法

    本文作者蔡量力,公众号:计算机视觉life成员,由于格式原因,公式显示可能出问题,建议阅读原文链接:综述 | 相机标定方法另外推荐几个原创的号 计算机视觉,Python,自然语言处理.数据挖掘相关,汇 ...

  6. matlab 工业相机 曝光时间_实战 | 相机标定

    知乎的公式格式有点问题,请看原文链接: 实战 | 相机标定​mp.weixin.qq.com 什么是相机标定?我们为什么需要相机标定? 相机标定就是确定相机内参和外参的过程,其结果精度会直接影响视觉系 ...

  7. 从像素坐标到相机坐标_相机标定方法

    在图像测量过程以及机器视觉应用中,为确定空间物体表面某点的三维几何位置与其在图像中对应点之间的相互关系,必须建立相机成像的几何模型,这些几何模型参数就是相机参数.在大多数条件下这些参数(内参.外参.畸 ...

  8. 相机标定的来龙去脉(详解标定原理、畸变矫正原理、使用经验)

    目录 1.相机标定的意义 2.坐标系的变换 2.1.小孔成像的原理 2.2.各个坐标系的定义 2.2.1.像素坐标系 2.2.2.图像坐标系 2.2.3.相机坐标系 2.3.相机的内参和外参 3.图像 ...

  9. 【入门】(二)相机标定、矩阵求解、相机位姿势估计

    目录 目录 一.相机模型.内参.外参,畸变以及相机标定 二.基本矩阵与对极约束 三.单应矩阵 四.相机姿势估计 一.相机模型.内参.外参,畸变以及相机标定 1.坐标系转换 (1)坐标系概念 世界坐标系 ...

最新文章

  1. abb机器人指令手册_ABB机器人可以告别示教器啦
  2. 程序员都讨厌写文档?这4个工具让你事半功倍
  3. 【科技】浅谈圆的反演
  4. k8s灰度更新_k8s slb如何实现灰度发布-问答-阿里云开发者社区-阿里云
  5. PYTHON自动化Day4-交换变量,字符串方法,拷贝,集合,文件,文件指针
  6. selenium java 参数化_Java+selenium 自动化测试【03】-- 数据驱动之参数化
  7. mybatis学习(38):动态sql-foreach
  8. python os 常用方法
  9. java中identifiers什么意思_javassist.是什么意思
  10. 谢惠民,恽自求,易法槐,钱定边编数学分析习题课讲义习题参考解答
  11. 以太坊智能合约开发,Web3.js API 中文文档 ethereum web3.js入门说明
  12. easyUI替换非16x16的图标
  13. 短视频适合做什么赚钱?短视频暴利赚钱商机,疫情期间实体商家必备拓客软件
  14. 广达服务器进系统重启,广达 服务器 远程开机
  15. FPGA实现 贪吃蛇
  16. Android SDK各个版本API的特性及兼容性(Dalvik/ART)
  17. 诗歌(2)—定风波(莫听)
  18. 烤仔观察 | NFT+社交,2021年欧洲杯观赛新“姿势”来啦~速戳!
  19. Debezium系列之:安装部署debezium2.0以上版本的详细步骤
  20. 记录Windows 的一些基础知识(包括基础命令,文件系统,注册表项)

热门文章

  1. DataGirdView 编辑项时的验证
  2. 结合file和iconv命令转换文件的字符编码类型
  3. JavaScript调用Web Services实现无刷新三联动
  4. js高级 — ES6
  5. 数据库系统原理(第5章:数据库编程)
  6. 测试多个输入条件的方法
  7. 第二课 运算符(day10)
  8. Linux初学时的一些常用命令(4)
  9. solr7.4 安装与使用
  10. Tiff – 值得你体验一下的可视化的字体对比工具