前段时间有人问我怎么由点的世界坐标计算计算对应的像素坐标,我详细的推导了下,现在把整个过程写篇博客。虽然网上有很多相关的文章,但是我可能会写的更详细些。

一.小孔成像模型

1.基本概念及公式

如图所示(图片来自视觉SLAM十四讲),图中的$O - xyz$坐标系称作相机坐标系,其中$O$是相机透镜的中心(具体应该是是相机透镜的后节点),$z$轴与主光轴重合,其中主光轴是通过透镜两个球面中心的直线(很好理解对吧?)。图中的$O' - x'y'$称为像平面坐标系(我们先以实际距离(米)为单位进行讨论,后面再说像素坐标系),其中$O'$称为像主点,是主光轴与物理成像平面的交点,在理想情况下(主光轴与物理成像平面垂直),也是$O$向物理成像平面做垂线与其的交点。那么不是理想情况下呢(你应该猜到实际中这种理想情况并不存在),这就会产生图像的畸变,关于畸变我们后面说。图中的$f$(focal length)称为焦距,明显可以看到是$O$和$O'$点的连线长度,暂时我们也以米为单位进行讨论。再次强调下,我们上面的所有坐标或者长度均以米为单位。

细心的读者会发现这是在物理成像平面上成的像是反的,为了解决这个问题我们将物理成像平面放到光心的前面来,这样并不改变成像的几何意义但可以直观很多。如下图(图来自https://www.cnblogs.com/gaoxiang12/p/4652478.html)所示:(有人可能会问,“刚才不是$x$($x'$)轴向右$y$($y'$)向下吗,怎么现在反过来了??”,答:你不会没看出来原来相机正放着现在反着放了吧...)

现在我们假设实际中有一点$P$,其在相机坐标系中的坐标为$(X,Y,Z)$,其投影在物理成像平面上的像点在坐标系$O' - x'y'$中的像点为$(X',Y')$,根据三角形相似,可以容易的得出以下的等式:

$$\frac{Z}{f} = \frac{X}{{X'}} = \frac{Y}{{Y'}}$$

整理下得到:

$$X' = f\frac{X}{Z}$$

$$Y' = f\frac{Y}{Z}$$

通过此公式,在理想情况下(无畸变)即可由某点在相机坐标系下的坐标计算出其在像平面坐标系下的坐标,也就是其在相片上的像点。值得一提的是,可以看到公式中出现了$\frac{X}{Z}$和$\frac{Y}{Z}$,因此像极坐标系中的点坐标的单位并不一定非要是米,只要符合一定的比例关系即可,这也就是说,你用相机拍两个只有大小不同的物体时,是可以得到完全相同的两张图像的。

2.像素坐标系

前面讨论的像点坐标都是在像平面坐标系中,即以像主点$O'$为原点,向右为$x'$轴,向下为$y'$轴。但是由于现在一般获取的图像并非胶片而是像素矩阵,因此更好的描述像点的坐标的方式是以像素为单位,因为你可以直接在相片上数出一个点在几行几列而没法知道他实际以米为单位的坐标,事实上这两者是可以转换的,下面就来说下两者怎么转化。

如上图(图片来自https://blog.csdn.net/aoulun/article/details/78768570)所示,其中的${O_i} - xy$为刚才所讲的像平面坐标系,而${O_p} - uv$就是像素坐标系,坐标轴和${O_i} - xy$坐标轴平行,原点在图像的左上角(因为我们一般确定某个像素的位置都是用第几行第几列来描述)。其中${O_i} - xy$的单位为米,${O_p} - uv$单位为像素(1个像素,2个像素,3个像素...(困了))。接下来我们说下像素是什么,在相机中每个感光单元(一个像素对应的CCD或CMOS硬件单元)接受外界光的辐射产生电流,记录一个像素值的大小,接受的光越强,则产生的电流越大,像素值越大,反之越小。感光单元一般很小,比如(5μm×6μm),因此图片中一个像素值就是对应实际位置的感光单元产生的与电流强度有关的一个值。如果你以前没做过图像处理也没结果计算机视觉那你现在应该懂电子图像到底是什么了,没错他就是一个像素值组成的矩阵。现在我们来看看这两个坐标系间到底有什么关系,很明显就是原点不一样,也就是说有一个平移关系,还有就是坐标的单位不一样,一个是米一个是像素,也就是两种坐标差一个系数比例的关系。于是我们可以用下面的公式来描述两者的关系:

$$u = \alpha X' + {c_x}$$

$$v = \beta Y' + {c_y}$$

通过上面的公式就可以将同一个点在像平面坐标系中以米为单位的像点坐标转换成在像素坐标系中以像素为单位的像素坐标。很明显正如我们刚才说的,就是做了一个缩放+平移变换而已。平移变换很好理解,其中的${c_x}$和${c_y}$就是图中的${u_0}$和${v_0}$。我们主要说下缩放变换以及公式中的$\alpha$和$\beta$是什么,$\alpha X'$然后加上{c_x}是像素坐标,那么很显然$\alpha X'$就是像点相对于像平面坐标系原点(图中的${u_0}$和${v_0}$)的以像素为单位的偏差,那么既然$X'$的单位是米,$\alpha$的单位就应该是一米对应的像素个数,即像素/米。说到这显然$\alpha$和$\beta$的意义已经很明显了,加入一个相机感光单元的大小为5μm×6μm,那么$\alpha  = \frac{1}{{5 \times {{10}^{ - 6}}}}$,$\beta  = \frac{1}{{6 \times {{10}^{ - 6}}}}$。

至此我们说完了像素坐标系及与像平面坐标系的转换。

3.相机内参

我们将第1节得到的由相机坐标系下点的坐标计算其像平面坐标系下想点的坐标带入到上节得到的像平面坐标系下的坐标向像素坐标系下转化的公式中,可以得到以下公式:

$$u = \alpha f\frac{X}{Z} + {c_x}$$

$$v = \beta f\frac{Y}{Z} + {c_y}$$

令其中的$\alpha f$为${f_x}$,$\beta f$为${f_y}$(一切变得熟悉起来),得到如下公式:

$$u = {f_x}\frac{X}{Z} + {c_x}$$

$$v = {f_y}\frac{Y}{Z} + {c_y}$$

用矩阵描述一下为:

$$\left[ {\begin{array}{*{20}{c}}

u\\

v\\

1

\end{array}} \right] = \left[ {\begin{array}{*{20}{c}}

{{f_x}}&0&{{c_x}}\\

0&{{f_y}}&{{c_y}}\\

0&0&1

\end{array}} \right]\left[ {\begin{array}{*{20}{c}}

{\frac{X}{Z}}\\

{\frac{Y}{Z}}\\

1

\end{array}} \right]$$

其中的

$\left[ {\begin{array}{*{20}{c}}

{\frac{X}{Z}}\\

{\frac{Y}{Z}}\\

1

\end{array}} \right]$称作归一化坐标,其中的

$\left[ {\begin{array}{*{20}{c}}

{{f_x}}&0&{{c_x}}\\

0&{{f_y}}&{{c_y}}\\

0&0&1

\end{array}} \right]$就是传说中的相机内参,可以看到共有四个物理变量。讲到这已经可以从点的实际坐标计算出其像素坐标了,是不是感觉讲到头了?醒醒,还记得我们设定的点的实际坐标是相机坐标系中的吗?但是实际中我们得到的点的坐标并不是相机坐标系下的坐标,而是一种被称为世界坐标系下的坐标,那如何由世界坐标系下的坐标计算对应的像点坐标呢,下节我们详细说说。

标签:frac,参及,像素,相机,坐标,array,内参,坐标系

来源: https://www.cnblogs.com/lygxx/p/11384915.html

相机的内参会改变吗_相机内参外参及成像过程相关推荐

  1. 相机的内参会改变吗_关于相机内参中的焦距fx和fy

    当我们用OpenCV相机标定函数去标定相机时,我们能得到一个相机的内部参数,简称"内参".内参是一个\(3 \times 3\) 的矩阵, \[A=\begin{bmatrix} ...

  2. 计算机视觉——棋盘格标定法获取相机内参外参

    计算机视觉--棋盘格标定法获取相机内参外参 一.原理 相机标定目的 相机标定的输入 相机标定的输出 相机标定策略 相机拍摄图像变换过程 相机内参 相机外参 二.环境 三.数据集 四.运行结果与分析 角 ...

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

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

  4. Unity判断一个物体是否在相机范围内

    Unity判断一个物体是否在相机范围内 思路 代码 注意点 思路 先说下思路,先把物体从世界坐标转到该相机的视口坐标viewPos, 如果满足这两个条件: 0<viewPos.x < 1 ...

  5. opencv已知相机投影及内参求外参_一步步用c++实现相机标定(张氏标定法)

    enazoe/camera_calibration_cpp​github.com 前言 最近在做相机标定方面的工作,虽然以前多次进行相机标定,但是多数时候是调用opencv的函数,过程相对简单.虽然对 ...

  6. (九)相机内参、外参、反透视变换python opencv

    背景知识 任务需求:将相机上的一个点投影到真实世界平面上去. 原则上单目相机是不可以的,因为只记录了二维信息,真实世界是三维的,双目相机可以通过视差,或者单目+IMU组合,但是由于特征点在地面上的先验 ...

  7. 针对高分辨率雷达和相机的无标定板的像素级外参自标定方法

    介绍:固态激光雷达和相机的外参标定系统 摘要 这是今年的一篇针对高分辨率的固态激光雷达(非重复性扫描型)或者多线的激光雷达和相机在无标定板的环境中自动化外参标定的一篇文章.本文的方法不需要基于巧克力板 ...

  8. 几何角度理解相机成像过程

    本笔记从几何角度来理解相机的成像过程,我们生活在三维世界中,相机所捕捉到的画面是2D的,3D空间中的点是如何投影到2D平面的过程是本笔记关注的. 预设场景 本笔记讨论的东西基于以下场景: 在一个房间内 ...

  9. 基于点云强度的3D激光雷达与相机的外参标定

    本文提出一种新颖的方法,可以对3D lidar和带有标定板的相机进行全自动的外参标定,提出的方法能够从lidar的每一帧点云数据中利用强度信息提取标定板的角点.通过激光的反射强度和棋盘格颜色之间的相关 ...

最新文章

  1. sparkContext之一:sparkContext的初始化分析
  2. Conan and Agasa play a Card Game codeforce
  3. 客户端序列码生成_[基础]-序列化
  4. 关于 MySQL 的 boolean 和 tinyint(1)
  5. 神经网络与深度学习——TensorFlow2.0实战(笔记)(四)(python字典和集合)
  6. 在Android中使用RecyclerView
  7. bzoj 1615: [Usaco2008 Mar]The Loathesome Hay Baler麻烦的干草打包机
  8. 流水线机制、滑动窗口协议、GBN、SR
  9. CSS中的filter与backdrop-filter属性的异同点
  10. PyQt5自定义图片组件:同时显示多张图片
  11. 牛客网练习—《网络基础》DAY3
  12. Python爬虫获取豆瓣电影TOP250
  13. 小问题--电脑开机一连上网就总是会安装各种软件的问题及解决
  14. 物联网开发笔记(30)- 使用Micropython开发ESP32开发板之控制240x240的oled屏幕显示二维码(ST7789芯片)
  15. 分支定界法需要注意的是什么
  16. 大数据之当传统产业遭遇互联网
  17. 微信小程序使用腾讯位置服务地图选点实现地址的选取|微信小程序腾讯位置服务地图选点请求来源未被授权
  18. 重t2加权是什么意思_王者荣耀中说的T0、T1,到底是啥意思?这下总算清楚了
  19. 2022年熔化焊接与热切割培训试题模拟考试平台操作
  20. 代码迁移_三种类型的代码迁移

热门文章

  1. 回流(reflow)
  2. 痛哉 BT china 关闭
  3. 资深架构师谈 DDD 兴起,解决难题与实现步骤
  4. 宁德时代麒麟电池将落地AITO问界系列新车型;雅辰酒店集团5个项目年内登陆上海 | 美通企业日报...
  5. Photoshop使用蓝湖 cutterman插件快速切图
  6. 新浪怎么获取股票接口api接口?
  7. vue 实现点击编辑当前行并保存
  8. CF949B A Leapfrog in the Array 【构造】
  9. 在url中取ip或者键值对、手机号脱敏、电话号脱敏、身份证脱敏、银行卡号脱敏、身份证校验
  10. 与技术无关的一篇文章,记录下内心深处