相机模型(Camera Models)总结
针孔相机(Pinhole camera)
如图所示,这是一个比较简单的针孔相机模型,这里的树是我们需要拍摄的物体,记作object,从物体身上不同点发出不同颜色的光线。
barrier表示的是障碍,它位于物体和胶片之间,具有阻挡光线的作用。
Aperture 表示针孔,即障碍物上的一个小孔。光线通过这个小孔投射到胶片上。
film:表示胶片,光线最终在胶片上成像。
即针孔相机通过添加一个障碍物以阻挡大部分光线,只允许少量光线通过针孔,从而使成像更清晰,减少图像模糊。
进一步地,我们将针孔相机的模型进行简化,得到如下图所示模型:
物体的光线打出来,首先形成虚像(virtual image),并通过针孔进入相机内部并在图像平面汇聚成像,从而在图像平面形成了倒立的像,我们记图像平面到针孔的距离为焦距
如果我们以针孔为原点建立坐标系,便能够将三维空间上的点映射到二维平面上,如图所示:
假设三维空间点的坐标为 (x, y, z) ,图像平面上成像点坐标为 (x', y') ,则我们能够通过相似三角形原理推导得出他们之间的关系,推导过程也很简单:
接下来我们需要讨论一个问题:在我们简化相机模型中,我们将针孔视为了一个点,但是在实际的相机模型中,针孔是有大小的,因此我们需要讨论一下针孔的大小对于图像的形成会有什么样的影响呢?
事实上,如果如果相机的针孔太大,将会导致形成的图像不够清晰;但针孔太小,进入相机的光线不足,可能导致成像过暗等问题,解决办法是添加镜头,通过添加镜头可以在缩小光圈保证清晰度的同时,汇聚更多光线,改善成像质量。
相机与镜头
为了解决以上问题,人们想到了利用透镜作为镜头,它能够起到汇聚光线的作用,从物体上一个点发出了许多不同的光线,经过镜头又重新汇聚到图像平面的同一点,如图所示:
镜头在相机成像中的作用是使光线聚焦,但是只有当物体处于特定距离时,才能在成像平面上形成清晰的像,上述现象与景深概念紧密相连,景深描述了在镜头前方能够形成清晰图像的空间深度范围,如果距离太近或者太远光线无法汇聚到成像平面上,则会在平面前后发散,这种现象被称为失焦(Out of focus)。
如果从物体上一点发出多条光线都与光轴(或主轴)平行,经过镜头后汇聚到一个点,则这个点叫做焦点,焦点到镜头中心的距离叫做焦距
近轴折射模型(Paraxial refraction model)
近轴折射模型也是一个将三维世界的点转化为二维图像平面的点的方法,由斯涅尔定理我们能够得到公式:
径向畸变(Radial Distortion)
上图展示了相机镜头的径向畸变问题,对于穿过镜头边缘的光线,较为容易产生偏差,说明镜头的径向畸变主要是由边缘光线的偏差导致的。同时图像放大率随着与光轴距离的增加而减小。解释了径向畸变对图像放大率的影响规律。
并且,这种畸变主要表现为两种形式:
Pin cushion(枕形畸变):图像边缘向内收缩,形似枕头。
Barrel (fisheye lens)(桶形畸变,鱼眼镜头常见):图像边缘向外凸出,形似桶状。
针孔相机的几何形状(The geometry of pinhole cameras)
在之前的基础上,我们已经把三维空间的点转化到二维平面上了,现在我们需要在二维平面上重新建立坐标系,从而更好地描述图像点的性质。
上图展示了将三维点转化为像素点的一般过程:
首先第一步我们需要根据我们在近轴折射模型中介绍的方法,先将三维世界的点转化为二维图像平面的点,然后为了方便我们对于点进行描述,我们需要对坐标进行偏移变换将原来的坐标
我们讨论一下这样的投影变换是线性的吗?显然不是,因为线性变换需满足可加性和齐次性,而此投影变换公式中存在除以
但虽然它不是线性变换,我们依旧能够将他转化为矩阵形式,即通过齐次坐标的方法。
补充一下齐次坐标的相关知识:
对于二维坐标
对于齐次坐标
三维世界中的点的坐标为
基于以上推导,我们能够得到将三维世界点转化为二维平面点的公式:
但是由于存在相机倾斜的问题,我们需要对变换矩阵
接下来我们分析一下相机矩阵
最后我们介绍一种投影变换的特殊形式:规范投影变换(Canonical Projective Transformation)。
规范投影变换的矩阵乘法形式为
世界参考系(World reference system)
之前讨论的成像等映射关系都是基于相机参考系,那么如果一个物体是在世界参考系中表示的会怎样?此时我们需要引入一个从世界参考系到相机参考系的额外映射。通过旋转和平移变换,将世界参考系下的物体坐标转换到相机参考系中,以便进行后续的成像等处理。
二维平移 (2D Translation)
将 点
缩放(Scaling)
在二维平面中,点
旋转(Rotation)
我们这里规定旋转绕原点逆时针旋转角度
写成矩阵形式:
这个公式的自由度是
如果我们考虑综合运用这三种变换,我们只需要将三种变换矩阵依次相乘,即如下图所示。特殊的,如果
接下来我们介绍一下三维变换,相比于二维变换,这里主要讲的是三维变换中的平移和旋转。
三维点的平移(3D Translation of Points)
与二维点的平移十分类似,我们可以利用齐次坐标,平移后的点
其中
同时三维平移向量具有 3 个自由度,因为
三维点的旋转(3D Rotation of Points)
相比于二维点的旋转,三维点的旋转这里要复杂很多,它由三个旋转矩阵构成:
绕
绕
绕
依次乘以绕
旋转后的点
三维旋转矩阵也具有 3 个自由度,因为
有了这些变换的帮助,我们就能够将世界坐标系下的点转化到相机坐标系:
首先我们将世界参考系下的点
我们把
如果我们将矩阵
从而我们能够得到从齐次坐标到非齐次坐标的转换:通过公式
投影变换的属性(Properties of projective transformations)
投影变换主要有三个比较明显的性质:
除此之外,投影变换也有着一些比较重要的性质,例如角度不被保留。意思是在投影过程中,三维空间中物体的角度关系在二维投影图像中一般不会保持不变;并且平行线相交! 世界中的平行线在图像中会在一个 “消失点(vanishing point)” 处相交。这是投影的一个重要特性,反映了现实世界在投影到二维平面时的视觉变化。
在下节课我们会围绕这些性质详细展开论述,这部分内容我们就先讲到这里,如有问题,请指正。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!