摘要:为了改善实时图像输出质量,研究基于SDI接口的增强显示系统软硬件设计。利用模块化思想提出一个基于SDI接口输出的硬件架构,以FPGA作为处理核心,通过2片SRAM的双缓存结构实现图像的乒乓控制,使输出图像满足SDI接口协议。在此提出了灰度拉伸、伪彩色处理以及画幅缩放3种实时图像增强算法。通过实验测试,系统工作稳定、实时性好,加入增强算法后图像对比度增强,极大增强了人眼的视觉效果。
关键词:SDI;模块化;图像增强算法;伪彩;画幅缩放
0 引言
SDI接口(Serial Digital Interface)是直接通过采用数字化的方法对视频信号进行控制、处理和传输,将数字视频或者音频信号按有效行场方式通过单芯同轴电缆传输,而后将数字信号直接接入后续的处理系统,避免传统的模拟信号因A/D和D/A转换带来的图像细节和质量损失,也使得设备间的交互变得更加简单方便。SDI接口传输速率高、适应性强、即插即用、对环境要求不高以及应用范围广等特点,目前SDI已经作为国内很多战略靶场军工图像设备的一种协议标准。
目前在民用方面,SDI接口作为一种标准视频传输接口已被世界上多数视频设备厂商接受并采纳,涉足数字摄像领域、电视电影及专业的演播室等领域。世界知名的索尼、松下等公司生产的视频设备均支持SDI接口协议。
1 系统硬件结构
系统结构如图1所示,主要由Camera Link接口、千兆网接口、大容量SRAM存储器、FPGA芯片、SDI接口芯片以及SDI接口监视器等构成。这里FPGA是整个系统的核心逻辑,采用XILINX公司的V2系列XC2V4000FFG1152芯片,该芯片有1152个IO引脚,4 MB的系统门单元,120个乘法器,12个数字时钟管理器,824个用户可定义IO,120x18 b的块RAM。丰富的硬件资源给输入图像的显示和增强处理提供了可靠保证。该系统的基本工作过程首先接收Camera Link接口或千兆网接口的图像数据,经过专用接口转换芯片将数据转换成TTL或者CMOS格式,传送给FPGA,在FPGA内部经过实时图像处理、协议转换,输出符合SDI接口芯片的数据,经过接口芯片的并串转换,实时输出SDI标清图像数据。
这里FPGA的主要工作原理如图2所示。在该模块中,系统上电后首先完成对SDI接口芯片工作寄存器的配置,从而完成对其工作模式的选择;然后需要完成输入图像数据接口到接口芯片的行场时钟协议转换以及数据到YCbCr格式转换,这里采用FPGA对双缓存的控制完成格式转换,本文应用画幅缩放、灰度拉伸和伪彩色处理实现图像增强处理,这在下一节做具体描述。
2 图像增强算法
2.1 灰度拉伸算法
现在很多相机都基于CameraLink接口和千兆网接口,它们的输出数据位存在8 b,10 b和14 b等多种情况,本文在系统设计时做了智能处理,通过上位机RS232串口向该系统转换模块发送一个命令信号,告知系统输入端的灰度数据位数和系统输出端的数据位数,从而使算法实现不同的灰度拉伸。由于一般的监视器只能显示8 b灰度的图像数据,SDI信号有8 b和10 b两个差别。对灰度图像做一个线性拉伸,不论前端输入图像数据是多少位,可以利用该算法将图像数据映射到8 b和10 b空间,即下面介绍的拉伸处理。这里以输入图像数据14 b为例,假设输入为10 b图像数据,其宏观概念是。将14 b数据空间线性映射到10 b空间。假设做灰度拉伸前的灰度值为Yi,则它的灰度取值范围是[0,16 383];灰度拉伸之后的灰度值为Yi’,它的取值范围为[0,1 023],则Yi和Yi’直接直接的映射关系为:
式中:Ymax为某帧图像的灰度最大值;Ymin为某帧图像的灰度最小值。
如果输出为8 b图像数据,则根据需要将14 b灰度转换到8 b灰度空间,线性映射关系为:
式中:Ymax为某帧图像的灰度最大值;Ymin为某帧图像的灰度最小值。
根据上面的公式可看出,在进行拉伸变换时,需要用到基本的乘除法运算,这在Xilinx公司FPGA内部实现起来较困难,最为常用的做法是调用FPGA内部的乘除法IP核,这样可以极大提高FPGA的工作效率。根据上面的公式,若想实现算法,还需要知道当前帧图像数据的灰度最小值和最大值。FPGA工作是以时钟为基础的,具有实时性,如果想获得当前帧的灰度最值,需要对图像数据进行缓存处理,然后二次提取最值。在程序实现上,为了简便起见,在此利用前一帧数据的灰度最大值和最小值来代替当前帧的最大值最小值。这样对当前帧遍历求取最值,然后应用到下一帧图像中去,这里认为前后帧相关性比较大,不会对算法造成很大影响。
2.2 伪彩处理
经黑白相机输入的图像数据经过协议转换处理后得到的是SDI接口视频YCbCr格式中亮度Y分量,这时将CbCr在程序里填充80h,就构成YebCr信号,而后用于输出显示,为了增强显示效果,颜色更加能丰富人眼的视觉效果,下面给出一个算法将灰度转换为伪彩色。
实现伪彩处理,通常是把当前像素灰度值作为存储地址查找RGB伪彩码表,将码表中对应的RGB三色值用RGB转换到YebCr彩色区间,而后输出伪彩图像。在FPGA里实现的基本方法是最大限度地利用FPGA的IP核,将RGB码表写到FPGA的内嵌RAM核里,在程序中依次遍历查找表和计算下面的公式计算出相应的CbCr值并且输出。
R=1.164(Y-16)+1.596(Cr-128)
G=1.164(Y-16)-0.813(Cr-128)-0.391(Cb-128)
B=1.164(Y-16)+2.018(Cb-128)
2.3 画幅缩放
图像的画幅缩放也被称为图像重采样,它是视频处理中的一项重要技术。在SDI显示输出模块中,由于标清SDI显示画幅分辨率是720× 576,前端输入CameraLink或者其他接口的图像分辨率随机,所以必然会用到图像画幅缩放,否则,如果图像分辨率超出SDI的这个范围,就会导致显示不全,如果分辨率小于这个范围,就会导致有黑框,直接影响后续的显示效果。
目前画幅缩放的算法种类繁多,但基本方法都是插值运算方面的算法,例如最近邻插值、双线性插值以及立方卷积插值算法等,但最近邻插值算法在亮度变化比较快的图像边缘比较粗糙;立方卷积插值算法非常复杂而且运算量大,不满足实时处理条件。同前面2种插值算法比较,双线性插值算法运算量少、实时性高,适合于在FPGA内部实现。
如图3所示,假设原始图像中的某点(x,y),则相邻的右侧和下方像素点位置为(x+1,y),(x,y+1),(x+1,y+1),假设它们的灰度值分别是P1,P2,P3,P4,在水平方向和垂直方向上的位移都是单位1,并假设待插入点的位置坐标为:(x+dx,y+dy)。
那么根据双线性插值算法原理得到插入点的灰度值为:
P’(x+dx,y+dy)=(1-dx)(1-dy)P1+dx(1-dy)P2+dy(1-dx)P3+dxdyP4
化简后得到:
P’(x+dx,y+dy)=P1+(P2-P1)dx+(P3-P1)dy+[(P4-P3)-(P2-P1)]dxdy
从上式看出,当知道待插值点的偏移距离dx和dy后,那么该插值像素点的灰度值可根据周围的4点得到。该系统中的画幅缩放处理正是采用双线性插值算法,其在FPGA内部实现的具体功能如框图4所示,主要由数据缓存单元、双线性插值单元、插值系数控制单元组成。
在实现图像缩放算法以前,首要算出图像的缩放因子k。这里以一行图像为例,以单位长度“1”表示相邻2个像素的距离,图像缩放前的分辨率为A×1,图像缩放后的分辨率为B×1,则缩放前后的图像的像素缩放因子k=B/A。例如,分辨率为640x512的图像缩放为720x576的图像,则在水平方向上缩放因子k=1.25;垂直方向上的缩放因子k=1.125;根据不同的情况,在水平、垂直方向上的缩放比例因子不同。
根据图4和插值的运算公式,每经过一个像素时钟,插值系数dx,dy需要实时提供给插值运算模块,这就要求FPGA时序同步,并且FPGA各个功能模块能够有效配合。
3 实验结果及分析
将硬件系统和相机连接,该相机基本参数是320x256分辨率,14 b像素深度,帧频25/50可调。通过PC机的RS 232串口连接转一个转换设备,使之满足RS 422差分协议,以便发送命令给硬件系统和返回硬件系统状态。
FPGA程序采用模块化方式,分为图像采集输出模块、双缓存控制模块、通信控制模块、伪彩处理模块、灰度拉伸模块、画幅缩放模块和SDI时序生成模块,其中伪彩处理模块、灰度拉伸模块和画幅缩放模块通过RS 422接口发送不同的指令给FPGA,就会触发相应的模块工作,具体FPGA初始化过程中软件工作流程如图5所示。
SDI输出显示采用JVC公司专用的SDI监视器,和电路板之间用75 Ω的同轴电缆连接,系统工作后测试了相应功能,并将图像显示在监视器上,图6是显示的未通过任何增强处理的7~14位图像。
图7是显示的经过灰度拉伸处理的图像,将14位拉伸成8位。
图8是经过拉伸处理后再经过伪彩色增强处理的图像。图9是经过伪彩色增强处理的拉伸图像再进行画幅拉伸使之全屏显示。
4 结语
本文设计了一种基于SDI接口输出的图像显示系统,在FPGA里面封装了灰度拉伸、伪彩色处理以及画幅拉伸增强算法函数,几种算法可以单独调用,也可以串行一块工作。实验结果表明,该系统可以很稳定地将Camera Link接口或者千兆网口输入图像经协议转换为标清SDI输出,并可以把灰度很低的图像进行对比度增强,极大增强了人眼的视觉效果,由于SDI转换协议以及各个增强算法都在FPGA内部实现,完全可以达到资源优化利用和实时性要求。