图像格式及查看方法
# 图像格式及查看方法
本文梳理了数码相机图像处理流程中涉及的关键中间格式,涵盖 Bayer Raw(Plain/MIPI)、Demosaic、YUV 色彩空间以及 RGB 等常见格式的特点与区别,帮助读者理解图像从 sensor 采集到最终显示的完整数据变换过程。
# 一、图像处理流程概述
在数码相机或手机拍照的整个 pipeline 中,图像数据会经历多次格式转换。大致流程如下:

理解每一种中间格式的特点,对于图像调试(IQ tuning)、算法开发以及问题定位都至关重要。
# 二、Bayer Raw 格式
# 2.1 Bayer 阵列
Sensor(图像传感器)表面覆盖着一层 Bayer 滤色阵列,每个感光单元只能接收 一种颜色 的光(红/绿/蓝)。之所以绿色采样点比红蓝多一倍,是因为人眼对绿色波段最敏感。
常见的 Bayer 排列方式:
| 排列名称 | 第一行 | 第二行 | 说明 |
|---|---|---|---|
| RGGB | R G | G B | 最通用的排列 |
| BGGR | B G | G R | 常见于某些 Sony sensor |
| GRBG | G R | B G | 较少见 |
| GBRG | G B | R G | 较少见 |
同一个 sensor 的 Bayer 排列方式是固定的,由 sensor 的硬件设计决定。
# 2.2 像素深度(bpp)
每个像素用多少 bit 来记录亮度信息,称为 像素深度(bits per pixel, bpp)。常见 bpp 有:8、10、12、14、16。bpp 越高,记录的亮度层次越丰富,动态范围越大,但同时数据量也更大。
# 2.3 Plain Raw(Unpacked Raw)
Plain Raw 是一种"未打包"的存储方式。以 bpp = 10 为例:
- 每个像素占用 2 字节(16 bit)
- 有效数据占低 10 bit,高 6 bit 填 0(或空置)
- 优点:读取简单,按字节对齐
- 缺点:浪费存储空间(约 37.5% 的空间被浪费)
Plain Raw (bpp=10) 单个像素存储示意:
┌─────────────────┬─────┐
│ 10bit 有效数据 │空置 │
└─────────────────┴─────┘
16 bit (2 byte)
2
3
4
5
# 2.4 MIPI Raw(Packed Raw)
MIPI Raw 是一种"打包"存储方式,将多个像素的 bit 紧密排列,不浪费空间。以 bpp = 10 为例:
- 4 个像素共 $4 \times 10 = 40$ bit = 5 字节
- 每个像素的低 8 bit 依次存入前 4 个字节
- 每个像素的高 2 bit 拼起来存入第 5 个字节
MIPI Raw 打包方式(bpp=10, 4像素→5字节):
像素: P0[9:0] P1[9:0] P2[9:0] P3[9:0]
Byte0: P0[7:0] ← P0 的低 8bit
Byte1: P1[7:0] ← P1 的低 8bit
Byte2: P2[7:0] ← P2 的低 8bit
Byte3: P3[7:0] ← P3 的低 8bit
Byte4: [P3[9:8] | P2[9:8] | P1[9:8] | P0[9:8]] ← 4个像素的高2bit拼成1字节
2
3
4
5
6
7
8
9
注意:第 5 个字节中 4 个像素高 2 bit 的排列顺序取决于具体平台(高通、MTK 等可能有差异),实际调试时需查阅对应 datasheet。
# 三、Demosaic(去马赛克)
Bayer Raw 中每个像素只有一种颜色分量,需要通过 插值算法 利用周围像素的数据,还原出每个位置完整的 R、G、B 三个分量,这个过程叫 Demosaic(去马赛克)。
# 3.1 基本原理
以 RGGB 排列为例,对于某个 R 像素位置:
- 该位置缺少 G 和 B
- 用周围邻居的 G 值做插值得到该位置的 G
- 用周围邻居的 B 值做插值得到该位置的 B
- 同理,G 位置需要补 R 和 B,B 位置需要补 R 和 G
# 3.2 常见算法
| 算法 | 全称 | 特点 |
|---|---|---|
| 双线性插值 | Bilinear Interpolation | 最简单,速度快,但边缘易出现伪色和锯齿 |
| VNG | Variable Number of Gradients | 根据梯度方向自适应插值,效果优于双线性 |
| AHD | Adaptive Homogeneity-Directed | 先做颜色空间转换再做方向判断,效果好 |
| Malvar-He-Cutler | — | 高质量线性滤波器,许多 ISP 的默认算法 |
| AI Demosaic | — | 近年用深度学习做去马赛克,效果最好但算力要求高 |
经过 Demosaic 后,图像格式变为 RGB888(每个像素 R、G、B 各 8 bit,共 24 bit/pixel)或 RGB565 等。
# 四、YUV 色彩空间
# 4.1 为什么需要 YUV
用 RGB 存储每个像素需要 24 bit,数据量很大。研究发现:
- 人眼对亮度变化敏感
- 人眼对颜色变化不敏感
因此将亮度和颜色分离:Y(亮度/Luma) 分量保留全分辨率,UV(色度/Chroma) 分量可以做下采样,大幅减少数据量而视觉质量损失很小。
# 4.2 YUV 采样格式
YUV 采样用 Y:U:V 三数字的比例表示,常见的有:
| 格式 | 采样方式 | 每像素 bit 数 | 说明 |
|---|---|---|---|
| YUV444 | 不采样 | 24 bit | 与 RGB888 同等数据量,无损色彩 |
| YUV422 | 水平方向 2:1 采样 | 16 bit | U、V 在水平方向减半 |
| YUV420 | 水平和垂直各 2:1 采样 | 12 bit | 最常用,数据量仅为 RGB 的一半 |
YUV420 采样示意(4 个像素共享一组 UV):
YUV420 采样:
Y Y ← 4个Y分量(全分辨率)
Y Y
U ← 1个U(4个像素共享)
V ← 1个V(4个像素共享)
2
3
4
5
# 4.3 YUV 存储格式
根据 Y、U、V 数据在内存中的排列方式,分为两大类:
# Planar(平面格式)
三个分量分别存储在三个独立平面中:
YUV420P (I420):
[Y₀ Y₁ Y₂ Y₃ ... Yₙ] [U₀ U₁ ... Uₙ/₄] [V₀ V₁ ... Vₙ/₄]
Y 平面 U 平面 V 平面
2
3
# Semi-Planar(半平面格式)
Y 单独一个平面,UV 交错存放在同一个平面:
YUV420SP (NV12):
[Y₀ Y₁ Y₂ Y₃ ... Yₙ] [U₀ V₀ U₁ V₁ ... Uₙ/₄ Vₙ/₄]
Y 平面 UV 交错平面
2
3
# 4.4 NV12 与 NV21
这两种都是 YUV420SP(Semi-Planar),区别在于 UV 的交错顺序:
| 格式 | UV 顺序 | 适用平台 |
|---|---|---|
| NV12 | U 在前,V 在后:UVUVUV... | Android、Windows、OpenCV 默认 |
| NV21 | V 在前,U 在后:VUVUVU... | Android Camera 预览常用 |
NV12: Y₀Y₁Y₂Y₃... U₀V₀U₁V₁U₂V₂...
NV21: Y₀Y₁Y₂Y₃... V₀U₀V₁U₁V₂U₂...
2
# 五、JPEG 压缩
YUV 图像适合送给屏幕直接显示,但如果要保存为图片文件,还需要进一步压缩。最常用的压缩格式是 JPEG。
# 5.1 压缩原理
JPEG 的核心算法是 DCT(离散余弦变换,Discrete Cosine Transform),将图像信号从空间域转换到频域:
- 分块:将图像划分为 $8 \times 8$ 的宏块
- DCT 变换:对每个 $8 \times 8$ 块做离散余弦变换,得到频域系数
- 量化:对频域系数做量化(有损步骤),高频系数(代表细节纹理)通常会被量化到 0 或被大幅削减
- 熵编码:对量化后的系数做 zigzag 扫描 + 霍夫曼编码,完成压缩
# 5.2 为什么可以"有损"
自然图像的大部分能量集中在低频区域(大面积的平滑区域、渐变等),而高频分量(纹理、边缘细节)的能量较小。人眼对高频细节的损失不那么敏感,因此:
- 舍弃或削减高频分量 → 数据量大减
- 保留低频分量 → 图像整体观感变化不大
# 六、常用图像查看工具
熟悉了上述格式后,我们能够在拍照的任意阶段 dump 出图像数据,并用对应工具查看确认效果。
# 6.1 命令行工具
| 工具 | 用途 | 常用命令 |
|---|---|---|
| ffplay | YUV/RGB raw 数据预览 | ffplay -f rawvideo -pixel_format nv12 -video_size 1920x1080 input.yuv |
| ffmpeg | 格式转换 | ffmpeg -s 1920x1080 -pix_fmt nv12 -i input.yuv output.jpg |
| ImageMagick (convert) | 图片查看、转换 | convert input.jpg -resize 50% output.jpg |
# 6.2 专业 YUV 查看工具
| 工具 | 平台 | 特点 |
|---|---|---|
| 7yuv | Windows/Linux | 轻量级,支持多种 YUV 格式,可查看 hex 数据 |
| YUView | Windows/Linux/Mac | 开源,功能强大,支持 YUV、RGB、HEVC 等 |
| RawViewer | Windows | 支持 Bayer Raw 预览和 Demosaic |
# 6.3 Bayer Raw 查看
对于 Bayer Raw 数据,可先用工具做简单的 Demosaic 预览:
# 使用 ffmpeg 将 Bayer Raw 转为 PNG 预览(RGGB 排列为例)
ffmpeg -f rawvideo -pix_fmt bayer_rggb8 -s 1920x1080 -i input.raw output.png
2
# 七、总结
整个图像处理流程中,各阶段格式的特点对比如下:
| 阶段 | 格式 | 数据量(相对) | 典型用途 |
|---|---|---|---|
| Sensor 输出 | Bayer Raw | 1× | 原始数据存档、专业后期 |
| Demosaic 后 | RGB888 | 3× | 图像处理中间步骤 |
| 色彩空间转换后 | YUV420 | 1.5× | 预览、视频编码输入 |
| 压缩后 | JPEG | 0.1~0.5× | 照片存储、网络传输 |
理解各格式的存储方式和转换关系,是图像调试和算法优化的基础。在实际工作中,遇到图像偏色、条纹、清晰度等问题时,逐阶段 dump 图像对比分析是最有效的定位手段。
