四大坐标系转换1——针孔相机模型和凸透镜成像
文章目录一、前言二、针孔相机模型问题1一、真实相机确实利用了凸透镜成像你对正立、倒立的理解正确吗二、凸透镜为什么能够成像先理解光线如何传播为什么形成倒立的像为什么凸透镜能让光线汇聚三、为什么凸透镜成像与物距、焦距有关举一个具体例子那么物距小于焦距会怎样四、针孔相机跟凸透镜相机究竟有什么区别1. 凸透镜相机2. 针孔相机3. 为什么这种简化合理五、最后解释为什么两张图的成像平面分别位于 Z 轴正负方向第二张图物理成像平面第一张图虚拟成像平面六、把这些知识串起来还有一个你可能会觉得有意思的细节一、前言四大坐标系转换系列主要目的在于弄清楚四大坐标系世界坐标系、相机坐标系、图像坐标系、像素坐标系的转换关系搞明白期间产生的一些疑问有时候在解决一些疑问的时候常常会新产生一些疑问因此不会在一篇文章中解决所有问题原因是这会导致需要理解新的概念理解新的概念会导致偏离主线问题新的概念最好另开一篇来说。二、针孔相机模型上图就是一个针孔相机模型x y z xyzxyz就是相机坐标系x ′ y ′ xyx′y′就是物理成像平面P点是真实物体的一个点我们可以看到图中有个射线从P PP点到光心O OO到P ′ PP′P ′ PP′点就是图像上的点。这里有一些关键的认知所谓针孔相机模型就是把相机看做一个点就是看做 光心O OO那个点。这就产生一个问题既然针孔相机是个简化的数学模型那真实相机的成像与针孔相机模型有什么区别注意到P PP点是在上方而P ′ PP′点是在下方这说明上方的点会投影到下方下方的点会投影到上方因为光是沿着直线传播的也就说对于一个三维的物体最终投影到二维平面会是一个倒立的像。这就产生一个问题为什么我们平时看相机的画面所成的像是一个正立的像从P PP点到光心O OO点这段距离的点包括P PP点都是真实物理世界的点而这些点都会投影到二维平面上的同一个点即都会投影到P ′ PP′点。这告诉我们三维投影二维必然会产生在深度那一维z维度上信息的损失。为了显示P点是三维空间中的一个点我加了一些辅助线可以看到橙色的长方体和蓝色长方体里面我们是可以找到很多相似三角形比如说我们做的辅助线PB’ 和 PA它们与光轴、射线构成的两个三角形就是相似而PB’ 和 PA正好是长方体都某个面的对角线对角线能找到相似那么我们想象P PP点在x方向的投影点、P ′ PP′点在x方向的投影点就能发现一对相似三角形同理想象P PP点在y方向的投影点、P ′ PP′点在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表示为什么注意到物理成像平面在相机坐标系的z轴的负方向上实际上是因为物理成像平面本身就是位于光心后方的所以按照物体在z轴正方向的约定下物理成像平面在z轴的负方向上。但是我们看看下面这个图在这个图中相机坐标系改成了用X c Y c Z c {X_c}{Y_c}{Z_c}XcYcZc表示 图像坐标系成像平面的坐标系改成了用x y xyxy表示然而下图中的成像平面画在了相机坐标系原点F c {F_c}Fc相当于上图的 光心O OO的前方也就是画在了相机坐标系Z c {Z_c}Zc轴的正方向上实际上这个只是数学家为了方便计算假象的一个面因为真实的成像平面在光心的后方像是倒立的我们看到在这个假想的面里就是正立的了除了这个假想面跟上图有所不同其实其他方面是基本一致的只是坐标系的符号表示、相机坐标系的朝向有些变化而已。我们顺便认识一下这个假想的成像平面里面的两个坐标系一个是图像坐标系x y xyxy它的原点在图像的中心另一个是像素坐标系u v uvuv它的原点在图像的左上角。这里产生了一个问题为什么要对一个平面弄出两个坐标系问题1首先真实的相机究竟如何成像它跟针孔相机有什么区别我以前学过凸透镜成像的原理好像成像是跟物体与相机的距离跟焦距的关系有关是不是说相机成的是倒立的实像但是我们在相机里看到正立的像是因为相机内部倒过来了而且我注意到第一张图把成像平面画在了相机坐标系的z轴正向上而第二张图画在了z轴负向上可能第二张图是成倒立的实像第一张图是转换到正立的虚像但是凸透镜成像规律当年是死记的并不清楚为什么你以前学过的凸透镜成像和计算机视觉中的针孔相机模型看起来像是两套不同的理论。但实际上它们描述的都是相机成像只不过一个侧重物理光学另一个侧重几何投影。你对两张图的判断也基本正确第一张图成像平面位于相机坐标系的 (Z) 轴正方向也就是光心前方。这是计算机视觉中常用的虚拟成像平面。第二张图物理成像平面位于光心后方对应 (Z) 轴负方向按照图中物体在 (Z) 方向的约定。这是传统针孔成像的画法会形成倒立的像。不过需要纠正一个概念第一张图虽然采用了虚拟成像平面但它并不是凸透镜成像规律里所说的“正立虚像”。这里的“虚拟”只是数学家为了计算方便假想了一块位于光心前方的平面。它不是实际由光线汇聚形成的像。我们按照下面的顺序理解真实相机如何利用凸透镜成像凸透镜为什么能让光线汇聚为什么会出现倒立的实像为什么物体距离焦距不同成像结果也不同为什么计算机视觉又使用针孔模型而且把成像平面放到了镜头前方一、真实相机确实利用了凸透镜成像你以前学的凸透镜成像原理确实就是理解真实相机的基础。不过现代相机通常不是只有一个凸透镜而是由多个透镜组成的复杂光学系统。我们先把它简化成一个理想凸透镜。真实相机大致是这样的现实物体 → 镜头透镜组→ 图像传感器 → 图像处理 → 照片其中镜头负责将来自物体的光线汇聚到传感器上。传感器可以理解为一块能感光的电子屏幕表面排列着大量感光像素。但要注意传感器不是像普通显示屏一样接收一张现成的照片而是每个感光像素分别接收光能并将其转换为电信号。最终图像处理芯片再将这些信号变成我们看到的照片。你对正立、倒立的理解正确吗你说相机成的是倒立的实像但是我们在相机里看到正立的像是因为相机内部倒过来了对基本正确。在正常摄影条件下镜头在传感器上形成的光学实像相对于物体是倒立的。但现代数码相机不需要真的把传感器翻过来而是通过像素坐标映射、图像处理及显示方向设置让你最终看到正立的画面。需要区分光学阶段镜头在传感器上形成倒立的实像。电子阶段读取和处理传感器数据按照正常方向显示。因此你在手机里看到的正立预览并不代表镜头在物理上产生了正立的实像。二、凸透镜为什么能够成像先理解光线如何传播看上面图中的第②部分。这里最关键的不是死记凸透镜成像规律而是理解凸透镜会让不同位置、不同方向入射的光线发生折射使来自同一个物点的光线在合适的位置重新汇聚。举个例子。假设我们有一棵树。我们只考虑树顶上的一个点 A。这个点向四面八方发出或反射光线。其中一部分光线到达凸透镜。经过凸透镜折射后它们在透镜后面的某个位置重新汇聚形成一个像点 A’。接下来考虑树底部的点 B。同样B 发出的光线进入透镜。光线发生折射。在透镜后方汇聚到 B’。当树上每个点发出的光线都分别汇聚到对应的像点时就形成了整棵树的像。为什么形成倒立的像想象树顶 A 和树底 B。来自树顶的光线经过凸透镜后汇聚在光轴下方。来自树底的光线则汇聚在相对的上方位置。因此树顶对应像的下方。树底对应像的上方。最终形成倒立的实像。这里的实像意思是光线真的在像点附近汇聚可以用传感器或屏幕接收。为什么凸透镜能让光线汇聚根本原因是光的折射。光从空气进入玻璃再从玻璃离开时因为两种介质的折射率不同传播方向会发生变化。凸透镜中间厚、边缘薄它的曲面形状会使平行于光轴入射的光线在理想近轴条件下汇聚到焦点附近。焦点距离透镜光学中心的距离就是焦距 (f)。但要注意焦点只是平行入射光线汇聚的位置不代表任何距离的物体都成像在焦点上。三、为什么凸透镜成像与物距、焦距有关你以前可能背过物距 (u)成像情况(u2f)倒立、缩小的实像(u2f)倒立、等大的实像(fu2f)倒立、放大的实像(uf)出射光线平行像位于无穷远(uf)正立、放大的虚像如下图所示物体如果是刚好在焦距 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}f1u1v1其中(f)焦距。(u)物体距离透镜的距离。(v)像距离透镜的距离。举一个具体例子假设凸透镜的焦距是f 50 mm f50\text{ mm}f50mm物体距离镜头u 1000 mm u1000\text{ mm}u1000mm代入公式1 50 1 1000 1 v \frac{1}{50}\frac{1}{1000}\frac{1}{v}50110001v1得到v ≈ 52.63 mm v\approx52.63\text{ mm}v≈52.63mm也就是说物体距离镜头 1 米时清晰的像会形成在镜头后方约 52.63 mm 处。现在物体远离镜头来到 10 米外u 10000 mm u10000\text{ mm}u10000mm计算v ≈ 50.25 mm v\approx50.25\text{ mm}v≈50.25mm你会发现物体距离越远像的位置越靠近焦平面。当u → ∞ u\rightarrow\inftyu→∞有v → f v\rightarrow fv→f这就是为什么相机拍摄不同距离的物体需要对焦。因为物体距离变化时清晰成像的位置也会变化。相机的对焦机构通过调整镜头内部透镜组或改变镜头与传感器的相对位置让需要拍摄的物体清晰地成像在传感器上。那么物距小于焦距会怎样假设u f ufuf此时透镜后的光线不再汇聚形成真实的像点而是继续发散。但如果你沿着这些发散光线反向延长就会发现它们仿佛来自透镜前方的某个位置。这就是虚像。放大镜就是典型例子。因此你以前背过的成像规律其实都是光线经过凸透镜折射之后产生的不同几何结果。四、针孔相机跟凸透镜相机究竟有什么区别现在回到你真正关心的问题。既然真实相机利用凸透镜成像为什么计算机视觉教材又突然引入针孔相机原因是我们研究三维世界如何映射到二维图像时通常不需要详细模拟光在每一片透镜中的折射。针孔模型只保留最重要的几何关系。1. 凸透镜相机真实相机通过透镜收集光线。来自同一个物点的多条光线通过透镜折射后可以在传感器上汇聚。因为能够收集较多光线真实相机可以得到较明亮的照片。但它也具有一定的复杂性存在焦点和对焦。可能出现景深与背景虚化。可能存在镜头畸变。成像受到光圈、焦距和透镜设计等因素影响。2. 针孔相机针孔相机则简单得多。把复杂镜头替换成一个无限小的理想小孔。这样从空间中某个点出发只有经过小孔的那条光线能够到达成像平面。因此我们只需要研究三维点、相机光心、二维像点之间的几何关系。它不需要考虑复杂的透镜折射过程。3. 为什么这种简化合理因为对于普通摄影镜头在忽略镜头畸变、离焦等因素并采用合适的等效光学参数后真实相机的主要成像几何关系通常可以用针孔模型近似描述。不过这里有一个重要区别。对于真实薄透镜相似三角形给出的放大率大小为m v u m\frac{v}{u}muv而理想针孔模型采用m f Z m\frac{f}{Z}mZf这两个公式并不是在所有距离下都完全相同。但对于远距离物体薄透镜的像距 (v) 趋近于焦距 (f)两者就非常接近。在计算机视觉中我们还可以使用经过相机标定得到的等效焦距描述实际镜头的投影关系。五、最后解释为什么两张图的成像平面分别位于 Z 轴正负方向现在我们终于可以把两张图联系起来了。假设相机光心位于O ( 0 , 0 , 0 ) O(0,0,0)O(0,0,0)相机向前看的方向是 Z ZZ那么三维物体位于Z 0 Z0Z0第二张图物理成像平面现实中的传感器位于镜头后方。因此Z 0 Z0Z0这时光线从物体出发穿过光心到达后方的成像平面。如果物体在光轴上方那么它在成像平面上的像点就在下方。所以成倒立的像。第一张图虚拟成像平面计算机视觉中为了避免负号经常把成像平面假想在相机前方。因此Z f 0 Zf0Zf0此时空间点和虚拟成像点位于光心的同一侧。于是x f X Z xf\frac{X}{Z}xfZXy f Y Z yf\frac{Y}{Z}yfZY这样写起来更方便。但一定记住这只是数学上的虚拟投影平面并不是透镜真的在相机前方形成了一幅实像。而且它也不是你以前在凸透镜成像规律中学到的“正立虚像”。两者名称相似但物理含义不同。六、把这些知识串起来现在你可以建立一个完整的理解真实世界中存在三维物体。物体表面反射的光线进入相机。↓真实镜头通过折射使光线汇聚。来自不同物点的光线分别在传感器上形成像点。↓传感器接收倒立的光学实像。随后经过数字图像处理形成我们看到的正立照片。↓计算机视觉为了研究投影几何将真实相机简化为针孔模型。用一个光心和一块成像平面描述三维点与二维像点之间的关系。↓为了简化数学计算又经常把物理成像平面替换为光心前方的虚拟成像平面。于是得到x f X Z , y f Y Z \boxed{xf\frac{X}{Z},\qquad yf\frac{Y}{Z}}xfZX,yfZY还有一个你可能会觉得有意思的细节你以前学过物距小于焦距时凸透镜成正立放大的虚像。那么你可能会问既然真实相机使用凸透镜为什么我们从来不把手机摄像头当作放大镜使用直接拍到一个正立放大的虚像呢原因是相机需要让光线在传感器上形成清晰的实像而不是让人眼通过透镜观察虚像。当被摄物体距离过近、超出镜头的对焦能力时传感器就无法在当前位置得到清晰的实像因此照片会模糊。这和你以前学的凸透镜成像规律完全一致。所以我建议你现在重点掌握两个区分一是“真实透镜成像”与“针孔几何模型”的区别二是“光学虚像”与“数学上的虚拟成像平面”的区别。理解了这两个区分再看你的两张图就不会互相矛盾了。