我们在上文自动驾驶系统中的传感器(一):我们需要哪些感知传感器?中介绍了可以通过增加各种感知传感器,使得自动驾驶系统具有类比人的感知能力。并从供给侧、需求侧和传感器的物体特性等方面分析了这些感知传感器对于自动驾驶的必要性,接下来我们从成像机制、优缺点、常见型号三个方面深入了解一下这些感知传感器,种类包括Camera、LiDAR、Radar以及雷达,看看这些传感器的感知机制以及具体特性到底有什么不同。
由于本人对Camera最为熟悉,先单独为Camera开一个章节。本文首先介绍了小孔成像的成像原理,由此自然而然地引出了镜头的成像原理,并对镜头中最实用的几点特性如光圈大小、景深、视场角与视场进行了详细介绍,随后介绍了成像传感器Image sensor的大致原理,并给出了常见的成像传感器型号以及核心指标,最后对Camera在自动驾驶成像中的应用进行了总结。
在工业应用场景中Camera其实可以简单的理解为其包括镜头Lens和成像传感器Image sensor,镜头负责汇聚光线到像平面,成像传感器负责将光信号转化为电信号并生成图像。
小孔成像是最早的一种可以进行清晰成像的成像机制:假设空间中有一个房子,在房子远处有一个像平面,在像平面和房子中间摆放了一个不透光的薄片,薄片的中有一个非常小的小孔,当有光线照在房子上时,P_o处反射出来的光线会穿过小孔到达像平面的P_i处,房子上的每一点反射出来的光线都会在像平面上有唯一的一个对应点,这样就在像平面上对房子完成了清晰成像。
以小孔中心作为坐标系原点,Z轴方向指向像平面,将小孔到像平面的距离称为有效焦距,记为f。小孔成像遵循透视模型(Perspective Imaging), 即空间中的一点(x_o,y_o,z_o)与像平面上的对应点(x_i,y_i,f)满足如下关系,从上述对应关系也可以看出,这种成像机制会损失物体的深度信息。
当小孔的尺寸过大时,物体上的某点反射/发射出来的光线在成像平面上会有多个对应点,导致图像变得模糊,所以为了能够得到清晰的成像,小孔内的尺寸应该尽量的小,但是不能过于小,否则会出现光线的衍射现象,导致成像再次变得不清晰。能够得到清晰成像的小孔半径应满足d\approx2\sqrt{f \lambda},其中\lambda是波长。
小孔成像的优点是不管距离多远,只要能有足够的光线通过小孔,就能得到清晰的成像,不存在失焦变模糊的情况。但为了能够得到清晰的成像,小孔应尽可能的小,这样就导致小孔只能捕获少量的光线,因此为了获取足够量度的图像,需要较长的曝光时间,这在计算机视觉应用领域是几乎无法接受的,那么接下来起到汇聚光线作用的镜头就出场了。
凸透镜,由于其具有汇聚光线的特性,也称为聚光镜。可以将镜头简单的理解为包含单个或多个不同类型凸透镜的组件。关于凸透镜的物理特性,最需要记住的两条就是:
根据这两个特性,当物距与透镜的距离不同时,在像平面成像的大小各有不同,由此衍生出了各种不同的用途,如下图所示(想详细了解这个知识点的可以去查阅初二物理有关凸透镜的章节)。
我们把Camera这个场景单独拎出来看,由于镜头的焦距较小,在实际应用场景中物距常常满足u2f,此时相距满足公式fv2f,物体在像平面上呈倒立、缩小的实像;根据相似三角形,可以得出物距、相距、焦距之间的关系满足如下公式。
关于镜头还有一个参数需要介绍,那就是光圈大小(Aperture),其反映了镜头的直径,公式如下:D=\frac{f}{N},其中N被称为f-Number。举个例子:一个50mm焦距、光圈为f/1.8的镜头,当光圈位于全开状态的时候(大多数时候光圈都是可以调整大小的),代表着其光圈大小D=50/1.8=27.8mm。
现在我们了解了镜头的光圈和焦距的概念,接下来就到了重头戏,那就是镜头的对焦/失焦。镜头虽然可以收集更多的光线,但也带来了一个缺点,那就是在场景中只存在一个完美聚焦平面,在这个平面上的所有点都将完美的聚焦到像平面上,即可以清晰成像,此时聚焦平面到镜头的距离为o(这也就是我们常说的工作距离)。
假设现在有一个距离为oo的平面,此时由于这个平面距离镜头较完美聚焦平面更近,这个平面上的点将聚焦到像平面的后方,意味着镜头在这个平面接受到的光线将不会在像平面上聚焦为一点,而是会在像平面上呈现为一个圆盘区域,称这个区域为弥散圆(Blur circle),其直径记为b,我们可以通过相似三角形得出弥散圆的直径b与光圈大小D成正比。
由此就有了景深Depth of Field(DoF)的概念,即物体在距离镜头的一定范围内(满足bpixel\_size),都可以在像平面上清晰成像,这里的pixel_size指的是相机CCD/CMOS传感器一个感光单元的实际尺寸(单位通常为um)。
我们还是通过理想情况下的镜头模型看看景深到底是怎么一回事。我们可以找到距离镜头最近的o_1和距离最远的o_2(具体计算过程略去,可以去参考里给出的哥大课程链接看详细步骤),他们在像平面上形成的弥散圆直径b刚好是pixel\_size,这代表当物体距离镜头位于o_1到o_2两点之间时,满足bpixel\_size,此时物体能够在像平面清晰成像,景深DoF即为o_1到o_2之间的距离,推导后的计算结果如下,其中c代表pixel_size。
从该公式可以看出,当f-number较小时,镜头的光圈较大,可以使得相机获取更量的图像,并减少相机的曝光时间,但是会使得相机具有较小的景深;当f-number较大时,镜头的光圈较小,虽然会造成图像变暗以及增加曝光时间,但是会使得相机具有较大的景深。
一般的工业镜头都具有DoF,适合被测物距离镜头变化不大的使用场景。但是在自动驾驶中,相机的感知距离从5m到200m不等,变化幅度较大,因此可以通过设计镜头,实现超景深距离(Hyperfocal Distance),此时意味着当物距大于超景深距离h时,物体都能清晰的成像。如何做到这一点呢?只需要使得来自无限远处的光线经过镜头后在成像平面上形成的弥散圆直径bpixel\_size即可,此时超景深距离的计算公式如下。
视场View of field (VOF) 代表相机可以成像的最大区域,它与三个参数有关——图像传感器的尺寸、焦距和物距。下图展示了在镜头焦距相同的情况下,传感器的尺寸越大,相机能够成像的视场就越大。
传感器的尺寸由传感器上的像素数量和像元大小决定。不同大小的像元用于不同的应用,较大的像元可以提升对弱光的感受能力,较小的像元对于物体的细节可以有更丰富的成像。
镜头的焦距刚刚我们已经仔细讲过了,需要注意一点的是,较短的焦距更强烈地会聚光线(即以更锐利的角度)聚焦被成像的对象。相比之下,较长的焦距会聚光线的强度较低(即以较浅的角度)聚焦图像,这意味着不同的焦距会影响镜头可以捕捉到的光的角度,由此就引出了一个概念——视场角 Angular view of field (AFOV)。
视场角的定义为:当被拍摄物体占满整个图像时,穿过镜头的物体的竖直/水平边缘发出的光线所构成的夹角。当传感器尺寸固定时,改变焦距将改变 AFOV,从而改变 FOV,如下图所示。
对于一个简单的薄凸透镜,焦距f是从透镜后表面到由“放置在透镜前面无限远的物体”形成的图像平面的距离。根据相似三角形,我们可以得出视场角由焦距和传感器尺寸共同决定,如下式所示,其中H为传感器的高度(竖直像素数量×像元大小)、W为传感器的宽度(水平像素数量×像元大小)。
当工作距离WD发生改变的时候,虽然视场角AFOV是恒定的,但是根据相似三角形,FOV也会随之改变,视场FOV的计算公式如下所示。
我们通过下面一张图来直观的感受一下视场角AFOV、工作距离WD和视场FOV的关系,当工作距离越近时,由于视场角固定,视场会越来越小,导致在三维空间中视场呈现为一个类似锥体的形状,这样也就导致了盲区的存在,即距离相机越近,盲区越大。
理解了上述视场角、视场和工作距离的关系,我们再来计算一个更进阶、实用一点的内容,假如有这么一个使用场景,已知竖直AFOV记为\alpha,水平AFOV即为\beta,相机的竖直分辨率记为H_C,水平分辨率即为W_C,此时在D米远处有一个高h_o米、宽w_o米的物体,如何计算这个高h_o米、宽w_o米的物体在图像上占据多少个像素h\times w呢?
其实只要理解了上面讲的内容,这里不难计算,只需要知道此时在工作距离为D米时FOV为多少,根据这个物体在实际视场FOV之中的占比即可计算出这个物体在图像中的像素占比,最后分别乘上竖直分辨率和水平分辨率即可,下面来分别计算h与w。
举个自动驾驶中常见的例子,假设一个红绿灯的长为1.5m、宽为0.5m,相机的分辨率为680×480,镜头的水平AFOV为120°,为使其在图像中占据超过10个像素宽,通过上述公式需要满足红绿灯与镜头之间的距离小于9.8m。
在自动驾驶的镜头选型中,通常是先选择合适分辨率的相机,确定传感器尺寸,再确认物体的检测距离,以及该物体在图像中至少需要占据的像素数量,最后通过上述公式反推视场角,实现对镜头的选型。
至此关于如何获取清晰的成像以及如何对镜头选型就都讲清楚了,此外关于镜头还有特别有意思的一点,如下图所示,左边两幅图是正常的镜头上没有遮挡的相机以及成像图片,右边两幅图是在同样的相机上对镜头添加了部分遮挡以及成像图片,通过对比可以看出虽然镜头上有部分遮挡,但是成像图片没有发生明显的变化。这是由于当物体位于聚焦平面上时,无论光圈的大小、无论镜头什么部分被遮挡住了, 只要有光线射入镜头,这些光线都会在像平面聚焦,形成一张清晰的图像。这种特性带来的好处显而易见,当在实际应用场景中时,只要能有足够的光线射入镜头,并不会由于镜头上沾有灰尘、水滴、油渍等多余物而使得成像效果变差。
前面的内容一直在讲如何设计镜头,使得被检测物体如何能够清晰地、并以适当大小地在像平面上成像。当光线在像平面上汇聚时,需要Image sensor将光信号转换为电信号。下图是一个采用CMOS图像传感器进行成像的过程,首先通过镜头将光线汇聚到图像传感器上,将光信号转换为电信号,通过后续一系列的数字信号处理,将电信号转换为我们想要的图像信息。
刚刚提到的CMOS传感器是图像传感器的一种,在CMOS芯片上,每一个像素都对应一个独立的CMOS电路,其作用是检测光信号的强度,并将其转换为电信号,如下图所示。
其实可以把每一个独立的CMOS电路(像元)看作是一个水桶,像元的大小不同意味着其对光线的容纳能力也不同,更大尺寸的像元理论上可以接受更多的光线。
普通的CMOS传感器由于只能检测光线的强度,无法获取光线的颜色,因此只能获取灰度图像,如下图左所示。但可以在CMOS传感器上加一层颜色过滤阵列Color Filter Array,让相应颜色(如红、绿、蓝)的光线通过过滤层到达CMOS电路,从而在单个位置可以检测红/绿/蓝色光线的强度,通过在相邻域对红、绿、蓝三色进行插值,最终得到彩色图像,如下图右所示。
其中B_{max}为Sensor可以获取到的光线强度的上限,即对应着相机可以感受到的最亮光线;B_{min}为Sensor可以获取到的光线强度的下限,这个下限当然是越接近于零越好,但由于Sensor存在一定的噪声,当光线强度越来越弱时,噪声有可能会盖过实际光线的强。