嵌入式摄像头深度解析
这里写目录标题
- 一、结构介绍
- 1. 光学镜头(Lens)
- 2. 音圈马达(VCM)
- 3. 滤光片
- 4. 传感器(Sensor)
- 5. 图像信号处理(ISP)
- 6. 数字信号处理器(DSP)
- 二、摄像头接口与数据类型
- 1. 摄像头接口
- 2. 数据格式
- 2.1 未压缩原始像素格式
- 2.1.1 RAW Bayer格式
- 2.1.2 RGB格式
- RGB555(16位/像素)
- RGB565(16位/像素)
- RGB888(24位/像素)
- RGB565与RGB888的格式互转
- RGBP888(平面格式)
- 2.1.3 YUV/YCbCr格式
- YUV
- YCbCr
- 2.1.4 灰度格式(GRAYSCALE)
- 2.1.5 HSV格式
- RGB、YUV与HSV的比较
- 场景选型总结
- 2.2 压缩编码格式
- 2.2.1 静态图像压缩编码
- 2.2.1.1 JPEG
- 2.2.1.2 JPEG-LS
- 2.2.1.3 PNG
- 2.2.2 动态视频压缩编码
- 2.2.2.1 H.264/AVC
- 2.2.2.2 H.265/HEVC
- 2.2.2.3 H.266/VVC
- 2.2.2.4 MPEG-4 Part2
- 2.2.2.5 VP9
- 2.2.2.6 总结
- 三、参考
一、结构介绍
摄像头模组,全称Camera Compact Module,简写为CCM。其工作流程为:
第一步:光学采集与聚焦(镜头+音圈马达)
- 镜头聚光:外界光线通过多组透镜组成的镜头系统,聚焦到图像传感器表面。镜头参数(如焦距、光圈)决定视野范围(FOV)和进光量。
- 音圈马达(VCM)自动对焦:通过电磁力精确移动镜头位置,实时调整焦距。控制逻辑由DSP或ISP根据图像对比度或相位差反馈,动态计算最佳焦点位置并驱动VCM。
第二步:光谱过滤(滤光片)
滤光片位于镜头与传感器之间,核心功能包括:
- 红外截止滤光片(IR Filter):阻挡红外光,避免色彩失真(如绿色偏红)。
- 蓝玻璃滤光片(BG Filter):吸收紫外光及杂散光,提升色彩还原度。
第三步:光电转换(传感器)
传感器CMOS或CCD将过滤后的光信号转换为电信号,输出RAW数据。
第四步:原始图像处理(图像信号处理器 - ISP)
ISP对RAW数据执行去噪、白平衡调整、色彩校正等初步处理,将其转换为数字图像信号。
第五步:高级处理与压缩(数字信号处理器 - DSP)
DSP承接ISP输出的数字图像信号,执行比如图像增强(对比度调整、HDR合成)、特征提取(提取物体边缘特征、人脸识别)、视频编码(JPEG静态图像压缩、H.264/H.265视频流压缩)等高阶任务。
第五步:数据输出与系统控制
- 接口传输:处理后的数据通过硬件接口输出:
- 实时显示:通过MIPI CSI-2/LVDS传输至屏幕。
- 存储/网络:经USB/GigE发送到存储设备或云端。
- 动态反馈控制(3A算法):
- 自动曝光(AE):根据亮度统计调整传感器积分时间。
- 自动对焦(AF):DSP计算图像清晰度反馈至VCM。
- 自动白平衡(AWB):ISP实时更新色温参数。
1. 光学镜头(Lens)
光学镜头(Lens)用于聚焦光线,使其能够准确地落在图像传感器上,从而形成清晰的图像。镜头的关键参数包括焦距、光圈和视场角等。
- 焦距(Focal Length) :指镜头的光学中心到成像平面的距离,通常以毫米为单位。焦距决定了镜头的视角和放大倍率,短焦距镜头提供较宽的视角,而长焦距镜头则提供较窄的视角和更高的放大倍率。
-
视场角(Field of View) :视场角是镜头能够捕捉到的场景范围,通常以度数表示。视场角与焦距密切相关,焦距越短,视场角越大,反之亦然。
-
镜头结构 :包括镜片的数量和排列方式,影响成像质量和镜头的体积。
镜头通常由多片透镜组成,根据材质可分为塑胶透镜(通常称为树脂镜片)和玻璃透镜。玻璃镜片通常比树脂镜片更昂贵,因为其在透光率和感光性等光学性能上表现更优异,尤其是在经过镀膜处理后。摄像头中常见的镜头结构包括1P、2P、1G1P、1G2P、2G2P、2G3P、4G、5G等,其中“P”代表塑胶透镜,“G”代表玻璃透镜。一般来说,透镜片数越多,镜头的制造成本越高,但成像效果也会更好。这是因为多片透镜可以更有效地校正光学畸变,提高图像的细节和均匀性,并提供更丰富的光线控制。然而,增加透镜片数也可能导致镜头长度增加和光通量减少,这需要在设计中进行权衡。
2. 音圈马达(VCM)
音圈马达(Voice Coil Motor, VCM)是一种马达,因其工作原理与扬声器相似而得名。VCM具有高频响和高精度的特点,其主要原理是在一个永久磁场中,通过调节线圈中的直流电流来控制弹簧片的拉伸位置,从而实现上下运动。VCM的设计使其能够在极小的空间内实现高精度的线性运动,这对于现代智能手机和数码相机等设备的紧凑设计尤为重要。工作过程中通过电流精确调节镜头前后移动的位置来实现自动对焦(Auto Focus, AF) 。此外,VCM的无摩擦运动特性减少了机械磨损,提高了设备的耐用性和使用寿命。
自动对焦的原理是:摄像头模组在接收到自动对焦指令后,镜头从初始位置开始单向移动。每移动一段距离,图像传感器会将当前图像发送至图像信号处理器(DSP)。处理器通过计算分析每张图像的清晰度。镜头移动到最大位移后,图像信号处理器(DSP)综合分析所有图像的清晰度,生成清晰度参数曲线。然后,从曲线中找到对应最佳清晰度的位置,并将该信息发送给驱动芯片。驱动芯片随后控制音圈马达将镜头移动到最佳位置,完成自动对焦。
图像清晰度评价函数 依据提取的图像特征值的不同可以分为四大类:基于空域方法,基于变换域方法,基于信息学方法,基于统计学方法,详细查看参考帖子【6】。主要的思想是:
- 图像模糊这一特点在空域中表现为相邻像素间的特征值如灰度、纹理、颜色等在离焦时大小发生变化,因此可以采用图像的梯度信息作为图像清晰度评价依据。
- 图像模糊时损失大量的高频信息,因此可以依据高频信息的多少来判断离焦程度。对图像进行变换域处理之后,提取其中的高频分量作为图像清晰度函数。
- 不同清晰度的图像就会形成不同的光能量分布,图像越模糊,相邻像素之间的影响就越大,导致图像的光能量分布更趋于平均分布。
- 清晰的图像具有更多的细节信息,在灰度上的表现就是灰度分布的直方图集中度低,灰度范围大,反过来说,图像越模糊,灰度越向均值附近集中,灰度范围逐渐变小。
3. 滤光片
滤光片分为红外滤光片(IR Filter)和蓝绿色滤光片(BG Filter),红外滤光片负责过滤红外光,蓝绿色滤光片负责校正光谱响应,以提高成像质量和色彩准确性。
- 红外滤光片(IR Filter) :
- 作用:红外滤光片主要用于阻挡或过滤掉红外光(通常是700纳米以上的光),以确保只有可见光通过。因为人眼只能看到可见光,主要是使成像更贴近人眼所见的效果。
- 工作原理:红外滤光片通常由特殊的玻璃或涂层材料制成,这些材料能够吸收或反射红外光,同时允许可见光通过。常见的红外滤光片包括吸收型和反射型两种。吸收型滤光片通过材料本身吸收红外光,而反射型滤光片则通过多层干涉涂层反射红外光。
- 蓝绿色滤光片(BG Filter) :
- 作用:BG滤光片通常用于校正光谱响应,特别是在数码相机中,用于调整传感器对不同波长光的敏感度,以实现更准确的色彩还原。BG滤光片可以帮助平衡蓝光和绿光的比例,改善图像的色彩表现。
- 工作原理:BG滤光片通过选择性地透过特定波长的光来调整光谱响应。它们通常由多层光学涂层组成,这些涂层通过干涉效应来增强或抑制特定波长的光。通过精确设计涂层的厚度和材料,BG滤光片可以实现对蓝光和绿光的优化透过。
4. 传感器(Sensor)
sensor是摄像头的核心组件,负责将通过镜头(Lens)进入的光信号转换为电信号,并通过内部的模数转换器(AD)将其转化为数字信号。
典型的图像传感器由大量独立的光电传感器组成,例如,一个30万像素的图像传感器包含30万个光电传感器。每个传感器能够捕捉光的强度,但无法直接感知光的波长(颜色)。为了解决这一问题,图像传感器通常覆盖有滤色器阵列 或滤色器马赛克 。这种覆盖层由许多微小的滤色器构成,每种滤色器只允许特定颜色的光通过,所以每个像素点/光电传感器只能感知红(R)、绿(G)、蓝(B)三种颜色中的一种。
如果希望每个像素点都能输出不同颜色的光强度,最直接的方法是为每个光电传感器配备三种不同颜色的滤镜,以获取红、绿、蓝三种颜色。然而,这种方法成本过高。因此,通常采用拜尔滤色器阵列 。拜尔滤色器阵列以两个绿色、一个红色和一个蓝色的模式排列(因为人眼对绿色更为敏感,这样的设计是为了更好地匹配眼睛所看到的内容),使每个光电传感器只需捕获一种颜色的强度。然后,通过相邻像素点的数值进行插值计算,得到每个像素点的三种颜色数值,这一过程称为去拜尔化处理或者解马赛克。
在嵌入式系统中,CMOS(互补金属氧化物半导体) 和CCD(电荷耦合器件) 是两种常见的图像传感器类型。CMOS传感器因其低功耗、低成本、高集成度以及支持高帧率和高分辨率的特点,广泛应用于消费类电子产品。其工作原理是通过像素阵列中的光电二极管将光信号转换为电荷,再经信号处理电路转为数字图像。
CCD传感器则通过电荷耦合器件逐行传输电荷,通常提供更高的图像质量和动态范围,但功耗和成本较高。CCD传感器多用于专业摄影、高端图像应用,如天文学和显微镜等领域。总体而言,CMOS适合大多数消费类和嵌入式应用,而CCD则用于需要高图像质量的专业场合。
传感器的主要参数有:
-
像素(pixel) :像素越多,代表着它能够感测到更多的物体细节,从而图像就越清晰,像素越高,意味着成像效果越清晰。分辨率的乘积就是像素值。
常见的分辨率有:
名称 分辨率 名称 分辨率 名称 分辨率 VGA 640*480 SVGA 800*600 XGA 1024*768 HD / 720p 1280*720 Full HD / 1080p 1920*1080 2K 2048*1080 4K 3840*2160 8K 7680*4320 -
靶面尺寸(sensor size) :靶面尺寸是指图像传感器感光部分的大小,通常用英寸来表示。类似于电视机的尺寸表示方法,这个数据通常指的是图像传感器的对角线长度。常见的靶面尺寸有1/3英寸等。靶面越大,意味着传感器能够接收到的光线越多,从而提高图像质量;而靶面越小,则更容易获得较大的景深效果。
-
感光度(ISO Sensitivity) :指通过CCD或CMOS传感器及相关电子电路感应入射光线强度的能力。感光度越高,传感器对光线的敏感度越强,从而允许使用更快的快门速度。这在拍摄高速运动的物体或进行夜间监控时尤为重要。
-
帧率(fps) :指图像传感器每秒钟更新画面的次数,较高的帧率能够提供更流畅和逼真的视觉效果。
-
信噪比(SNR) :是信号电压与噪声电压的比值,通常以dB为单位表示。摄像机提供的信噪比值通常是在AGC(自动增益控制)关闭时测得的,因为AGC开启时会放大小信号,同时也会提高噪声电平。信噪比的典型值为45至55dB。若信噪比为50dB,图像会有少量噪声,但整体质量良好;若为60dB,图像质量优异,几乎无噪声。信噪比越高,噪声控制越好,图像中的噪点越少,画面显得更干净,尤其在夜视条件下。
5. 图像信号处理(ISP)
图像信号处理(ISP,Image Signal Processing)是指对图像传感器捕获的原始数据进行处理,以生成高质量的图像。ISP的主要功能包括:
- 去噪 :减少图像中的噪声,提高图像的清晰度。
- 自动白平衡(AWB) :调整图像的色温,使白色物体在不同光照条件下保持自然。
- 色彩校正 :调整图像的色彩,使其更接近真实场景。
- 伽马校正 :调整图像的亮度和对比度,以适应人眼的视觉特性。
- 锐化 :增强图像的边缘细节,提高图像的清晰度。
- 去马赛克(去拜尔) :将传感器上的拜耳滤波器阵列数据转换为完整的RGB图像。
- 自动曝光(AEC) :根据场景亮度自动调整曝光参数,以获得最佳图像亮度。
- 自动对焦(AP) :调整镜头焦距,使图像中的主体清晰。
- 色彩空间转换 :执行色彩空间的转换,比如将RGB格式的图像数据转换为YUV格式,或者进行不同色彩空间之间的相互转换,以适应不同显示设备和信号传输需求。
这些功能共同作用,确保从传感器获取的图像数据经过处理后能够呈现出高质量的视觉效果。
6. 数字信号处理器(DSP)
DSP(数字信号处理器)功能广泛,涵盖多种数字信号处理任务。它能够进行图像处理,如拍照和回显(JPEG编解码),以及视频处理,包括录像和回放(视频编解码)。此外,DSP还支持H.264视频编解码和其他复杂的信号处理操作,广泛应用于通信、音频处理、图像处理和实时数据分析等领域。现代DSP常常集成在系统级芯片(SoC)中,与其他处理单元(如CPU、GPU)协同工作,以实现更复杂的功能。
二、摄像头接口与数据类型
1. 摄像头接口
嵌入式摄像头常见的接口主要包括SPI、DVP、MIPI CSI、USB等。每种接口都有其特定的应用场景、优点和缺点。
- SPI(Serial Peripheral Interface)接口 :用于一些低速率的摄像头模块。优点是简单的四线接口,速度比I2C快。缺点是不适合高分辨率视频传输,通常用于配置和控制。
- DVP(Digital Video Port)接口 :常用于低成本、低功耗的嵌入式系统中,如简单的图像采集设备和一些入门级的嵌入式开发板。优点是简单易用,适合初学者和简单应用;成本低,适合预算有限的项目。缺点是带宽有限,难以支持高分辨率和高帧率的视频传输;缺乏标准化,可能需要针对不同的传感器进行定制开发。
同一个型号的摄像头SPI接口和DVP接口设计成相同的引脚排列和布局,外观看起来一致,这种方式通常是为了简化制作工艺和降低生产成本。这样可以在生产过程中使用相同的PCB设计和制造流程,减少设计复杂性和错误的可能性。要确定是SPI接口还是DVP接口需要查看规格说明书的接口类型和引脚定义。
- MIPI CSI(Camera Serial Interface)接口 :广泛用于智能手机、平板电脑和其他需要高分辨率图像传输的设备。优点是高带宽,支持高分辨率和高帧率的视频传输;低功耗,适合电池供电的设备;标准化程度高,兼容性好。缺点是实现复杂度较高,需要专门的硬件支持;成本相对较高。
- USB接口 :常用于PC摄像头、外接摄像头模块和一些开发板。优点是即插即用,使用方便;支持热插拔,灵活性高;带宽较高,支持高清视频传输。缺点是功耗较高,不适合所有嵌入式应用;需要USB控制器,增加了系统复杂性。
2. 数据格式
在嵌入式摄像头系统中,常见的数据格式主要分为未压缩原始格式和压缩编码格式两大类。不同格式在存储效率、处理复杂度、传输带宽及适用场景上差异显著,以下是详细分类及特性对比:
2.1 未压缩原始像素格式
此类格式直接输出传感器采集的原始数据,处理延迟低但数据量大,需结合图像信号处理器(ISP)进行后续处理。
2.1.1 RAW Bayer格式
-
数据结构:每个像素仅包含单色信息(R/G/B),按拜尔阵列排列(如RGGB、BGGR),位深通常为8/10/12位(RAW8/RAW10/RAW12)。
像素中的位深(bit depth) 是指每个像素能够表示的颜色信息的精细程度。位深越高,能够表示的颜色种类就越多,从而使图像的色彩过渡更加平滑和细腻。通常,位深是以二进制位数来表示的。例如,8位深的图像每个像素可以表示28(即256)种颜色,而24位深的图像每个像素可以表示224(即1677万多)种颜色。位深的增加可以显著提高图像的色彩表现能力,但同时也会增加图像文件的大小。
-
特点:
- 优点:保留传感器原始信息,便于后期ISP处理(如去马赛克、白平衡)。
- 缺点:数据量大,需ISP插值计算缺失颜色值(例如:G感光点需计算R、B值)。
-
应用场景:工业检测、医疗成像等需高精度色彩还原的领域。
2.1.2 RGB格式
RGB555(16位/像素)
- 数据结构:R(5位)、G(5位)、B(5位),共2字节/像素,剩下的1位通常未使用或用于其他目的(如透明度或保留位)。这种格式有时也被称为15位颜色格式,因为实际用于颜色的位数是15位。
随着硬件性能的提升和对高质量图像需求的增加,RGB555在现代应用中逐渐被淘汰了。
从一个16位的RGB555格式的像素值wPixel
中提取红色R
、绿色G
和蓝色B
的分量
#define RGB555_MASK_RED 0x7C00
:这个宏定义了一个掩码,用于提取红色分量。0x7C00的二进制表示是0111 1100 0000 0000
,对应于RGB555格式中红色分量的5位。R = (wPixel & RGB555_MASK_RED) >> 10;
:使用掩码RGB555_MASK_RED
与像素值wPixel
进行按位与操作,提取出红色分量所在的位,然后右移10位,将其对齐到最低有效位。结果是红色分量的值,范围是0到31。#define RGB555_MASK_GREEN 0x03E0
:这个宏定义了一个掩码,用于提取绿色分量。0x03E0的二进制表示是0000 0011 1110 0000
,对应于RGB555格式中绿色分量的5位。G = (wPixel & RGB555_MASK_GREEN) >> 5;
:使用掩码RGB555_MASK_GREEN
与像素值wPixel
进行按位与操作,提取出绿色分量所在的位,然后右移5位。结果是绿色分量的值,范围是0到31。#define RGB555_MASK_BLUE 0x001F
:这个宏定义了一个掩码,用于提取蓝色分量。0x001F的二进制表示是0000 0000 0001 1111
,对应于RGB555格式中蓝色分量的5位。B = wPixel & RGB555_MASK_BLUE;
:使用掩码RGB555_MASK_BLUE
与像素值wPixel
进行按位与操作,直接得到蓝色分量的值,范围是0到31。
#define RGB555_MASK_RED 0x7C00
#define RGB555_MASK_GREEN 0x03E0
#define RGB555_MASK_BLUE 0x001Funsigned int wPixel; // 假设这是RGB555像素值unsigned char R = (wPixel & RGB555_MASK_RED) >> 10; // 取值范围0-31
unsigned char G = (wPixel & RGB555_MASK_GREEN) >> 5; // 取值范围0-31
unsigned char B = wPixel & RGB555_MASK_BLUE; // 取值范围0-31
RGB565(16位/像素)
R(5位)、G(6位)、B(5位),共2字节/像素,总颜色数可达65536种。上图中展示的是小端字节序,存储顺序(地址递增方向)为低字节->高字节,如果存储顺序为高字节->低字节则为大端字节序。字节序是由不同硬件架构决定的,x86/ARM通常是小端字节序,PowerPC通常是大端字节序。
- 优点:存储效率高,适合内存受限的嵌入式设备(如单片机驱动LCD屏)。
- 缺点:色彩精度低(仅65K色)。
- 提取RGB各分量的值(原理参考上方RGB555):
#define RGB565_MASK_RED 0xF800
#define RGB565_MASK_GREEN 0x07E0
#define RGB565_MASK_BLUE 0x001Funsigned int wPixel; // 假设这是RGB565像素值unsigned char R = (wPixel & RGB565_MASK_RED) >> 11; // 取值范围0-31
unsigned char G = (wPixel & RGB565_MASK_GREEN) >> 5; // 取值范围0-63
unsigned char B = wPixel & RGB565_MASK_BLUE; // 取值范围0-31
RGB888(24位/像素)
R/G/B各8位(256级),共3字节/像素,RGB888的存储顺序有常见的两种:RGB RGB…或BGR BGR…,具体是哪一个顺序取决于具体库或硬件。
- 优点:色彩还原准确(1677万色),适合高清显示。
- 缺点:数据量增大50%,传输带宽要求高。
- 提取RGB各分量的值(原理参考上方RGB555):
#define RGB888_MASK_RED 0xFF0000
#define RGB888_MASK_GREEN 0x00FF00
#define RGB888_MASK_BLUE 0x0000FFunsigned int wPixel; // 假设这是RGB888像素值unsigned char R = (wPixel & RGB888_MASK_RED) >> 16; // 取值范围0-255
unsigned char G = (wPixel & RGB888_MASK_GREEN) >> 8; // 取值范围0-255
unsigned char B = wPixel & RGB888_MASK_BLUE; // 取值范围0-255
RGB565与RGB888的格式互转
-
RGB888 -> RGB565(压缩)
红色:取高5位
(r & 0xF8)
,左移8位至BIT 15~11;绿色:取高6位
(g & 0xFC)
,左移3位至BIT 10~5;蓝色:取高5位
(b >> 3)
,占用BIT 4~0。// 输入:r/g/b ∈ [0,255] uint16_t RGB888ToRGB565(uint8_t r, uint8_t g, uint8_t b) {// 高位截取:R/B留高5位,G留高6位return ((r & 0xF8) << 8) | ((g & 0xFC) << 3) | (b >> 3); }// 宏定义版(适合频繁调用) #define RGB888_TO_RGB565(r, g, b) ((((r) & 0xF8) << 8) | (((g) & 0xFC) << 3) | ((b) >> 3))
-
RGB565-> RGB888(扩展)
基础版:
红色:取高5位,右移8位后与
0xF8
(11111 000
)按位与,低3位补0;绿色:提取中间6位,右移3位后与
0xFC
(1111 1100
)按位与,低2位补0;蓝色:提取低5位,左移3位后与
0xF8
(11111 000
)按位与,低3位补0;位扩展:
相比于基础版的核心思想是:不直接补零,而是将低位用高位的部分值填充,例如将红色分量R由
01011
扩展为01011010
。// 基础版:低位补0(快速但有色阶断层) void RGB565ToRGB888(uint16_t rgb565, uint8_t *r, uint8_t *g, uint8_t *b) {*r = (rgb565 >> 8) & 0xF8; // 高5位→8位(低3位=0)*g = (rgb565 >> 3) & 0xFC; // 中6位→8位(低2位=0)*b = (rgb565 << 3) & 0xF8; // 低5位→8位(低3位=0) }// 优化版:位扩展(减少色阶断层) void RGB565ToRGB888_Dither(uint16_t rgb565, uint8_t *r, uint8_t *g, uint8_t *b) {*r = ((rgb565 >> 8) & 0xF8) | (rgb565 >> 13); // 高5位→8位(低3位=高3位)*g = ((rgb565 >> 3) & 0xFC) | ((rgb565 >> 9) & 0x03); // 中6位→8位(低2位=中6位的高2位)*b = ((rgb565 << 3) & 0xF8) | ((rgb565 >> 2) & 0x07); // 低5位→8位(低3位=低5位的高3位) }
上述两种方法都是通过简单直接的方式将RGB565转换为RGB888。如果需要更高精度的转换,可以考虑使用抖动补偿等优化方法。
RGBP888(平面格式)
- R/G/B各8位(256级),R、G、B通道数据分三个独立内存块存储,而不是像RGB888格式那样将三个通道的数据交错存储在一起。
- 优点:这种分离存储的方式可以在某些图像处理操作中提高效率,因为可以更方便地对单个通道进行操作,而不需要在内存中进行复杂的解交错操作,所以便于通道分离处理(如深度学习特征提取)。
- 缺点:存储结构复杂,占用内存大。
2.1.3 YUV/YCbCr格式
YUV
- 介绍
YUV 是一种将亮度(Y) 和色度(UV) 分离的颜色编码格式,具体定义为:
Y = 0.299R + 0.587G + 0.114B // 亮度由RGB加权得到,不同标准系数略有差异
U = (B-Y) × 0.493 // 蓝色与亮度的差异
V = (R-Y) × 0.877 // 红色与亮度的差异
- Y(Luminance):亮度信号,代表图像的明暗信息(0-255),由红(R)、绿(G)、蓝(B)三基色按比例混合而成,其中Y的计算公式中绿色(G)的权重最高(0.587),是因为人眼对绿色最敏感。
- U/V(Chrominance):色度信号,描述颜色的饱和度和色调,其中:
- U(Cb):蓝色偏移量,蓝色与亮度的差值
- V(Cr):红色偏移量,红色与亮度的差值
YUV 诞生于 20 世纪 60 年代的彩色电视系统,当时需要解决一个核心矛盾:黑白电视已普及但是它只能接收亮度信号(Y),彩色电视需推广,则必须兼容黑白电视,同时传输色度信息(UV)。YUV 通过分离亮度与色度,完美解决了这一问题:黑白电视只需解码 Y 信号,彩色电视额外解码 UV 信号。
人类视觉系统对亮度变化更敏感,对色度变化相对不敏感。基于此特性,YUV 格式允许对 UV 分量进行降采样(如 4:2:0、4:2:2),大幅减少数据量而不显著影响视觉质量。
- YUV的常见采样格式
格式 | 说明 | 单元像素所占用的位数 | 压缩率 | 数据量(例:1920x1080) | 典型应用场景 |
---|---|---|---|---|---|
YUV 4:4:4 | 无子采样,每像素独立YUV | 24位 | 0% | ~6.22 MB | 专业影视后期、医疗影像 |
YUV 4:2:2 | 水平色度减半,每2像素共用UV,常用于标清视频 | 16位 | 33% | ~4.15 MB | 广播级视频(ProRes HQ) |
YUV 4:2:0 | 水平/垂直色度均减半,4像素共用UV | 12位 | 50% | ~3.11 MB | H.264/JPEG/流媒体 |
YUV 4:1:1 | 水平色度采样率1/4 | 12位 | 50% | ~3.11 MB | 部分摄像机原始输出 |
YUV 4:0:0 | 无色度信息(仅Y分量) | 8位 | 66% | ~2.07 MB | 黑白图像处理 |
- YUV的存储方式
- Planar(平面)
- 存储方式:Y、U、V 分量分别存储在独立的连续内存块中。
- 示例:I420(YU12)格式:Y -> U -> V,Android常用。
- Semi-Planar(半平面格式)
- 存储方式:Y单独存储,UV交错存储。
- 示例:NV12 格式 :Y -> UV交错,Windows摄像头主流格式;Y -> VU交错,Android摄像头默认格式。
- Packed(打包)
- 存储方式:Y、U、V 分量按像素交替排列在同一内存块中。
- 示例:UYVY:U0-Y0-V0-Y1-U1-Y2-V1-Y3…,每2个像素共用UV,索尼摄像机常用。
- 典型格式命名示例
格式全称 | 含义拆解 | 说明 |
---|---|---|
YUV420p | 420(采样) + p(Planar) | 采样比例 4:2:0,Y、U、V 分别存储在三个独立平面(如 I420、YV12 格式)。 |
YUV420sp | 420(采样) + sp(Semi-p) | 采样比例 4:2:0,Y 单独一个平面,U 和 V 交错存储在另一个平面(如 NV12、NV21)。 |
YUYV | 隐含采样 422 + Packed | 采样比例 4:2:2,Y、U、V 按Y0 U0 Y1 V0 顺序交替存储(属于 Packed 格式)。 |
NV12 | 隐含采样 420 + sp(Semi-p) | 等同于 YUV420sp,Android/iOS 主流格式,UV 平面按 U→V 顺序交错。 |
NV21 | 隐含采样 420 + sp(Semi-p) | 与 NV12 类似,但 UV 平面按 V→U 顺序交错(Android 摄像头默认输出格式)。 |
- 应用场景
- 视频编码标准:如 H.264、HEVC(H.265)、VP9 等均以 YUV 4:2:0 为基础格式。
- 显示系统:HDMI、DisplayPort 等接口内部使用 YUV 传输,降低带宽需求。
- 图像处理:肤色检测、亮度调整等操作在 YUV 空间更高效。
- 移动设备:摄像头传感器直接输出 RAW Bayer 格式,通常先转换为 YUV 再处理。
YCbCr
YCbCr是YUV的数字化偏移版本,用于数字视频标准(如JPEG/MPEG)。两者的核心区别是:
- YUV:模拟信号领域(如老式电视),U/V取值范围[0, 255]。
- YCbCr:数字信号领域,Cb/Cr取值范围[-128, 127],转换公式含偏移量(+128)。
YCbCr的命名规则相同(如 YCbCr 420sp 与 YUV420sp 等价)。
2.1.4 灰度格式(GRAYSCALE)
- 每像素8位(1字节),仅存储亮度信息(0~255级)。
- 优点:数据量极小,适合边缘计算(如人脸检测、OCR)。
- 缺点:完全丢失色彩信息。
2.1.5 HSV格式
一、HSV 色彩空间到底是什么?
HSV 色彩空间是一种基于人类视觉对色彩感知规律设计的模型,核心用色相(Hue) 、饱和度(Saturation) 、明度(Value) 三个维度描述色彩。它的存在,正是为了弥补 RGB 和 YUV 在色彩直观性、调节效率上的短板,让色彩操作更贴合人类的视觉习惯。
HSV三个分量的含义:
- 色相(Hue,H):指色彩的 “本质”,比如红、绿、蓝、黄等。在 HSV 模型中,H 用 0°-360° 的角度表示(类似色轮),0° 对应红色,120° 对应绿色,240° 对应蓝色,其他角度则是过渡色(如 60° 为黄色)。
- 饱和度(Saturation,S):指色彩的 “鲜艳程度”,取值 0-1(或 0%-100%)。S=0 时为灰色(无色彩),S=1 时色彩最鲜艳。
- 明度(Value,V):指色彩的 “明暗程度”,取值 0-1(或 0%-100%)。V=0 时为黑色,V=1 时色彩最亮。
二、为什么需要HSV?
RGB 和 YUV 虽常用,但在色彩直观调节、语义化描述等场景中存在明显局限,而 HSV 恰好能弥补这些不足。
- RGB 的短板:“设备友好,人类难懂”
RGB 是设备导向的模型(基于红、绿、蓝三原色光混合),但人类对色彩的感知并非基于这三种基色的数值。
- 例如,想把 “红色” 调得更鲜艳,在 RGB 中需要同时调整 R、G、B 三个通道(增加 R,降低 G 和 B),操作复杂且不直观;
- 又如,“明暗变化” 在 RGB 中需要同步调整三个通道的数值(如调亮需同时增加 R、G、B),无法单独控制。
- YUV 的短板:“为传输优化,非为编辑设计”
YUV 是视频传输和显示导向的模型(分离亮度 Y 和色度 UV,兼容黑白设备并压缩数据),但它的设计目标是高效传输,而非方便人类调节色彩:
- 例如,想改变 “色调”(如把红色换成绿色),在 YUV 中需要同时修改 U 和 V 分量,且两者的关系复杂(U 对应蓝黄差异,V 对应红绿差异),操作门槛高;
- 它的色彩描述不直接对应人类对 “鲜艳度”“明暗” 的理解。
- HSV 的优势:“人类友好,操作高效”
HSV 完全基于人类视觉感知设计,解决了上述问题:
- 单独调节色彩维度:想换色调(如红→绿),只需修改 H 值;想让颜色更鲜艳,只调 S 值;想调明暗,只改 V 值,无需联动其他通道。
- 语义化色彩描述:比如在图像分割任务中,“提取红色花朵” 可直接通过设定 H 的范围(0°±30°)、S 的阈值(>50%,过滤灰色)、V 的阈值(>30%,过滤过暗区域)实现,而 RGB 需要复杂的三通道数值范围计算。
HSV格式在某些图像处理任务中更具优势,例如颜色分割和检测等。但是直接输出HSV格式的摄像头较少,硬件上直接支持RGB格式更为普遍,所以通常会先输出RGB数据,然后在需要时通过软件转换为HSV格式进行处理。
RGB、YUV与HSV的比较
色彩空间 | 核心设计目标 | 分量组成 | 优势场景 | 典型应用 |
---|---|---|---|---|
RGB | 设备显示(光的混合) | 红(R)、绿(G)、蓝(B) | 屏幕显示、数字图像存储 | 显示器、数码相机、图像文件(JPG/PNG) |
YUV | 视频传输与压缩 | 亮度(Y)、色度(U、V) | 视频编码、电视广播、减少数据量 | 视频文件(MP4)、电视信号、摄像头输出 |
HSV | 人类视觉感知与编辑 | 色相(H)、饱和度(S)、明度(V) | 色彩调节、图像分割、设计工具 | Photoshop 调色、目标检测(如提取特定颜色物体) |
场景选型总结
嵌入式摄像头的应用场景(如画质要求、实时性、硬件成本)是选型的最终决定因素,以下是典型场景的选型逻辑:
- 追求 “极致画质”:工业检测、医疗成像
- 核心需求:保留细节(如细微划痕、细胞结构),支持后期精准分析(如灰度值测量、色彩偏差检测)。
- 首选格式:RAW Bayer(12-16bit)
- 理由:传感器原生输出,未丢失任何原始信息(如光子数量),动态范围最大(16bit RAW 可记录更多明暗细节),是工业相机(如 Basler ace 2)、医疗内窥镜的标配。
- 硬件前提:必须搭配高性能 ISP 和足够带宽(如 MIPI-CSI-2 4 通道,速率≥4Gbps)。
- 实时性优先:监控摄像头、行车记录仪
- 核心需求:低延迟传输与显示,兼顾一定画质(如看清人脸、车牌),硬件成本敏感。
- 首选格式:YUV420(8bit)
- 理由:数据量仅为 RGB888 的 50%,传输带宽低,且 Y 通道单独分离(可快速提取亮度信息,适合运动检测、夜视模式),是安防摄像头(如海康威视 DS-2CD3T46WD)、行车记录仪的主流选择。
- 替代方案:若需稍高画质,可选 YUV422(数据量比 420 高 33%,色彩更细腻)。
- 低成本、简单显示:玩具摄像头、低端可视门铃
- 核心需求:能显示彩色画面即可,硬件成本压到最低(如 10 美元以内的方案)。
- 首选格式:RGB565
- 理由:每像素仅 2 字节,无需 ISP,可直接通过 GPIO 驱动小尺寸 LCD(如 1.8 英寸屏),适合基于 8 位 MCU(如 STM32F103)的极简系统。
- 不足:色彩精度低(仅 65536 种颜色),但对玩具、门铃等场景足够。
- 兼顾画质与处理效率:智能家居摄像头、无人机航拍
- 核心需求:中等画质(如 1080P),支持本地预览 + 云端传输,硬件有基础 ISP 能力。
- 首选格式:RGB888 或 YUV444
- 理由:RGB888 可直接驱动高清屏幕(如 2K 显示屏),适合本地预览;YUV444 色彩还原更准,适合需要后期轻度编辑(如添加水印)的场景(如无人机实时图传)。
- 硬件前提:需带 DDR 内存(缓存多帧数据)和基础图像处理单元(如 ARM Mali GPU)。
2.2 压缩编码格式
嵌入式系统摄像头的压缩编码格式,核心是在有限的硬件资源(算力、存储、带宽)下平衡图像 / 视频质量与数据量,主流格式可分为静态图像编码和动态视频编码两大类,各有其适用场景和技术特点。
2.2.1 静态图像压缩编码
嵌入式摄像头拍摄单张照片时,常用以下压缩格式,兼顾压缩率和硬件实现难度:
2.2.1.1 JPEG
JPEG是最普及的有损压缩,核心特点是基于离散余弦变换(DCT)的有损压缩,通过量化丢弃高频细节(人眼不敏感部分),压缩率可调节(通常 10:1 到 40:1)。
- 优点:算法成熟,硬件解码器 / 编码器(ASIC)成本低,适配多数嵌入式芯片(如 ARM Cortex-A 系列),广泛用于消费级摄像头(如安防摄像头抓拍、智能家居摄像头拍照)。
- 缺点:高压缩率下易出现方块效应和模糊,不适合需要高精度细节的场景(如工业检测)。
2.2.1.2 JPEG-LS
JPEG-LS是一种无损,或者说近无损压缩,核心特点是基于预测编码和 Golomb-Rice 熵编码,支持无损压缩或可配置的近无损压缩(误差控制在 1 以内),压缩率略低于 JPEG(无损时通常 2:1 到 3:1)。
- 优点:无失真保留细节,适合医疗、工业检测等对图像精度要求高的嵌入式场景(如内窥镜摄像头、机器视觉检测)。
- 缺点:编码复杂度高于 JPEG,对硬件算力有一定要求,普及度较低。
2.2.1.3 PNG
PNG是一种无损压缩,支持透明通道。核心特点是基于 DEFLATE 算法(结合 LZW 和哈夫曼编码),纯无损压缩,支持 alpha 通道(透明效果)。
- 优点:适合需要保留锐边(如文字、图标)的场景,部分嵌入式设备(如带 UI 交互的摄像头)用于叠加水印或状态图标。
- 缺点:压缩率低于 JPEG(无损场景下),文件体积较大,不适合连续抓拍存储。
2.2.2 动态视频压缩编码
嵌入式摄像头录制视频时,需处理连续帧的冗余信息(时间冗余和空间冗余),主流编码格式如下:
2.2.2.1 H.264/AVC
H.264是平衡性能与兼容性常用的选择,核心特点是通过帧内预测(I 帧)、帧间预测(P 帧 / B 帧)、熵编码(CAVLC/CABAC)等技术,压缩率比早期的 MPEG-4 提升约 50%,支持多种分辨率(从 QCIF 到 4K)。
- 优点:兼容性极强,几乎所有嵌入式平台(从低端 MCU + 专用 ISP 到高端 SoC)都支持硬件编码,是安防摄像头、行车记录仪、物联网摄像头的主流选择。
- 缺点:相比新一代编码,高分辨率(如 4K)下码率仍较高,对算力有限的低端设备(如 8 位 MCU)压力较大。
2.2.2.2 H.265/HEVC
H.265相比于H.264具有更高压缩率,主要面向高清 / 4K。核心特点是在 H.264 基础上优化帧内预测模式(增加到 35 种)、引入更大编码单元(CU,最大 64x64),相同画质下码率比 H.264 降低约 50%,支持 8K 分辨率。
- 优点:适合需要高清(1080P)、超高清(4K)且带宽 / 存储受限的场景(如无人机航拍、高端安防摄像头)。
- 缺点:编码复杂度是 H.264 的 3-4 倍,需专用硬件编码器(如支持 HEVC 的 FPGA 或 SoC),低端嵌入式设备难以承载。
2.2.2.3 H.266/VVC
H.266是下一代编码,面向8K 与低带宽。核心特点是进一步提升压缩效率,相同画质下码率比 H.265 再降 30%-40%,支持更高动态范围(HDR)和宽色域。
- 优点:未来高清嵌入式摄像头(如 8K 工业相机)的潜力选择,尤其适合低带宽传输(如远程监控)。
- 缺点:算法复杂,目前仅高端嵌入式芯片(如英伟达 Jetson 系列、海思 Hi3559A)支持,成本高,普及度低。
2.2.2.4 MPEG-4 Part2
MPEG-4 Part2是早期低成本方案。核心特点是基于运动补偿和离散余弦变换,压缩率低于 H.264,实现简单。
- 优点:硬件编码逻辑简单,适合极低算力的嵌入式设备(如早期的儿童监控摄像头、低端可视门铃)。
- 缺点:码率较高,画质一般,逐渐被 H.264 替代。
2.2.2.5 VP9
VP9是谷歌推出的开源编码,压缩率接近 H.265,无专利费。
- 优点:适合对成本敏感且需要规避专利的嵌入式场景(如开源硬件平台树莓派搭配摄像头)。
- 缺点:硬件支持不如 H.264/HEVC 广泛,编码效率略低于商用方案。
2.2.2.6 总结
嵌入式摄像头的压缩编码格式,本质是硬件能力与应用需求的平衡:低端设备(如百元级监控摄像头)优先选 JPEG(静态)和 H.264(动态),追求低成本和兼容性;中高端设备(如 4K 工业相机、高端无人机)则会采用 H.265 甚至 H.266,以在有限带宽 / 存储下保证高清画质。未来,随着嵌入式芯片算力提升,更高压缩率的编码(如 H.266)会逐步普及,但 H.264 在中低端场景的统治地位仍将持续较长时间。
三、参考
-
Camera Compact Module (摄像头模块,简称CCM)
-
camera理论基础和工作原理
-
[Camera]摄像头模组硬件
-
摄影新手入门:1分钟搞懂焦距是什么?焦距与视角的关系!
-
VCM 音圈马达概述
-
图像清晰度评价函数