四大坐标系转换1——针孔相机模型和凸透镜成像

文章目录

一、前言

四大坐标系转换系列主要目的在于弄清楚四大坐标系:世界坐标系、相机坐标系、图像坐标系、像素坐标系的转换关系,搞明白期间产生的一些疑问,有时候在解决一些疑问的时候,常常会新产生一些疑问,因此不会在一篇文章中解决所有问题,原因是:这会导致需要理解新的概念,理解新的概念会导致偏离主线问题,新的概念最好另开一篇来说。

二、针孔相机模型

上图就是一个针孔相机模型, x y z xyz xyz 就是相机坐标系, x ′ y ′ x'y' x′y′ 就是物理成像平面,P点是真实物体的一个点,我们可以看到图中有个射线,从 P P P 点到光心 O O O 到 P ′ P' P′ , P ′ P' P′ 点就是图像上的点。这里有一些关键的认知:

  1. 所谓针孔相机模型就是把相机看做一个点,就是看做 光心 O O O 那个点。这就产生一个问题:既然针孔相机是个简化的数学模型,那真实相机的成像与针孔相机模型有什么区别?

  2. 注意到 P P P 点是在上方,而 P ′ P' P′ 点是在下方,这说明上方的点会投影到下方,下方的点会投影到上方(因为光是沿着直线传播的),也就说对于一个三维的物体最终投影到二维平面,会是一个倒立的像。这就产生一个问题:为什么我们平时看相机的画面所成的像是一个正立的像?

  3. 从 P P P 点到光心 O O O 点这段距离的点(包括 P P P 点)都是真实物理世界的点,而这些点都会投影到二维平面上的同一个点,即都会投影到 P ′ P' P′ 点。这告诉我们,三维投影二维必然会产生在深度那一维(z维度)上信息的损失。

  4. 为了显示P点是三维空间中的一个点,我加了一些辅助线,可以看到橙色的长方体和蓝色长方体里面我们是可以找到很多相似三角形,比如说我们做的辅助线PB' 和 PA,它们与光轴、射线构成的两个三角形就是相似,而PB' 和 PA正好是长方体都某个面的对角线,对角线能找到相似,那么我们想象 P P P 点在x方向的投影点、 P ′ P' P′ 点在x方向的投影点就能发现一对相似三角形,同理,想象 P P P 点在y方向的投影点、 P ′ P' P′ 点在y方向的投影点就能发现另一对相似三角形,如下图所示

    于是能得到

    x P ′ X P = y P ′ Y P = f Z \boxed{\frac{x_{P'}}{X_P}=\frac{y_{P'}}{Y_P}=\frac{f}{Z}} XPxP′=YPyP′=Zf

    即:

    x P ′ = f X P Z , y P ′ = f Y P Z \boxed{x_{P'}=f\frac{X_P}{Z},\qquad y_{P'}=f\frac{Y_P}{Z}} xP′=fZXP,yP′=fZYP

    如果我们把物理成像平面移动到光心的前面(实际是在光心的后面,移动之后是个假想面,这个假想面只是为了方便计算,不是实际存在的成像面,见下面第5点)。如下图所示,原本的像是倒立的,在这个假想面里的像是正立的,这里面描述的相似关系也是跟上面说的一样,将 P 和像点 p 在x方向和y方向投影之后,会出现相似三角形。根据这个相似三角形就能推导出像点 p 相机坐标系里的 P 点的关系,即完成了 相机坐标系转图像坐标系

    注意到,在最后根据矩阵乘法的逆向用法,转成了矩阵的乘法的形式,这里产生了一个问题,为什么多了一个维度?左边明明可以用x,y表示的,却用了x,y,1,中间那个投影矩阵,它原本可以用2x2表示,却用了3x4表示,为什么?

  5. 注意到,物理成像平面在相机坐标系的z轴的负方向上,实际上是因为物理成像平面本身就是位于光心后方的(所以按照物体在z轴正方向的约定下,物理成像平面在z轴的负方向上)。但是我们看看下面这个图,在这个图中相机坐标系改成了用 X c Y c Z c {X_c}{Y_c}{Z_c} XcYcZc 表示, 图像坐标系(成像平面的坐标系)改成了用 x y xy xy 表示,然而下图中的成像平面画在了相机坐标系原点 F c {F_c} Fc(相当于上图的 光心 O O O)的前方,也就是画在了相机坐标系 Z c {Z_c} Zc 轴的正方向上,实际上这个只是数学家为了方便计算假象的一个面,因为真实的成像平面在光心的后方,像是倒立的,我们看到,在这个假想的面里就是正立的了,除了这个假想面跟上图有所不同,其实其他方面是基本一致的,只是坐标系的符号表示、相机坐标系的朝向有些变化而已。我们顺便认识一下这个假想的成像平面里面的两个坐标系,一个是图像坐标系 x y xy xy,它的原点在图像的中心,另一个是像素坐标系 u v uv uv,它的原点在图像的左上角。这里产生了一个问题,为什么要对一个平面弄出两个坐标系?

问题1

首先真实的相机究竟如何成像,它跟针孔相机有什么区别?我以前学过凸透镜成像的原理,好像成像是跟物体与相机的距离跟焦距的关系有关,是不是说相机成的是倒立的实像,但是我们在相机里看到正立的像是因为相机内部倒过来了,而且我注意到第一张图把成像平面画在了相机坐标系的z轴正向上,而第二张图画在了z轴负向上,可能第二张图是成倒立的实像,第一张图是转换到正立的虚像?但是凸透镜成像规律当年是死记的,并不清楚为什么

你以前学过的凸透镜成像,和计算机视觉中的针孔相机模型,看起来像是两套不同的理论。

但实际上,它们描述的都是相机成像,只不过一个侧重物理光学 ,另一个侧重几何投影。

你对两张图的判断也基本正确:

  • 第一张图: 成像平面位于相机坐标系的 (Z) 轴正方向,也就是光心前方。这是计算机视觉中常用的虚拟成像平面。
  • 第二张图: 物理成像平面位于光心后方,对应 (Z) 轴负方向(按照图中物体在 (+Z) 方向的约定)。这是传统针孔成像的画法,会形成倒立的像。

不过需要纠正一个概念:

第一张图虽然采用了虚拟成像平面,但它并不是凸透镜成像规律里所说的"正立虚像"。

这里的"虚拟",只是数学家为了计算方便,假想了一块位于光心前方的平面。它不是实际由光线汇聚形成的像。

我们按照下面的顺序理解:

  1. 真实相机如何利用凸透镜成像?
  2. 凸透镜为什么能让光线汇聚?为什么会出现倒立的实像?
  3. 为什么物体距离焦距不同,成像结果也不同?
  4. 为什么计算机视觉又使用针孔模型,而且把成像平面放到了镜头前方?

一、真实相机确实利用了凸透镜成像

你以前学的凸透镜成像原理,确实就是理解真实相机的基础。

不过现代相机通常不是只有一个凸透镜,而是由多个透镜组成的复杂光学系统。

我们先把它简化成一个理想凸透镜。

真实相机大致是这样的:

现实物体 → 镜头(透镜组)→ 图像传感器 → 图像处理 → 照片

其中,镜头负责将来自物体的光线汇聚到传感器上。

传感器可以理解为一块能感光的电子屏幕,表面排列着大量感光像素。

但要注意:

传感器不是像普通显示屏一样接收一张现成的照片,而是每个感光像素分别接收光能,并将其转换为电信号。

最终,图像处理芯片再将这些信号变成我们看到的照片。

你对正立、倒立的理解正确吗?

你说:

相机成的是倒立的实像,但是我们在相机里看到正立的像是因为相机内部倒过来了?

对,基本正确。

在正常摄影条件下,镜头在传感器上形成的光学实像相对于物体是倒立的。

但现代数码相机不需要真的把传感器翻过来,而是通过像素坐标映射、图像处理及显示方向设置,让你最终看到正立的画面。

需要区分:

  • 光学阶段: 镜头在传感器上形成倒立的实像。
  • 电子阶段: 读取和处理传感器数据,按照正常方向显示。

因此,你在手机里看到的正立预览,并不代表镜头在物理上产生了正立的实像。


二、凸透镜为什么能够成像?先理解光线如何传播

看上面图中的第②部分。

这里最关键的不是死记凸透镜成像规律,而是理解:

凸透镜会让不同位置、不同方向入射的光线发生折射,使来自同一个物点的光线在合适的位置重新汇聚。

举个例子。

假设我们有一棵树。

我们只考虑树顶上的一个点 A。

这个点向四面八方发出或反射光线。

其中一部分光线到达凸透镜。

经过凸透镜折射后,它们在透镜后面的某个位置重新汇聚,形成一个像点 A'。

接下来考虑树底部的点 B。

同样:

  • B 发出的光线进入透镜。
  • 光线发生折射。
  • 在透镜后方汇聚到 B'。

当树上每个点发出的光线都分别汇聚到对应的像点时,就形成了整棵树的像。

为什么形成倒立的像?

想象树顶 A 和树底 B。

来自树顶的光线经过凸透镜后,汇聚在光轴下方。

来自树底的光线则汇聚在相对的上方位置。

因此:

  • 树顶对应像的下方。
  • 树底对应像的上方。

最终形成倒立的实像。

这里的实像,意思是光线真的在像点附近汇聚,可以用传感器或屏幕接收。

为什么凸透镜能让光线汇聚?

根本原因是光的折射。

光从空气进入玻璃,再从玻璃离开时,因为两种介质的折射率不同,传播方向会发生变化。

凸透镜中间厚、边缘薄,它的曲面形状会使平行于光轴入射的光线在理想近轴条件下汇聚到焦点附近。

焦点距离透镜光学中心的距离,就是焦距 (f)。

但要注意,焦点只是平行入射光线汇聚的位置,不代表任何距离的物体都成像在焦点上。


三、为什么凸透镜成像与物距、焦距有关?

你以前可能背过:

物距 (u) 成像情况
(u>2f) 倒立、缩小的实像
(u=2f) 倒立、等大的实像
(f<u<2f) 倒立、放大的实像
(u=f) 出射光线平行,像位于无穷远
(u<f) 正立、放大的虚像

如下图所示,物体如果是刚好在焦距 f 的地方(下面的第三个小图),那么穿过光心的线和平行射入凸透镜的线是相互平行的,它们的反向延长线是平行的,此时成像是无穷远的。那如果继续靠近的透镜的话,就会成正立放大的虚像(下面的第二个小图),而且这个虚像会跑到 2f 开外的位置,如果继续靠近透镜,这个虚像会慢慢地往 f 的位置靠近,比如靠近到 f / 2 的位置的时候,虚像就来到了 f 的位置(下图的第1个小图),但成的虚像依然是比原来物体的大小要大。

如下图所示,物体如果是刚好 f 和 2f 之间的位置,那么成的像就是倒立、放大的实像(下图的第1个小图),并且如果是继续远离凸透镜的话,这个像会逐渐缩小(下图的第2个小图),比如刚好到 2f 的位置时,这个像已经缩小到跟物体相同的大小了,此时成的是倒立、等大的实像(下图的第3个小图),如果继续远离凸透镜的,成的像会继续缩小,并且位置逐渐往 f 的地方靠近(下图的第4个小图)

现在我们不用死记,而是从一个公式理解。

薄透镜成像公式为:

1 f = 1 u + 1 v \frac{1}{f}=\frac{1}{u}+\frac{1}{v} f1=u1+v1

其中:

  • (f):焦距。
  • (u):物体距离透镜的距离。
  • (v):像距离透镜的距离。

举一个具体例子

假设凸透镜的焦距是:

f = 50 mm f=50\text{ mm} f=50 mm

物体距离镜头:

u = 1000 mm u=1000\text{ mm} u=1000 mm

代入公式:

1 50 = 1 1000 + 1 v \frac{1}{50}=\frac{1}{1000}+\frac{1}{v} 501=10001+v1

得到:

v ≈ 52.63 mm v\approx52.63\text{ mm} v≈52.63 mm

也就是说,物体距离镜头 1 米时,清晰的像会形成在镜头后方约 52.63 mm 处。

现在物体远离镜头,来到 10 米外:

u = 10000 mm u=10000\text{ mm} u=10000 mm

计算:

v ≈ 50.25 mm v\approx50.25\text{ mm} v≈50.25 mm

你会发现:

物体距离越远,像的位置越靠近焦平面。

当:

u → ∞ u\rightarrow\infty u→∞

有:

v → f v\rightarrow f v→f

这就是为什么相机拍摄不同距离的物体需要对焦。

因为物体距离变化时,清晰成像的位置也会变化。

相机的对焦机构通过调整镜头内部透镜组,或改变镜头与传感器的相对位置,让需要拍摄的物体清晰地成像在传感器上。

那么物距小于焦距会怎样?

假设:

u < f u<f u<f

此时透镜后的光线不再汇聚形成真实的像点,而是继续发散。

但如果你沿着这些发散光线反向延长,就会发现它们仿佛来自透镜前方的某个位置。

这就是虚像。

放大镜就是典型例子。

因此,你以前背过的成像规律,其实都是光线经过凸透镜折射之后产生的不同几何结果。


四、针孔相机跟凸透镜相机究竟有什么区别?

现在回到你真正关心的问题。

既然真实相机利用凸透镜成像,为什么计算机视觉教材又突然引入针孔相机?

原因是:

我们研究三维世界如何映射到二维图像时,通常不需要详细模拟光在每一片透镜中的折射。

针孔模型只保留最重要的几何关系。

1. 凸透镜相机

真实相机通过透镜收集光线。

来自同一个物点的多条光线,通过透镜折射后,可以在传感器上汇聚。

因为能够收集较多光线,真实相机可以得到较明亮的照片。

但它也具有一定的复杂性:

  • 存在焦点和对焦。
  • 可能出现景深与背景虚化。
  • 可能存在镜头畸变。
  • 成像受到光圈、焦距和透镜设计等因素影响。

2. 针孔相机

针孔相机则简单得多。

把复杂镜头替换成一个无限小的理想小孔。

这样,从空间中某个点出发,只有经过小孔的那条光线能够到达成像平面。

因此,我们只需要研究:

三维点、相机光心、二维像点之间的几何关系。

它不需要考虑复杂的透镜折射过程。

3. 为什么这种简化合理?

因为对于普通摄影镜头,在忽略镜头畸变、离焦等因素,并采用合适的等效光学参数后,真实相机的主要成像几何关系通常可以用针孔模型近似描述。

不过这里有一个重要区别。

对于真实薄透镜,相似三角形给出的放大率大小为:

m = v u m=\frac{v}{u} m=uv

而理想针孔模型采用:

m = f Z m=\frac{f}{Z} m=Zf

这两个公式并不是在所有距离下都完全相同。

但对于远距离物体,薄透镜的像距 (v) 趋近于焦距 (f),两者就非常接近。

在计算机视觉中,我们还可以使用经过相机标定得到的等效焦距,描述实际镜头的投影关系。


五、最后解释:为什么两张图的成像平面分别位于 Z 轴正负方向?

现在我们终于可以把两张图联系起来了。

假设相机光心位于:

O = ( 0 , 0 , 0 ) O=(0,0,0) O=(0,0,0)

相机向前看的方向是:

  • Z +Z +Z

那么三维物体位于:

Z > 0 Z>0 Z>0

第二张图:物理成像平面

现实中的传感器位于镜头后方。

因此:

Z < 0 Z<0 Z<0

这时,光线从物体出发,穿过光心,到达后方的成像平面。

如果物体在光轴上方,那么它在成像平面上的像点就在下方。

所以成倒立的像。

第一张图:虚拟成像平面

计算机视觉中,为了避免负号,经常把成像平面假想在相机前方。

因此:

Z = f > 0 Z=f>0 Z=f>0

此时,空间点和虚拟成像点位于光心的同一侧。

于是:

x = f X Z x=f\frac{X}{Z} x=fZX

y = f Y Z y=f\frac{Y}{Z} y=fZY

这样写起来更方便。

但一定记住:这只是数学上的虚拟投影平面,并不是透镜真的在相机前方形成了一幅实像。

而且它也不是你以前在凸透镜成像规律中学到的"正立虚像"。

两者名称相似,但物理含义不同。


六、把这些知识串起来

现在你可以建立一个完整的理解:

真实世界中存在三维物体。

物体表面反射的光线进入相机。

↓

真实镜头通过折射使光线汇聚。

来自不同物点的光线分别在传感器上形成像点。

↓

传感器接收倒立的光学实像。

随后经过数字图像处理,形成我们看到的正立照片。

↓

计算机视觉为了研究投影几何,将真实相机简化为针孔模型。

用一个光心和一块成像平面描述三维点与二维像点之间的关系。

↓

为了简化数学计算,又经常把物理成像平面替换为光心前方的虚拟成像平面。

于是得到:

x = f X Z , y = f Y Z \boxed{x=f\frac{X}{Z},\qquad y=f\frac{Y}{Z}} x=fZX,y=fZY


还有一个你可能会觉得有意思的细节

你以前学过:

物距小于焦距时,凸透镜成正立放大的虚像。

那么你可能会问:

既然真实相机使用凸透镜,为什么我们从来不把手机摄像头当作放大镜使用,直接拍到一个正立放大的虚像呢?

原因是相机需要让光线在传感器上形成清晰的实像,而不是让人眼通过透镜观察虚像。

当被摄物体距离过近、超出镜头的对焦能力时,传感器就无法在当前位置得到清晰的实像,因此照片会模糊。

这和你以前学的凸透镜成像规律完全一致。

所以我建议你现在重点掌握两个区分:一是"真实透镜成像"与"针孔几何模型"的区别,二是"光学虚像"与"数学上的虚拟成像平面"的区别。理解了这两个区分,再看你的两张图就不会互相矛盾了。

相关推荐
七牛云行业应用1 小时前
GitHub 94k Star 工具 Agent Reach:给 AI Agent 装上互联网能力,零 API 费用接入 13 个平台
人工智能·github
wshzd1 小时前
LLM之Agent(108)|DeepSeek-Harness(十六)上下文压缩 Compaction 与 Checkpoint 持久化
人工智能
武子康1 小时前
两台 A6000,LingBot 应该先验哪条路径?
人工智能·后端·agent
老纪的技术唠嗑局1 小时前
# 来啦!PowerContext v1.2.0,接入 jev!
人工智能
AAASilverwolf1 小时前
Gemini Nano Banana 2.1 正式可用:视觉设计、文字渲染和主体一致性到底提升在哪?
人工智能·api
JQLvopkk1 小时前
HslCommunication,一个工具测遍所有 PLC
开发语言·人工智能·c#·交互
涛思数据(TDengine)1 小时前
栖息地 AI 超恒气候系统用 TDengine 支撑全屋环境品质实时监测与历史追溯
人工智能·ai·时序数据库·tdengine·工业ai
在繁华处1 小时前
2.1 上下文:决定 Agent 能力上限的关键
前端·人工智能·microsoft
ndsc_d1 小时前
2026年有哪些好用的AI UI设计工具?主流工具功能和适用场景对比
前端·人工智能·ui·ai·设计师·ai ui·ai ui工具