在这里,我们专注于数码摄像机。由于相机为视觉和机器学习分析提供图像,因此了解相机如何收集和分发这些图像非常重要。
数码摄像机无处不在。数十亿人拥有带有内置摄像头的智能手机或平板电脑,数亿人的计算机上安装了网络摄像头。
数字视频的历史很短。第一个半导体图像传感器 (CCD) 于 1969 年在贝尔实验室发明。第二种类型,称为 CMOS 传感器,于 1993 年在加利福尼亚州帕萨迪纳街对面的喷气推进实验室发明。在 1990 年代初期,出现了一种技术融合,允许将数字视频流传输到消费级电脑。第一个流行的消费类网络摄像头 Connectix QuickCam 于 1994 年推出,售价 100 美元,320×240分辨率,16位灰度。当时真是太神奇了。
CMOS 技术现在用于消费类数字视频产品中的绝大多数传感器。随着时间的推移,传感器的分辨率得到了提高,同时增加了无数的功能。
即使历史很短,也有很多缩写词和首字母缩略词可以导航以了解人们在给定上下文中谈论的内容。如果您不知道正确的名称,很难谈论某事。
在这里,我们将专注于连接到 Jetson 的摄像头,尽管这些摄像头可以连接到更小的机器上。举个例子,这是一台 4K 摄像机:
用于 Jetson Nano 和 Xavier NX 的 Arducam IMX477
您可以将相机视为几个不同的部分。首先是图像传感器,它收集光线并将其数字化。第二部分是光学元件,它有助于将光线聚焦在传感器上并提供快门。然后是与传感器接口的电子电路,收集图像并传输它们。
目前主要使用两种类型的图像传感器。第一个是CMOS,另一个是CCD。CMOS 在大多数低成本应用中占主导地位。原始传感器提供单色(灰度)图像。
这是图像传感器索尼 IMX477 的图像:
有多种方法可以从这些传感器获取彩色图像。到目前为止,最常见的方法是使用拜耳滤镜马赛克,这是一种彩色滤镜阵列。马赛克在图像传感器的像素阵列上布置滤色器。滤光片图案为一半绿色、四分之一红色和四分之一蓝色。人眼对绿色最敏感,这就是为什么在过滤模式中有一个额外的绿色。
每个滤波器将特定波长的光子调谐到传感器像素。例如,蓝色滤光片使传感器像素对蓝光敏感。像素根据它看到的光子数量发出信号,在这种情况下,有多少蓝光光子数量。
使用这种方法的滤色器阵列还有其他变体。拜耳方法已获得专利,因此有些人试图解决这个问题。替代品是CYGM(Cyan、Yellow、Green 、Magenta)和RGBE(Red、 Green 、Blue、Emerald)。
在拜耳过滤器中,颜色可以以不同的图案排列。要获得所有组合,您可能会看到BGGR(B lue、Green、Green、R ed)、RGBG、GRBG和RGGB。用去马赛克算法对彩色图像进行插值。
拜耳滤镜相机的原始输出称为拜耳模式图像。请记住,每个像素都经过过滤以仅记录三种颜色中的一种。去马赛克算法检查每个像素及其周围的邻居,以估计该像素的完整 RGB颜色。这就是为什么了解滤镜中颜色的排列很重要的原因。
这些算法可以简单也可以复杂,取决于相机上的计算元素。可以想象,这是一个很大的问题。这些算法对它们正在捕获的场景进行权衡和假设,并考虑计算颜色值所允许的时间。根据所选择的场景和算法,最终彩色图像中可能存在伪影。
当您尝试实时估计每个像素的颜色时,时间是一个重要因素。假设您正在以每秒 30 帧的速度流式传输数据。这意味着您在帧之间有大约 33 毫秒。图像最好在下一张到来之前完成!如果每帧有几百万像素要进行去马赛克,这意味着您的工作非常繁重!准确的颜色估计可能是速度的敌人,具体取决于所使用的算法。
传感器模块仅包含图像传感器。Raspberry Pi V2 摄像头 IMX219和高质量版本 IMX477就是在 Jetson Nano 和 Xavier NX 上工作的两个这样的模块。这些传感器通过相机串行接口 (CSI)总线传输原始拜耳模式图像**。然后, Jetson使用板载图像信号**处理器( ISP ) 对图像执行各种任务。Tegra 可配置 ISP 硬件处理去马赛克、自动白平衡、缩小等。查看图像处理和管理以获得扩展概述。
另一方面,相机模块包括模块上的智能设备来执行这些任务。其中一些模块具有 CSI 接口,但通常由具有备用接口(如 USB)的相机使用。虽然其中一些模块传输原始拜耳模式图像,但您最可能遇到的用例是封装视频流、原始彩色图像或压缩图像。
拜耳滤光片对红外光是透明的。许多图像传感器可以检测近红外波长。大多数彩色相机在镜头上添加了一个红外滤光片,以帮助更好地估计颜色。
但是,有时查看由红外光照亮的场景很有用!安全“夜视”系统通常有一个红外发射器和一个没有红外滤光片的摄像头图像传感器。这使相机可以“在黑暗中看到”。一个例子是Raspberry Pi NoIR 摄像头模块 V2。这款 Jetson 兼容传感器与前面提到的 V2 IMX219 RPi 相机相同,但移除了红外镜头。
数码摄像机的光学器件由镜头和快门组成。大多数便宜的相机使用塑料镜头,并提供有限的手动对焦控制。还有一些固定焦距镜头没有调节功能。其他相机有玻璃镜头,有些有可更换镜头。
您将听到按不同说法分类的镜片。通常,镜头由其焦距指定。镜头的焦距可以是固定距离。如果焦距可变,则称为变焦镜头。
另一种分类是光圈,用f表示,例如 f2.8。镜头可以具有固定光圈或可变光圈。光圈的大小决定了有多少光可以照射到传感器上。光圈越大,通过镜头的光线就越多。光圈越大,f 值越小。
镜头视野**(** FoV )也很重要。通常,这以度数表示,在水平和垂直维度上,或对角线,透镜的中心是两个角度的中点。
第四类是具有可更换镜头的相机类型。可更换镜头在拍摄图像时提供了更大的灵活性。在 Jetson 世界中,您可能听说过 M12 安装座。它使用 0.5mm 螺距的公制 M12 螺纹。这也称为 S-mount。另一个常用术语是 C 或 CS 镜头卡口。可以直接连接到传感器的 PCB。Raspberry Pi Hi Def 相机使用这种类型的支架。
相机的快门可以是机械的或电子的。快门使传感器曝光一段预定的时间。快门使用两种主要的曝光方法。第一个是滚动快门。滚动快门以水平或垂直方式逐步扫描传感器。第二个是全局快门,它可以同时曝光整个传感器。滚动快门是最常见的,因为它在 CMOS 设备上实现的成本往往较低,尽管对于场景中快速移动的对象可能存在图像伪影,例如拖尾。
对于没有任何快速移动物体的场景,滚动快门可能是一个不错的选择。但是,对于其他应用程序,这可能是不可接受的。例如,如果图像被涂抹,本来就是一个摇摇欲坠的平台的移动机器人可能无法生成足够好的可视化图像。因此全局快门更合适。
数码摄像机的电子电路控制图像采集、插值和图像输出。一些相机在传感器芯片上有这个电路(许多手机相机这样做是为了节省空间),其他相机有外部电路来处理任务。
另一方面,相机传感器只需与直接处理数据采集的主机接口交互。Jetson 有多个 Tegra ISP 来处理这项任务。
数据压缩是一项重要任务。视频数据流可能非常大。大多数便宜的网络摄像头都有一个内置的 ASIC 来进行图像插值和视频压缩。
市场上较新的“智能”相机可能有额外的电路来处理视频数据流。这包括更复杂的任务,例如计算机视觉或深度图像处理。这些专业相机可以在相机中组合多个传感器。
例如,RGBD相机(Red、Green、Blue、Depth)可能有两个传感器用于计算深度,另一个传感器用于抓取彩色图像。其中一些相机使用红外照明器在光线不足的情况下帮助深度传感器。
电子电路将视频数据从相机传输到主机设备。这可以通过几个物理路径之一实现。在 Jetson 上,通过MIPI相机串行接口**(** MIPI CSI )实现或通过熟悉的 USB实现。第三方在 Jetson 载板上提供GMSL (千兆位多媒体串行链路墨水)连接器。GMSL 通过使用缓冲区对视频数据流进行序列化/反序列化,允许比典型的 CSI 带状电缆更长的传输距离。例如,您可能会在机器人或汽车中看到这些类型的连接。
GMSL 相机连接器
这就是我们开始感兴趣的地方。数据通过网络传输,我们如何解释它?
我们谈到了创建全彩色图像。通常我们将这些视为红色、绿色和蓝色( RGB ) 三个通道。每个通道中的位数决定了可以显示多少“真实”颜色。每个通道 8 位很常见,您可能会看到 10 位。在专业视频中,您会看到更高的数字。位越多,您可以表示的颜色就越多。
假设它是每个颜色通道 8 位,那么每个像素是 24 位。如果图像为 1920×1080 像素,则为 2,073,600 像素 X 3 字节 = 12,441,600 字节。如果每秒有 30 帧,则每秒获得 373,248,000 字节。当然,如果您使用的是 4K 视频,那么您将获得该数量的 4 倍。
我相信你们现在已经指出了,我们取了一个拜耳模式图像并展开它。当然,我们可以将图像本身与标识符一起传输,指示传感器上的颜色模式!我们当然可以!然而,这迫使接收器进行颜色转换,这可能不是一个最佳解决方案。
有许多方法可以减少从视频流传输的图像数据量。通常这是通过以下方式完成的:
我们不会在这里深入探讨这个主题。整个行业都致力于这些主题。但是,如果您过去使用过相机,您可能已经熟悉这里的一些主题名称。
在色彩空间转换中,YUV 编码将 RGB 信号转换为范围从黑色到白色的强度分量 (Y) 以及编码颜色的其他两个分量(U 和 V)。这可以是无损或有损方法。无损意味着我们可以将图像转换回原始而没有任何损失,有损意味着我们会丢失一些数据。
然后是图像压缩。您可能熟悉使用无损位图压缩的 PNG 文件。JPEG 文件是一种基于离散余弦变换的有损压缩方法。一般来说,使用无损压缩可以将尺寸减小约 4 倍,而通过有损压缩可以做得更高。当然,有损压缩图像的质量可能会受到影响。
时间压缩,通常将一帧设置为关键帧,并从那里测量后续帧与它的差异。这样,您只需要发送一个关键帧,然后发送差异。新的关键帧通常在给定时间间隔后生成,或者在场景更改时生成。对于大多数静态场景,尺寸节省可能非常显着。
此任务有多种算法,称为编码。这些编码器的名称包括 H.264、H.265、VP8、VP9 和 MJPEG。接收端的匹配解码器重建视频。
四字符标识符 ( fourcc ) 标识视频数据流的编码方式。这是对旧 Macintosh 时代的回归,QuickTime 建立在 Apple 文件管理器的理念之上,即定义具有四个字符的容器。这四个字符方便地放入一个 32 位字中。音频也使用这种方法。
一些fourcc
代码很容易猜到,例如H264
和H265
。MJPG
表示每个图像都是 JPEG 编码的。其他的就不那么容易了,YUYV
相当常见,它是一种压缩格式,具有 ½ 水平色度分辨率,也称为 YUV 4:2:2
。这种混淆部分是因为制造商可以注册这些格式名称。此外,多年来,相同的代码可能在不同的平台上有别名。例如,在 Windows 平台上,YUYV
被称为YUY2
。
常见,它是一种压缩格式,具有 ½ 水平色度分辨率,也称为 YUV 4:2:2
。这种混淆部分是因为制造商可以注册这些格式名称。此外,多年来,相同的代码可能在不同的平台上有别名。例如,在 Windows 平台上,YUYV
被称为YUY2
。
https://jetsonhacks.com/2022/01/13/in-depth-cameras/