作者:木一
对相机系列感兴趣还可看前文了解更多相关内容:
引言
上文我们介绍了针孔相机模型,用来描述相机的透视投影成像过程,具体可以表示为:
其中P表示三维空间中的任意一点,p表示其在成像平面上的像素坐标,K表示相机内参,R、t表示相机外参。λ为尺度因子,可以取任意实数。
据此可以看出,给定相机内外参数,可以唯一确定三维空间到二维平面的投影转换过程,即确立三维空间点到二维图像点的对应关系。
PS:转换是单向的,只能由三维到二维,这是因为三维到二维的转换损失了一个维度,无法得到二维到三维的唯一映射关系。不难想象,二维图像上的任意一点对应到三维空间是一条射线,而不是一个点。
这一点从公式的尺度因子可以看出,对于一个三维点P,可以唯一确定图像点p,对于一个图像点p,当尺度因子取值不同时,对应的三维点也不同。关于尺度因子的物理含义,从前文的公式中可以看出,它其实表示的是三维点距离相机中心的深度 𝑍𝑐 。所以如果深度值 𝑍𝑐 确定,则可以实现二维到三维的转换。
什么是相机标定
针孔相机模型只是对相机成像过程的通用描述,相机的内参各不相同,外参对应拍摄时的相机位置和姿态,要准确还原一幅相片的成像过程,还需要对相机的内外参数进行准确求解,求解过程称之为相机标定。
标定什么
相机内参包括焦距f、像主点坐标(𝑢0,𝑣0)、像元尺寸( 𝑑𝑥 , 𝑑𝑦 ),相机外参包括相机位置t和相机姿态R。相机标定是对相机内参和外参的求解,通常情况下,只需要计算出相机内参矩阵K和外参矩阵[Rt]即可。
以上仅针对理想条件下的线性模型而言,而实际成像过程受物理因素、光学因素影响,成像过程是非线性的,即会导致相机畸变,因此相机标定还包括对畸变系数的求解,关于畸变系数求解本文暂不展开。
标定方法
相机标定最早应用于摄影测量学,但主要针对量测型相机。之后随着计算机视觉的发展与应用,学者们提出了更多相机标定方法。此外,随着人工智能技术的发展,近年来基于深度学习的标定技术也得到广泛研究。
总体来说,传统标定方法是基于预先设置的成像场景构建标定模型,在场景几何约束基础上选取最优算法求解相机参数。主要包括以下三类:
(1)基于标定物的方法:是在场景空间设置参照物,参照物具有便于识别的特征点,识别参照物特征点构建像素与空间坐标对应关系方程组,再利用优化算法求解参数,基于棋盘格的张正友标定法是这类方法的经典代表。
(2)主动视觉法:是通过人为精确控制相机或目标做特殊运动如纯旋转、平移等获取多幅图像,基于定量化的运动约束求解相机参数。
(3)自标定方法:不需要设置特定的控制条件,只根据多幅图像对应点之间的关系直接求解相机参数,如直接求解 Kruppa 方程、基于绝对二次曲线和绝对二次曲面方法等。
本文介绍两种应用最为广泛的标定方法:直线线性变换法(Direct Linear Transform,DLT)和张正友标定法。
(1)DLT
在不考虑相机畸变的情况下,相机成像过程可以抽象为线性变换过程,DLT方法是通过已知的三维点和其在图像中的对应点关系建立线性方程组,并通过求解方程组来获取相机投影矩阵。再对投影矩阵进行分解获取相机内参和外参矩阵。关于具体方法介绍已经有大佬们写的很清楚了,本文不再赘述。参照:立体视觉入门指南(4):相机标定之DLT直接线性变换 - 知乎
图源:立体视觉入门指南(4):相机标定之DLT直接线性变换 - 知乎
(2)张正友标定法
张正友标定法也就是我们经常见到的棋盘格法,是一种基于标定物的方法。标定物是已知尺寸的二维棋盘格平面,以棋盘格角点作为参照建立约束关系,求解相机内外参数。具体可参照:立体视觉入门指南(3):相机标定之Zhang式标定法 - 知乎
图源:立体视觉入门指南(3):相机标定之Zhang式标定法 - 知乎
拓展:理解相机参数
内参矩阵理解
在实际应用中,我们标定出来的内参矩阵通常像这样:
K = [[4675.63477897830, -5.165508791991464, 3025.473077235752],
[0.000000000000000, 4666.3702576511423, 1986.696982476598],
[0.000000000000000, 0.0000000000000000, 1.000000000000000]]
fx = 4675.63477897830
fy = 4666.37025765114
u0 = 3025.47307723575
v0 = 1986.69698247659
根据前文介绍,可以知道:
其中f表示焦距,单位是mm。( 𝑑𝑥 , 𝑑𝑦 )表示一个像素的物理尺寸,可以用相机传感器尺寸/图像像素尺寸计算,单位是mm/像素。
因此 𝑓𝑥 、 𝑓𝑦 的单位是像素,可以理解为是以mm为单位的焦距的等效像素长度。那为什么焦距f要分为 𝑓𝑥 、 𝑓𝑦 表示呢,这是因为在相机传感器上,单个像素的形状通常不是正方形,而是矩形,因此在将图像物理坐标转换为图像像素坐标时,在x轴和y轴方向上的转换比不同,因此通常用 𝑓𝑥 和 𝑓𝑦 描述相机焦距。
( 𝑢0 , 𝑣0 )表示相机摄像中心到相片的垂点,或者用主光轴与相片交点来描述,称为像主点。通常情况下像主点位于相片中心点附近。
从上述定义可以看出,相机焦距、传感器尺寸、相片尺寸,这些参数都是固定的(假设焦距不变),那为什么还需要标定呢,生产时直接确定不行吗?这是因为在相机生产过程中,由于制造偏差或者其他因素影响,每台相机的实际内参与理论内参往往有所差异,因此需要通过实际测验来确定相机内参。
相机传感器
但是对于一些精度要求不高的应用场景,或者在一些计算过程中需要粗略的初始化参数时,可以通过查验资料来计算相机的理论参数。其中最重要的便是获取传感器尺寸。
相机成像主要是光电转换的过程(参考:https://blog.csdn.net/Coppa/article/details/107274059),其中最重要的便是感光Sensor(传感器),用于将光信号转换为电信号。传感器的尺寸(靶面大小)是影响成像质量最重要的因素,可以类比为画布,画布越大,能够承载的画面内容则越丰富。这也是摄影界中常说的“底大一级压死人”。
图源:相机基础知识讲解:CMOS和CCD_什么是ccd和cmos?-CSDN博客
言归正传,我们最关心的还是传感器尺寸,各类设备厂商对于传感器尺寸的描述通常如下:
索尼相机:
大疆无人机:
华为手机:
从相机、无人机、手机厂商对传感器尺寸的描述,可以看到有全画幅、APS-C画幅、1英寸、1/1.3英寸等这类描述。实际上无论是怎样的描述,主要是想表示传感器的面积。
- 全画幅来源于传统胶片相机时代,指的是与标准35毫米胶片尺寸相同的传感器尺寸,靶面尺寸为36mm × 24mm。
- APS-C画幅(经常被戏谑的称为残幅)比全画幅尺寸小,靶面尺寸为23.4mm×15.6mm。
- 1英寸指的是传感器对角线尺寸,虽然1英寸=2.54cm,但实际上1英寸的传感器对角线实际尺寸约为16mm,靶面尺寸为12.7mm×9.6mm,至于原因嘛当然是历史原因:“1英寸”不等于1英寸,关于CMOS尺寸的那点事-36氪。
- 其他诸如1/1.3英寸、1/2英寸等描述方式都是指传感器对角线尺寸,对应的靶面尺寸可以通过计算或者查阅资料获取。
图源:https://www.ithome.com/0/674/526.htm
所以,如果我们需要获取手机、数码相机或无人机,亦或是监控相机的理论内参时,可以查阅设备资料,获取其传感器尺寸,结合拍摄时的焦距、相片分辨率(像素尺寸),计算相机的理论内参。
焦距和等效焦距
对于相机来说,焦距主要由镜头决定,一般焦距的范围在15mm~600mm,这是物理尺寸。当传感器尺寸固定时,焦距决定了相机所拍摄的视角范围。
图片来源:为什么那么短的手机镜头能有数十毫米的等效焦距? - 知乎
但是我们在手机厂商的宣传中通常可以看到等效焦距的概念,由于手机大小的限制,无法放置全画幅传感器和实际物理尺寸的镜头,因此通常将135相机的感光器件和镜头看做一个整体,在手机内部放置一个缩小版的135相机成像组件,形成和135相机相同的成像视角。此时将135相机所对应的焦距称为等效焦距。
所以,等效焦距 = 全画幅传感器尺寸 / 实际传感器尺寸 * 物理焦距
其中,转换系数 = 全画幅传感器尺寸 / 实际传感器尺寸
举个栗子:
小米9的传感器型号为索尼IMX586,传感器尺寸1/2英寸,等效焦距 = 43.3 / 8 * 5 = 27.0625。
PS:传感器尺寸参照https://en.wikipedia.org/wiki/Normal_lens
所以,计算相机内参所使用的是实际物理焦距,而非等效焦距。
参考:
立体视觉入门指南(4):相机标定之DLT直接线性变换 - 知乎
立体视觉入门指南(3):相机标定之Zhang式标定法 - 知乎
相机基础知识讲解:CMOS和CCD_什么是ccd和cmos?-CSDN博客
https://en.wikipedia.org/wiki/Normal_lens
相机标定方法及进展研究综述 | 激光与光电子学进展 -- 中国光学期刊网
关注Mapmost,持续更新GIS、三维美术、计算机技术干货
Mapmost是一套以三维地图和时空计算为特色的数字孪生底座平台,包含了空间数据管理工具(Studio)、应用开发工具(SDK)、应用创作工具(Alpha)。平台能力已覆盖城市时空数据的集成、多源数据资源的发布管理,以及数字孪生应用开发工具链,满足企业开发者用户快速搭建数字孪生场景的切实需求,助力实现行业领先。