惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

V
Visual Studio Blog
Microsoft Azure Blog
Microsoft Azure Blog
WordPress大学
WordPress大学
小众软件
小众软件
Last Week in AI
Last Week in AI
月光博客
月光博客
博客园 - 聂微东
Recent Announcements
Recent Announcements
A
About on SuperTechFans
博客园 - 三生石上(FineUI控件)
V
V2EX
阮一峰的网络日志
阮一峰的网络日志
博客园 - Franky
云风的 BLOG
云风的 BLOG
量子位
N
Netflix TechBlog - Medium
Hugging Face - Blog
Hugging Face - Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
J
Java Code Geeks
博客园 - 司徒正美
S
SegmentFault 最新的问题
有赞技术团队
有赞技术团队
Google DeepMind News
Google DeepMind News
宝玉的分享
宝玉的分享

又见苍岚

COLMAP PatchMatch Stereo 算法详解 事件驱动的状态机框架:从理论到工程实践 Git 在国内网络环境下无法 Push 的排查与修复 —— 配置 Clash 代理 分段五次多项式插值原理详解 路径插值方法深度对比研究 Claude Code 使用指南 OpenClaw 记忆管理与技能创建指南 CBS(Conflict-Based Search)算法详解 A* 算法及其变种详解 OpenClaw 配置多 Agents Windows Powershell 无法加载文件,因为在此系统上禁止运行脚本问题的解决方案 MaxClaw 安装流程 大模型 AI 名词介绍 AList 网盘聚合工具简介 Protobuf 简介与测试 Claude Code 简介以及 GLM 4.7 模型接入 Github 歌词下载工具 163MusicLyrics Python __getattr__ 懒加载 Python TypedDict 机器人仿真平台 Gazebo 安装记录 机器人仿真平台 Gazebo 简介 多机器人路径规划问题(Multi-Agent Path Finding, MAPF)简介 Python exifread 读取修改过的 jpeg 信息错误问题修复 3D 坐标系变换的理解 3D 旋转矩阵基本概念 MongoDB Compass 介绍 Python 环境管理工具 uv Flutter 开发指南 Snipaste 安装下载与黑屏问题解决方案 全局路径规划算法记录
相机成像的几何原理
Yiwei Zhang · 2023-04-11 · via 又见苍岚

真实物体通过相机转换为图像,可以通过一个数学模型将真实物体的三维坐标与图像中的二维坐标一一对应,本文 从几何角度解释图像的形成。

简介

为了轻松理解问题,我们假设您在一个房间内部署了一个摄像头。 给定这个房间中的 3D 点 $P$,我们想在相机拍摄的图像中找到该 3D 点的像素坐标 $(u,v)$。

从三维坐标(世界坐标系)到二维坐标(图像坐标系)又可以分为三个步骤:

  1. 从世界坐标转换到相机坐标;

  2. 从相机坐标转换到图像坐标;

  3. 从图像坐标转换到像素坐标。

世界坐标到相机坐标系

世界坐标系

要定义房间中点的位置,我们首先需要为此房间定义一个坐标系。它需要两件事 :

  1. 原点:我们可以任意固定房间的一角作为原点 $(0,0,0)$。
  2. $X,Y,Z$轴:我们还可以沿着地板的两个维度定义房间的 $X$ 和 $Y$ 轴,并沿着垂直墙定义 $Z$ 轴。

使用以上坐标系定义,我们可以找到房间中任何点的3D坐标, 此坐标系称为 世界坐标系(World Coordinate System),也就是图中的黄色坐标系。

在世界坐标系中,我们可以定义房间的点 $P$ 坐标为 $(X_w,Y_w,Z_w)$。

相机坐标系

现在,在这个房间里放一个相机。 使用此摄像机将捕获房间的图像,因此,我们对连接到此摄像机的3D坐标系感兴趣,并且需要找到 3D 世界坐标与 3D 摄像机坐标之间的关系。

将相机放在房间的任意位置,拍摄任意方向,此时都可以以相机位置为原点,以相机的水平、镜头正对的方向、竖直方向作为$(X_c,Y_c,Z_c)$ 轴建立坐标系,该坐标系定义为 相机坐标系( Camera Coordinate System )

外部参数

相机坐标系可以通过平移和旋转达到与世界坐标系重合的效果,因此可以说世界坐标系和摄影机坐标系通过旋转和平移关联,这其中有六个参数(3个用于旋转,3个用于平移)称为相机的外部参数

将旋转和平移都用矩阵乘法表示,旋转矩阵为 $R$ (9个参数,自由度为3),平移向量 $t$,那么坐标值可以通过以下公式关联:

$$ \left[\begin{array}{c}X_{c} \\ Y_{c} \\ Z_{c}\end{array}\right]=\mathbf{R}\left[\begin{array}{c}X_{w} \\ Y_{w} \\ Z_{w}\end{array}\right]+\mathbf{t} $$

有时,上面的表达式以更紧凑的形式编写。将 $3×1$ 平移向量作为列附加在 $3×3$ 旋转矩阵的末尾,以获得称为外部矩阵(相机外参)的 $3×4$ 矩阵。

$$ \left[\begin{array}{c}X_{c} \\ Y_{c} \\ Z_{c}\end{array}\right]=[\mathbf{R} \mid \mathbf{t}]\left[\begin{array}{c}X_{w} \\ Y_{w} \\ Z_{w} \\ 1\end{array}\right] $$

外参矩阵 $P$ 定义为:
$$
\mathbf{P}=[\mathbf{R} \mid \mathbf{t}]
$$

从相机坐标转换到图像坐标

图像坐标系

上图显示了点 P 在小孔成像相机图像平面上的投影,图像平面放置在距光学中心一定距离 $f$ (焦距)的位置。 感光原件会在焦距位置设置一个平面,这里的坐标系称作图像坐标系(Image Coordinate System )

相机坐标转换到图像坐标

P 在投影平面上的点 $(x,y)$ 可以通过如下计算获取:

$$ \begin{aligned} y_{p} & =f \times \frac{Y c}{Z c} \\ x_{p} & =f \times \frac{X c}{Z c}\end{aligned} $$

矩阵 $K$ 称为内部矩阵,包含相机的内部参数:

$$ \mathbf{K}=\left[\begin{array}{lll}f & 0 & 0 \\ 0 & f & 0 \\ 0 & 0 & 1\end{array}\right] $$

相机坐标到图像坐标的转换过程为:

$$ \left[\begin{array}{c}x_{p} \\ y_{p} \\ 1\end{array}\right]=\frac{1}{Z_{ c}}\left[\begin{array}{ccc}f x & 0 & 0 \\ 0 & f y & 0 \\ 0 & 0 & 1\end{array}\right]\left[\begin{array}{l}X_{ c} \\ Y_{ c} \\ Z_{ c}\end{array}\right] $$

从图像坐标转换到像素坐标

图像坐标系平面可以认为是理想的成像面,像素坐标系则是相机传感器平面,理想情况下图像坐标平面和像素坐标平面在同一平面,则从图像坐标转换到像素坐标有两个步骤:

  1. 缩放,在前面的坐标系中,坐标系单位是统一的实际距离单位,但是像素坐标系的单位不一样,因此要缩放,换算到像素坐标系;

  2. 平移,从图像坐标系原点到像素坐标系原点。

变换为:

$$ \left[\begin{array}{c}u_{p} \\ v_{p} \\ 1\end{array}\right]=\left[\begin{array}{ccc}s x & 0 & c x \\ 0 & s y & c y \\ 0 & 0 & 1\end{array}\right]\left[\begin{array}{c}x_{p} \\ y_{p} \\ 1\end{array}\right] $$

其中 $sx$ 和 $sy$ 为单位长度的像素数。

同时,在实际中可能由于相机传感器的问题导致图像轴不垂直的情况,如下图:

可以认为在 $y$ 方向坐标不变,$x$ 方向坐标存在偏移,则有:

$$ \left[\begin{array}{c}u_{p} \\ v_{p} \\ 1\end{array}\right]=\left[\begin{array}{ccc}s x & c & c x \\ 0 & s y & c y \\ 0 & 0 & 1\end{array}\right]\left[\begin{array}{c}x_{p} \\ y_{p} \\ 1\end{array}\right] $$

其中 $c$ 为偏移系数。

坐标转换汇总

由上文推导总结得到由世界坐标到像素坐标转换关系:

$$ \left[\begin{array}{c}u_{p} \\ v_{p} \\ 1\end{array}\right]=\left[\begin{array}{ccc}s x & c & c x \\ 0 & s y & c y \\ 0 & 0 & 1\end{array}\right] \frac{1}{Z_{p c}}\left[\begin{array}{ccc}f x & 0 & 0 \\ 0 & f y & 0 \\ 0 & 0 & 1\end{array}\right][R \mid t]\left[\begin{array}{c}X _w \\ Y_ w \\ Z _w \\ 1\end{array}\right] $$

即:

$$ s\left[\begin{array}{c}u_{p} \\ v_{p} \\ 1\end{array}\right]=\left[\begin{array}{ccc}f_{x} s_{x} & c & c x \\ 0 & f_{y} s_{y} & c y \\ 0 & 0 & 1\end{array}\right][R \mid t]\left[\begin{array}{c}X_ w \\ Y _ w \\ Z _ w \\ 1\end{array}\right] $$

得到:
$$
s \tilde{m}=\mathbf{A}[\mathbf{R} \mid \mathbf{t}] \tilde{\mathbf{M}}
$$
其中:

  • $ s=1 / Z p c $ 为尺度参数

  • $ \mathbf{A} $ 是相机内参 $ , \mathbf{R}, \mathbf{t} $ 是相机外参

    $$ A=\left[\begin{array}{ccc}f_{x} s_{x} & c & c x \\ 0 & f_{y} s_{y} & c y \\ 0 & 0 & 1\end{array}\right] $$
  • $ \tilde{m} $ 为图像的齐次坐标 $ [u, v, 1]^{T} $

  • $ \tilde{M} $ 为模型点的齐次坐标 $ [X _w, Y _ w, Z _ w, 1]^{T} $

参考资料

文章链接:
https://www.zywvvd.com/notes/study/camera-imaging/camera-para/camera-para/