【AI数学】相机成像之内参数
创始人
2024-05-25 13:25:21
0

计算机视觉偏底层的工作会跟摄像机打交道,最近正好有接触,所以整理总结一下。
相机参数通常分为内参数外参数,偶尔会有畸变参数等滤镜参数。
申明:本文图例均为原创,借用需附此文链接

内参数:相机内部的参数,包括焦距、像素偏移等。
外参数:相机摆放的位置、角度等。

本文主要介绍相机内参数,并且给出简单的数学推理。
必需预备知识:初中数学+初中物理(不满足条件的不用往下看了-_-)


这里用到的物理知识是“光沿直线传播”,用到的数学知识是“相似三角形”。相机成像用到的是“小孔成像原理”,相机内部有一块平面感光元件,物体光线通过光圈(小孔成像的小孔)打到平面感光元件上完成成像。
小孔成像原理

图1 相机小孔成像

相机成像无非就是把真实世界里三维坐标里的一个点投影到胶片平面上。图1里描述了空间中一个点P(xˉ,yˉ,z)P(\bar{x},\bar{y},z)P(xˉ,yˉ​,z)投影到平面(图中黄色部分)点P′(x,y)P^{'}(x,y)P′(x,y),在这里为了方便理解,我构建了一个坐标系,原点位置为二维平面的中心位置,z轴方向为相片法向量向外。
重点:相机成像就是做个(xˉ,yˉ,z)(\bar{x},\bar{y},z)(xˉ,yˉ​,z)到(x,y)(x,y)(x,y)的计算。

小孔成像2

图2 相机小孔成像相似三角形计算

咱们可以构建一个相似三角形,有f/(z−f)=l′/l=x/xˉ=y/yˉ(1)f/(z-f)=l^{'}/l=x/\bar{x}=y/\bar{y} \tag{1}f/(z−f)=l′/l=x/xˉ=y/yˉ​(1)
所以,
{x=xˉf/(z−f)y=yˉf/(z−f)(2)\begin{cases} x=\bar{x}f/(z-f)\\ y=\bar{y}f/(z-f)\\ \end{cases} \tag{2}{x=xˉf/(z−f)y=yˉ​f/(z−f)​(2)
通常图像坐标原点并不是图像中心点,而是左上角,于是需要加一个偏移量OxO_xOx​、OyO_yOy​来对应像素坐标。所以,式子变为
{x=xˉf/(z−f)+Oxy=yˉf/(z−f)+Oy(3)\begin{cases} x=\bar{x}f/(z-f)+O_x\\ y=\bar{y}f/(z-f)+O_y\\ \end{cases} \tag{3}{x=xˉf/(z−f)+Ox​y=yˉ​f/(z−f)+Oy​​(3)

咱们可以将Aperture(即孔径点)定义成我们坐标系的原点,以换取更简单的表示形式,则图2中紫色部分的(z−f)(z-f)(z−f)就变成了zzz,替换式子得到
{x=xˉf/z+Oxy=yˉf/z+Oy(4)\begin{cases} x=\bar{x}f/z+O_x\\ y=\bar{y}f/z+O_y\\ \end{cases} \tag{4}{x=xˉf/z+Ox​y=yˉ​f/z+Oy​​(4)

改写成齐次矩阵乘积描述形式,
[xy1]=1z[f0Ox0fOy001][xˉyˉz](5)\left[ \begin{matrix} x \\ y \\ 1 \end{matrix} \right] ={1\over{z}} \left[ \begin{matrix} f & 0 & O_x\\ 0 & f & O_y\\ 0 & 0 & 1 \end{matrix} \right] \left[ \begin{matrix} \bar{x} \\ \bar{y} \\ z \end{matrix} \right] \tag{5}​xy1​​=z1​​f00​0f0​Ox​Oy​1​​xˉyˉ​z​​(5)
内参数包含焦距fff、两个方向的中心偏移量OxO_xOx​、OyO_yOy​。通常,用矩阵KKK来描述内参数,
K=[f0Ox0fOy001](6)K= \left[ \begin{matrix} f & 0 & O_x\\ 0 & f & O_y\\ 0 & 0 & 1\end{matrix} \right] \tag{6}K=​f00​0f0​Ox​Oy​1​​(6)
所以,式(5)可以写成
[xy1]=1zK[xˉyˉz](7)\left[ \begin{matrix} x \\ y \\ 1 \end{matrix} \right] ={1\over{z}} K \left[ \begin{matrix} \bar{x} \\ \bar{y} \\ z \end{matrix} \right] \tag{7}​xy1​​=z1​K​xˉyˉ​z​​(7)
通过这个内参数公式,我们可以通过像素(二维)坐标,反算出相机(三维)坐标

[xˉyˉz]=zK−1[xy1](8)\left[ \begin{matrix} \bar{x} \\ \bar{y} \\ z \end{matrix} \right]=zK^{-1}\left[ \begin{matrix} x \\ y \\ 1 \end{matrix} \right] \tag{8}​xˉyˉ​z​​=zK−1​xy1​​(8)
根据式(8),若想从像素(二维)坐标拿到相机坐标(三维)坐标,还需要知道深度信息,即目标点离相机的距离。

文毕,有疑问或指导请留言交流!

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
修复 爱普生 EPSON L4... L4151 L4153 L4156 L4158 L4163 L4165 L4166 L4168 L4...
【PdgCntEditor】解... 一、问题背景 大部分的图书对应的PDF,目录中的页码并非PDF中直接索引的页码...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...