2. 视频图像数据格式与接口基础

在Zynq视频系统中,FPGA逻辑、VDMA、视频处理IP以及显示控制器之间传递的并不是“图像”这个抽象概念,而是一串按特定顺序排列的像素数据。理解这些数据的组织方式,是后续做色彩空间转换、缩放、帧缓存和接口时序设计的前提。本节围绕四个核心问题展开:颜色如何用数字表示、色度如何被压缩、不同标准下数值如何解释、以及像素如何被时钟和同步信号“搬运”。

一、RGB与YUV:两种描述颜色的方式

RGB是最直观的颜色表示:每个像素由红、绿、蓝三个分量组成,显示器最终也是靠这三种基色发光。在Zynq常见的视频通路中,RGB常用24位表示,即R、G、B各8位,取值范围0~255。例如纯红为(255,0,0),白色为(255,255,255)。RGB的优点是直观、便于显示,缺点是三个分量高度相关,直接压缩时冗余大。

YUV则把亮度与色度分离。Y表示亮度,U、V(在BT.601/BT.709中常记作Cb、Cr)表示色差。人眼对亮度细节敏感、对色度细节不敏感,因此可以保留完整的Y而降低色度分辨率,从而在几乎不损失主观画质的前提下减少数据量。RGB到YUV的转换本质是线性矩阵运算,以BT.601的8位数字形式为例:

Y  =  0.299R + 0.587G + 0.114B
Cb = -0.169R - 0.331G + 0.500B + 128
Cr =  0.500R - 0.419G - 0.081B + 128

注意Cb、Cr加了128的偏置,使无彩色时色度值落在128附近,避免出现负数。反向转换时先减去128再乘逆矩阵。在FPGA中,这类系数通常被定点化为整数,例如放大256倍后用移位实现,以节省DSP资源。

二、4:4:4、4:2:2、4:2:0采样

采样格式描述的是色度分量相对于亮度分量的取样密度。4:4:4表示每个像素都有独立的Y、Cb、Cr,信息最完整,常用于图形、文字和高质量后期处理。4:2:2表示水平方向每两个像素共享一组Cb、Cr,即色度水平方向减半,数据量降为原来的2/3,是SDI、BT.656等视频接口的常见格式。4:2:0则水平、垂直方向都减半,每四个像素共享一组色度,数据量约为4:4:4的一半,广泛用于H.264/H.265编码和JPEG。

以一行8个像素为例,4:4:4需要8组Y、8组Cb、8组Cr;4:2:2只需8组Y、4组Cb、4组Cr;4:2:0在相邻两行之间再共享,两行共16个Y、4组Cb、4组Cr。在Zynq中,如果视频源是4:2:0而显示通路要求4:4:4,就需要做色度上采样,通常采用插值恢复缺失的色度样本,这一步会引入轻微模糊,因此处理顺序上应尽量在编码前保持高采样格式。

色度采样格式对比(以4×2像素块为例) 4:4:4 每像素独立色度 Y Cb Cr Y Cb Cr Y Cb Cr Y Cb Cr Y Cb Cr Y Cb Cr Y Cb Cr Y Cb Cr 4:2:2 水平色度减半 Y CbCr Y Y CbCr Y Y CbCr Y Y CbCr Y 4:2:0 水平垂直均减半 Y Y Y Y 共享 Cb Cr 相对数据量 100% 约 67% 约 50% 说明:4:2:0 的色度在 2×2 像素块内共享,图中仅示意亮度样本位置,色度样本位于块中心。

三、BT.601与BT.709:数值范围与系数差异

YUV数值并不是“随便定”的,标准规定了转换系数和取值范围。BT.601面向标清,BT.709面向高清,两者亮度系数不同:BT.601的Y系数为0.299/0.587/0.114,BT.709为0.2126/0.7152/0.0722。如果高清素材误用BT.601矩阵,肤色会偏黄或偏红,这是工程中常见的“颜色不对”问题之一。

另一个关键点是量化范围。视频通常采用“有限范围”(limited range):8位下Y为16~235,Cb/Cr为16~240,16对应黑、235对应白。而计算机图形常用“全范围”(full range):0~255。若把有限范围视频直接当全范围显示,画面会发灰、对比度不足;反之则会过曝、暗部被压死。在Zynq的Video Timing Controller和色彩空间转换IP中,通常需要显式配置范围与标准,例如通过AXI4-Lite寄存器选择BT.709和有限范围。

四、像素时钟与同步信号

视频接口的“搬运”依赖三类信号:像素时钟(Pixel Clock)、行/场同步(HSYNC/VSYNC)和数据有效(DE,Data Enable)。像素时钟每来一个上升沿,接口就采样一个像素。以1280×720@60Hz为例,有效像素为1280×720,但实际一行还要加上前肩、同步脉冲和后肩,一帧还要加上垂直消隐,因此像素时钟约为74.25MHz,而不是1280×720×60≈55.3MHz。这个差别正是消隐区带来的。

HSYNC指示一行开始,VSYNC指示一帧开始,DE为高时数据总线上的像素才有效。在FPGA中,通常用计数器生成这些时序:水平计数器从0计到H_TOTAL-1,在特定区间拉高HSYNC、在有效区间拉高DE;垂直计数器同理。Zynq的VDMA和视频IP通过AXI4-Stream传递数据,其中TUSER常用来标记帧起始(SOF),TLAST标记行结束(EOL),与并行接口的HSYNC/VSYNC形成对应关系。

五、常用视频接口标准

在Zynq工程中,常见的接口包括:BT.656,8/10位并行或内嵌同步,常用于标清;BT.1120,高清并行接口,16位Y/Cb/Cr复用;DVI/HDMI,TMDS差分传输,HDMI还带音频和辅助数据;DisplayPort,微包结构,适合高分辨率;MIPI CSI-2,常用于摄像头,差分对加包协议;SDI,广播级串行接口。选择接口时,要同时考虑分辨率、帧率、色深、线缆长度和是否需要音频,再决定用FPGA的SelectIO、GTP/GTX收发器还是专用视频IP。

实践建议:在搭建通路前,先明确“源格式—处理格式—显示格式”三者的采样、标准、范围是否一致。任何一处不匹配,都可能在最终画面上表现为偏色、发灰或边缘模糊,而这些问题往往在时序正确时依然存在。