导读
图像是用各种观测系统以不同形式和手段观测客观世界而获得的,可以直接或间接作用于人眼进而产生视知觉的实体。
随着电子技术和计算机技术的飞速发展,数字图像技术近年来得到极大的重视和长足的发展,并在科学研究、工业生产、医疗卫生、通信等方面得到广泛的应用。
视频信号由一系列连续的图像组成。对视频信号的处理已经成为数字图像处理领域中重要的一部分。例如机器人模式识别的过程就是一个视频信号处理的过程,电视制导导弹识别目标就是充分利用视频信号处理技术不断判断目标是否和预先设定目标图像一致。本篇将讲解如何用 FPGA 技术实现基本的视频信号处理。本篇的例子可以作为各位大侠进行视频信号处理时的一个参考,也可以在这个基础上根据需要进行扩展。
第一篇内容摘要:本篇会介绍视频信号概述,包括视频信号处理的基本过程、数字图像处理技术概念、数字视频信号的格式;视频信号处理的框架,包括视频信号转换模块、视频数据计算模块以及通信模块等相关内容。
一、视频信号概述
在讲解数字视频信号处理器以前,需要了解视频信号的组成。摄像头输出的视频信号满足电视信号的制式,一般摄像头、摄像机都提供 PAL 制的视频信号。
目前,世界上实际应用的电视信号制式主要有 NTSC 制、PAL 制和 SECAM 制 3 种。世界上大多数国家采用 PAL 制,我国也采用 PAL 制。美国、日本等国家采用 NTSC 制。俄罗斯、法国、埃及等少数国家采用 SECAM 制。
PAL 电视制式规定,场扫描频率为 50Hz,每帧图像的扫描行数为 625 行。PAL 制电视信号如图 1 所示。
电视信号由“图像信号”和确保扫描同步的“复合同步信号”以及消除扫描逆程回扫线的“复合消隐信号”等辅助信号构成。有关电视信号的原理请自行查阅相关资料,这里不详细解释。
1.1 视频信号处理的基本过程
视频信号的处理过程就是拍摄视频信号的逆过程。摄像头输出的是标准 PAL 制电视信号。摄像头通过光电转换实现图像到视频信号的转换,也就是扫描的过程。摄像头每扫描完一行图像,加入一个行同步脉冲,每扫描完一场图像加入一个场同步信号。同时为了保证扫描逆程光栅不显示,应加入和同步信号同周期的消隐信号。
对视频信号进行处理,需要先进行 A/D 转换、行/场同步信号的分离等步骤,然后采用专用的视频信号处理器对视频信号进行转换,最后用FPGA 处理数字图像信号并得到需要的结果。视频信号处理流程如图 2 所示。
1.2 数字图像处理技术概念
二、视频信号处理的框架
2.1 视频信号转换模块
2.2 视频数据计算模块
2.3 通信模块
通信模块用于提供当前系统与外部进行数据交换的通道,可以有以太网、RS-232、RS-422、RS-485、现场总线、USB 等多种方式。
三、视频信号处理的电路
下面将详细介绍视频转换模块和视频数据计算模块的电路。
3.1 中央控制器 FPGA
FPGA 芯片作为中央控制器控制整个视频信号的处理,如图 6 所示。
FPGA 芯片实现的主要功能如下:
• 提供电源管理逻辑。
• 提供系统状态指示灯的管理,这些指示灯用来显示当前各个部分的状态。
• 提供视频数据处理的管理。当开始采样时,FPGA 在此后到来的第一个帧同步信号到来时启动采样,并将这帧数据存放在 SRAM 中,采样结束后开始处理过程,同时开始采集下一幅图像并保存到另一块 SRAM 中。
• 模拟 I2C 接口,完成对 SAA7113 参数的配置。
3.2 电视信号转换模块电路
电视信号转换模块的电路设计如图 7 所示。
其中 SAA7113 的时钟信号由一片 24.576MHz的晶体提供,产生内部所需的 27MHz 的 LLC(line-locked system clock output,行锁定系统时钟)信号及其二分频信号 LLC2(频率 13.5MHz)。其中 LLC2 信号用来同步整个图像采集系统,即一个 LLC2 周期采集一个像素的图像数据,如图 8 所示。
SAA7113 内部包括模拟电路和数字电路两部分。模拟电路部分具有对电视信号放大、抗混叠滤波(anti-alias filter)等功能,数字电路部分具有对模数转换以后图像数据各种参数的处理等功能。
1)输出数据的格式
摄像头输出的图像信号通过 RCA-JACK 插座连接到 SAA7113,经过 A/D 转换及其他相关处理后得到数字格式的图像数据。SAA7113 能提供以下输出格式的数据:
(1)标准的 ITU 656 YUV 4:2:2(8 位)格式的数据;
(2)增强的 ITU 656 标准格式的各种数据,如 active video、raw CVBS 等。
标准 ITU656 格式是 ITU(International Telecommunications Union,国际电信同盟)推荐的数字视频数据格式。按照 ITU 656 YUV 4:2:2 标准组成的数字电视信号如图 9 所示。
YUV(亦称 YCrCb)是欧洲电视系统采用的一种颜色编码方法(属于 PAL 制)。采用 YUV 主要目的在于优化彩色视频信号的传输,使其在传输中占用较少的带宽,并能兼容老式黑白电视。如果直接采用 RGB 视频信号传输,将要求 RGB 3 个独立的视频信号同时传输,占用带宽要多得多。YUV 中“Y”表示明亮度(Luminance 或 Luma),也就是灰阶值;而“U”和“V”表示色度(Chrominance 或 Chroma),其作用是描述影像色彩及饱和度,用于指定像素的颜色。“亮度”是由 RGB 输入信号来创建的,方法是将 RGB 信号的特定部分叠加到一起。“色度”则定义了颜色的两个方面——色调与饱和度,分别用 Cr 和 Cb 来表示。其中,Cr 反映 RGB 输入信号中红色部分与 RGB 信号亮度值之间的差异,而 Cb 反映 RGB 输入信号蓝色部分与 RGB 信号亮度值之同的差异。
从 SAA7113 数字视频信号输出总线 VPO 输出的数据格式如图 9 所示。
“80 10”表示当前视频信号处于行消隐阶段。“FF 00 00 SAV”是时间参考代码,标志有效视频数据的开始。其中“SAV”(Start of Active Video)意思是有效视频数据的开始。“CB0Y0 CR0 Y1 CB2 Y2…CR718 Y719”是有效视频数据。“FF 00 00 EAV”是时间参考代码,标志有效视频数据的结束。其中“EAV”(End of Active Video)意思是有效视频数据的结束。“80 10”表示下一行视频数据的行消隐信号开始。
用下面公式可以把传输用的 ITU 656 YUV 格式的数据还原为需要的 RGB 格式:
2)SAA7113 的配置
使用 FPGA 模拟的 I2C 接口可以对 SAA7113 提供的多个控制字进行读写,从而完全控制SAA7113 的运行。对 SAA7113 控制字的写过程如图 10 所示。
图 10 对 SAA7113 控制字的写操作
I2C 协议中器件的地址是 7 位,加上读写位(写为“0”,读为“1”)构成一个完成的字节。SAA7113 的器件地址是 0100,101,加上读写位后:器件地址+写=0100 1010 即 4AH;器件地址+读=0100,1011 即 4BH。从地址是器件内部分配的地址。SAA7113 提供 00~1F、40~62 共43 个控制字。
SAA7113 读控制字的过程如图 11 所示。
I2C 协议中的读操作比写操作复杂:首先完成对器件地址和从地址的写操作;然后发送一个 4BH(器件地址+读),可以开始接收数据;数据传输结束时发送终止信号。
整个 SAA7113 配置的流程如图 12 所示。
应用 I2C 程序对 SAA7113 配置。具体可以参考之前的 I2C 相关文章,后续会更新模拟I2C配置程序,这里先超链接一篇,仅供参考。
3.3 图像缓存部分电路
FPGA 将采集到的图像数据保存到缓存中,为后端对图像的进一步处理提供数据。下面提供一种图像缓存的设计方案:采用两块 SRAM(型号为 CY7C1049)作为图像缓存,FPGA 把从SAA7113 接收的一帧图像的数据保存到 SRAM 中,同时后端部分的处理器如 DSP 等可以从另一块 SRAM 中读取数据进行处理,电路如图 13 所示。
第一次采样时,FPGA 将从 SAA7113 接收到的一帧图像数据保存到 SRAM 中,此时 DSP 在等待;第一次采样结束后,DSP 与 FPGA 进行总线切换,分别连接到与上次不同的 SRAM 上,DSP开始读取数据,FPGA 开始采集数据。每当 DSP 和 FPGA 都完成各自的任务时,就进行总线切换,交换连接的 SRAM。
四、视频处理程序的具体实现
4.1 主体程序的实现
FPGA 整体控制程序的流程如图 14 所示。
整体控制过程中有关状态机的代码如下:
4.2 视频图像数据采集程序的实现
SAA7113 输出的视频图像数据通过 8 位总线 VPO 传输给 FPGA,FPGA 需要将数据保存到 SRAM中。由于 PAL 制电视信号是隔行扫描,分为奇数场和偶数场分别传输,数字化以后仍然格式不变,因此在将数据保存到 SRAM 以前,需要将奇数场和偶数场的数据还原成一幅完整的图像。
如果传输格式是 YUV,需要转化为便于 DSP 处理的 RGB 格式。FPGA 需要完成如下任务:
(1)将所有按行排列的 8 位数据还原成一幅完整图像;
(2)根据需要进行格式转换。
SAA7113 输出的数据格式如图 15 所示。
SAV 和 EAV 分别是“有效视频数据的开始”(Start of Active Video)和“有效视频数据的结束”(End of Active Video)。SAA7113 对 SAV 和 EAV 数据格式的定义如表 1 所示。
表 1 SAV 和 EAV 数据格式
从表 1 中可以看到在完整的一帧图像数据中第一场场消隐阶段 SAV 为“101XXXXX”,第一场有效数据阶段 SAV 为“1000XXXX”。“X”表示该位的状态没有作用。其他场 SAV 和 EAV 状态类推。
进行视频数据处理的流程如图 16 所示。
数字视频数据处理的主要代码如下:
4.3 SRAM 的读写控制
SRAM 在读写上有严格的时序要求,用WE、OE、CE 三个信号控制完成写数据,具体时序如图 17所示。
具体过程是:首先输出并保持地OE 址信号,然后片选信号CE置低,同时把输出有效信号OE 置高,最后把写有效信号WE 置低,并开始写数据。控制 SRAM 写数据的程序如下:
系统中两块 SRAM 分别由 DSP 和 FPGA 控制。当 DSP 和 FPGA 完成对相应 SRAM 的操作后,需要进行总线切换。总线切换后,DSP 和 FPGA 开始对另一块 SRAM 进行相应操作。主要代码如下:
五、程序测试与运行
由于整个 FPGA 程序包括 3 部分:处于 TOP 的主体程序,控制其他各个部分程序的运行;视频图像数据采集程序,从 SAA7113 获得数字图像数据并保存到 SRAM 中;SRAM 读写程序实现对 SRAM 的数据读写。测试程序需要仿真数据的全部流程。
5.1 测试程序
测试程序代码如下:
5.2 测试结果
图 19 FPGA 采集得到的有效图像数据并产生的地址信号
七、总结
本篇首先介绍了视频信号的基本原理、组成等,然后讲解了进行视频信号处理的基本过程和框架。接下来结合实例讲解用 FPGA 及其他芯片组成视频处理的电路设计和 FPGA 的程序实现。最后用 Modelsim 仿真和测试了程序。本篇为各位大侠提供了一种视频信号处理的设计方案,仅供参考。