-
基于FPGA的硬件系统由Camera Link接口视频解码芯片DS90CR288A、视频外同步控制芯片DS90LV019、与相机通讯芯片DS90LV031、FPGA芯片EP2S90F1020、外部SDRAM (Synchronous Dynamic Random Acess Memory)芯片MT48LC4M32、视频编码芯片LMH0040以及Camera Link接口相机组成,如图1所示。
Camera Link接口视频编码器模块将来自相机的差分视频数据转换为并行的视频数据、帧信号、行信号以及时钟信号。
FPGA为系统控制和图像处理单元。系统采用FPGA作为处理器,一方面用于控制相机的外同步信号和相机通讯指令,另一方面用于将相机2 048×2 048、100帧/s的视频图像抽帧,RGB转换YCbCr格式,图像缩放转换为标准的HD-SDI/SD-SDI视频格式输出。
外同步控制模块和通讯模块:FPGA产生外同步信号通过外同步控制模块控制相机的帧信号的外触发。FPGA产生通讯指令对相机模式设置、帧频等系列信号进行设置和接收来自相机的相关反馈数据。
外部SDRAM模块用于乒乓缓存图像数据,使得FPGA能将缓存图像数据按照HD-SDI/SD-SDI视频格式输出。
视频编码模块用于将从FPGA转换出的标准HD-SDI视频流输入至视频编码模块,转换为视频监视器可以接收的标准视频信号。
Camera Link接口相机采用德国巴斯勒公司的acA2040-180kc。该相机具有大视场1 in (1 in=2.54 cm)、高分辨率2 048×2 048、高帧频180帧/s的优点,适合于工业方面的视频图像监视[6]。其主要参数见表1。
表 1 相机主要参数
Table 1. Summary of camera characteristics
Characteristics Value Sensor resolution 2 048×2 048 Optical size/cm 2.54 Pixel size/μm2 5.5×5.5 Max frame rate/fps 180 Mono/color Color Camera link clock speed/MHz 65 文中主要对相机大视场(靶面尺寸为1 in)、高分辨率(图像大小为2 048×2 048)、高帧频(相机频率为100帧/s)的视频图像输入至FPGA,FPGA对视频图像进行处理,包括视频图像的实时缩放、RGB转换为YCbCr,经过SDRAM乒乓缓存,按照标准的HD-SDI/SD-SDI视频格式输出。
-
数字图像的缩放方面有许多插值算法,如最近邻插值算法、双线性插值算法、双立方插值算法等。最近邻插值算法和双线性插值算法运算量较小,可以在图像实时处理方面得到应用。最近邻插值算法会造成图像轮廓边沿处产生锯齿现象;双立方插值算法运算量大,不能满足实时方面的要求;双线性插值算法不会造成轮廓边缘锯齿现象,容易造成图像边缘模糊,但实时性较好[7-9],考虑到图像缩放的实时性及清晰显示的需求,选用双线性插值算法。
该系统中,相机接口为Camera Link接口,输出64位图像,帧频为100 Hz。每帧图像大小为2 048×2 048,相机输出Bayer格式彩色图像,每个像素的数据位长度为8位。
由于图像帧频为100 Hz,需要将视频图像按每4帧抽取1帧的方式乒乓存入两片SDRAM中。另外,在FPGA中需要将相机分辨率2 048×2 048的视频图像转换为1024×1024、或720×720、或576×576的视频图像,以便在后续HD-SDI/SD-SDI视频图像中可以实时显示。
相机输出模式为8×8,视频解码模块解码出数据为64位,在进行图像的缩小之前,将64位并行数据转换为8位串行数据,便于图像进行实时插值缩小。在FPGA中,使用四个双口RAM进行数据的并串转换。在第一个双口RAM1中依次写入第1、5、9、···行数据,在第二个双口RAM2中依次写入第2、6、10、···行数据,在第三个双口RAM3中依次写入第3、7、11、···行数据,在第四个双口RAM4中依次写入第4、8、12、···行数据。读取数据时分为四种情况:(a)当第4行开始写入数据时,读取RAM1、RAM2、RAM3的第1、2、3行数据;(b)当第5行开始写入数据时,读取RAM2、RAM3、RAM4的第2、3、4行数据;(c)当第6行开始写入数据时,读取RAM3、RAM4、RAM1的第3、4、5行数据;(d)当第7行开始写入数据时,读取RAM4、RAM1、RAM2的第4、5、6行数据。当后面的行读取数据时,依次按照(a)、(b)、(c)、(d)方式循环读取数据,其原理框图如图2所示,图中i的值为1、4、7、···。
相机输出为Bayer格式像素数据,其输出排序包含四种模式:分别为GB、BG、RG、GR (G代表绿色,B代表蓝色,R代表红色)模式。该相机的Bayer格式数据为GB模式排序,其示意图如图3所示。
将Bayer格式数据转换为RGB数据时,需要将2 048×2 048图像转换为1024×1024、或720×720、或576×576的图像,根据双线性插值的思想,取每个像素点为中心的3×3模板进行图像插值并转换RGB图像[10]。同时,又要考虑图像要进行分辨率缩小,因此先对原始图像进行缩放变换,变换公式如下:
$$\begin{split} L = k \times 2\; 048/M \end{split}$$ (1) 式中:M值为1024、720、576三种情况;k值为从1~M的整数值;L为图像缩放后所选取对应的行数、列数,并对该行数、列数取整数。对公式(1)中所选取的行进行图像插值,对未选中的行进行取舍。在所选行进行RGB变换时,所选行的每个像素的插值信息会用到相邻行的像素信息,因此,在图像缩小时不会产生图像边缘锯齿现象。
Bayer图像转换为RGB图像如公式(2)所示。式中各元素的的二维变量值表示该元素在3×3图像矩阵中的行与列(如
$G(i,k)$ 表示为图像第$i$ 行、第$k$ 列的绿色分量值,依次类推);$g(i,k)$ 为转换的绿色分量值;$b(i,k)$ 为转换的蓝色分量值;$r(i,k)$ 为转换的红色分量值。$$ \left\{ \begin{array}{l} g(i,k) = G(i,k) \\ b(i,k) = [B(i - 1,k) + B(i + 1,k)]/2 \\ r(i,k) = [R(i,k - 1) + R(i,k + 1)]/2 \end{array} \right. $$ (2) 将
$2 \;048 \times 2 \;048$ 的视频图像先按公式(1)的方法进行“行列缩放”转换为所需的缩放图像,根据M值的不同缩放为$1\;024 \times 1\;024$ 、或$720 \times 720$ 、或$576 \times 576$ 的图像。缩放后,在$3 \times 3$ 的图像数据流中按照公式(2)实现Bayer图像转换为RGB图像。 -
一幅RGB图像就是彩色像素的一个三维数组,其中每一个彩色像素点都是在特定空间位置的彩色图像相对应的红、绿、蓝三分量。如果是8位的真彩色图像,则对应的RGB图像的深度就是24位。文中在获取RGB图像后,将RGB图像实时转换为YCbCr图像。在YCbCr彩色空间中,分量Y表示亮度信息,分量Cb表示蓝色分量和一个参考值的差,分量Cr表示红色分量和一个参考值的差[11]。公式(3)为RGB转换为YCbCr的转换公式。式中:R、G、B的取值范围分别为[0,1];Y、Cb、Cr分量的取值范围分别为[16,235]。
$$ \left[ {\begin{array}{*{20}{c}} \rm Y \\ \rm {Cb} \\ \rm {Cr} \end{array}} \right] = \left[ {\begin{array}{*{20}{c}} {16} \\ {128} \\ {128} \end{array}} \right] + \left[ {\begin{array}{*{20}{c}} {65.481}&{128.553}&{24.966} \\ { - 37.797}&{ - 74.203}&{112} \\ {112}&{ - 93.786}&{ - 18.214} \end{array}} \right]\left[ {\begin{array}{*{20}{c}} \rm R \\ \rm G \\ \rm B \end{array}} \right] $$ (3) 文中的RGB图像中,R、G、B分量分别为[0,255],因此在FPGA中,考虑系统处理实时性的要求,需要将浮点型数据转换为整数部分,便于FPGA快速处理,公式(3)的两边同时乘以256,得到方便FPGA处理的公式(4):
$$ \left[ {\begin{array}{*{20}{c}} \rm {Y'} \\ \rm{Cb'} \\ \rm {Cr'} \end{array}} \right] = \left[ {\begin{array}{*{20}{c}} {4\;096} \\ {32\;768} \\ {32\;768} \end{array}} \right] + \left[ {\begin{array}{*{20}{c}} {65}&{129}&{25} \\ { - 38}&{ - 74}&{112} \\ {112}&{ - 94}&{ - 18} \end{array}} \right]\left[ {\begin{array}{*{20}{c}} \rm {R'} \\ \rm {G'} \\ \rm {B'} \end{array}} \right] $$ (4) 式中:
$\rm Y'$ 、$\rm Cb'$ 、$\rm Cr'$ 为在RGB范围为[0,255]时分别转换出来的值。此时,$\rm R'$ 、$\rm G'$ 、$\rm B'$ 的取值范围分别为[0,255]。公式(4)中用了三次乘法和三次累加完成运算,在FPGA中需要耗时18个时钟周期,为了提高系统的实时性,将式中的乘法运算转换为加法运算,两个时钟周期完成公式转换。改进后的公式如下:
$$ \left\{ \begin{array}{l} \rm Y' = 4\;096 + R' \times 64 + R' + G' \times 128 + G' + B' \times 16 +\\ \;\;\;\;\;\;\;\;\rm B' \times 8 + B' \\ \rm Cb' = 32\;768 - R' \times 32 - R' \times 4 - R' \times 4 - G' \times 64 - \\ \;\;\;\;\;\;\;\;\;\;\;\;\rm G' \times 8 - G' \times 2 + B' \times 64 + B' \times 32 + B' \times16 \\ \rm Cr' = 32\;768 +R' \times 64 + R' \times 32 + R' \times 16 - G' \times \\ \;\;\;\;\;\;\;\;\;\;\;\;\;\; \rm 64 - G' \times 16 - G' \times 8 - G' \times 4 - G' \times 2 -\\ \;\;\;\;\;\;\;\;\;\;\;\;\;\;\rm B' \times 16 - B' \times 2 \end{array} \right. $$ (5) 式中:
$\rm Y'$ 等式右边的$ \times 64$ 、$ \times 128$ 、$ \times 16$ 、$ \times 8$ 是将对应的$\rm R'$ 、$\rm G'$ 、$\rm B'$ 值左移6位、7位、4位、3位,在FPGA中,将相应的$\rm R'$ 、$\rm G'$ 、$\rm B'$ 值左移6位、7位、4位、3位来实现。同理,$\rm Cb'$ 、$\rm Cr'$ 等式右边的乘法运算在FPGA中按照此种方式运算。最后,将$\rm Y'$ 、$\rm Cb'$ 、$\rm Cr'$ 分别除以256,在FPGA中,通过右移8位得到YCbCr彩色图像的YCbCr值。由于每一个像元都可以转换为YCbCr值,视频流格式为Cb1Y1Cr1Y2,每次转换为YCbCr值中,舍弃偶数列转换的Cb、Cr值。 -
文中显示的一种HD-SDI视频格式为1 080p格式(1 920×1080,25 Hz),而转换的视频图像大小为1024×1024,即HD-SDI视频的每行要达到1 920 pixel,每帧图像有1080行。按照SMPTE 274M的标准,在每行1 920 pixel的中间部分填充大小为1024的图像数据,在每行的两边部分填充数据为16的黑边数据图像,在每帧图像1080行的中间部分填充为1024行的视频图像,每帧图像的上下两部分各28行填充数据为16的黑边数据图像。将此种转换方式的数据图像按YCbCr4:2:2输出至视频编码器芯片,转换成标准HD-SDI视频格式输出至后端视频监视器。
另一种HD-SDI视频格式为720p (
$1\;280 \times 720$ ,25 Hz),转换的视频图像大小为$720 \times 720$ ,即HD-SDI视频的每行1280 pixel,每帧720行。按照SMPTE296M的标准,在每行1280 pixel的中间部分填充大小为720的图像数据,在每行的两边部分填充为16的黑边数据图像,在每帧720行填充为720行的视频图像,无空余行填充黑边数据。将此种转换方式的数据图像按YCbCr4:2:2输出至编码器芯片,转换为标准HD-SDI视频格式输出至后端监视器。SD-SDI视频格式为576i (
$720 \times 576$ ,50 Hz),转换的视频图像大小为$576 \times 576$ ,即SD-SDI视频的每行720 pixel,每帧576行。在每行720 pixel的中间部分填充大小为576的图像数据,在每行的两边部分填充为16的黑边数据,每帧576行填充576行的图像数据,无空余行填充黑边数据。将此图像数据按照PAL制式($720 \times 288$ )图像数据,分奇场数据、偶场数据输出,将数据进行10位转换20位,并加扰码变换输出至编码器芯片,转换为标准SD-SDI视频格式输出。 -
为了验证系统设计的正确性,搭建了系统的硬件设计平台,包括大视场相机、所设计的嵌入式模块、Camera Link接口电缆。在实验室对户外场景进行了成像显示实验。实验系统如图4所示。
依据文中所设计的硬件系统及基于FPGA开发的软件系统,对大视场相机的视频图像进行了实时的抽帧、缩放变换,进行了HD-SDI/SD-SDI视频图像的实时显示。视频中间部分大视场相机缩放后的视频图像,对图像上下左右边界测试,大视场范围内图像没有缺失,连续移动相机未出现图像的卡滞现象。结果表明系统设计可行。该视频图像如图5所示。
-
对在MATLAB环境下的最近邻插值法、双线性插值法、三次插值法与在FPGA环境下的双线性插值法的耗时进行了仿真实验。各算法处理一帧图像大小为2 048×2 048,缩放因子为0.5倍,此时在MATALAB和FPGA环境下仿真,所消耗的时间如下。表2为各种处理算法所消耗的时间。从表中得出,在MATLAB环境下,最近邻插值法耗时最短,双线性插值法次之,三次插值法耗时最长。在FPGA环境下,双线性插值法耗时为8.7 ms,比在MATLAB环境下的双线性插值法耗时更短,满足图像实时显示一帧图像40 ms的要求。说明在图像按模式8×8传输时,算法直接利用了FPGA并行处理的优势,极大地节约了算法的处理时间,具有良好的实时性,满足数字图像实时显示的需求。
表 2 各种算法所消耗的时间(单位:ms)
Table 2. Consuming time for some kind of algorithms(Unit:ms)
Algorithm Consuming time Nearest neighbor interpolation in MATLAB 296.4 Bilinear interpolation in MATLAB 355.7 Cubic interpolation in MATALAB 30 736.7 Bilinear interpolation in FPGA 8.7
Design of video image acquisition and SDI display in large field of view
-
摘要: 针对Camera Link接口的大视场高速相机的图像实时存储显示及实时跟踪显示的实际需求,设计了一种基于FPGA的大视场视频图像采集及SDI显示系统。采用了Altera公司的FPGA EP2S90F1020为核心处理器件,外接两片SDRAM MT48LC4M32的硬件系统。提出了基于FPGA的图像实时缩放、Bayer格式彩色图像实时转换为SDI显示的方法,实现了将Camera Link接口的大视场彩色视频图像在SDI视频图像上的实时显示。实验结果表明,该设计方法能将Camera Link接口
$2\;048 \times 2\;048$ 、100 Hz的视频图像实时转换为$1\;920 \times1\;080$ 、25 Hz,$1\;280 \times 720$ 、25 Hz或$720 \times 576$ 、50 Hz三种SDI制式显示。在FPGA环境下,采用该设计方法,整幅图像处理时间为$8.7$ ms,满足系统的实时性要求,为大视场视频图像在嵌入式系统的实时显示提供了一种有效的实现方法。-
关键词:
- FPGA /
- Camera Link /
- 大视场 /
- Bayer /
- HD-SDI
Abstract: According to the real demand of image real-time storage display and real-time tracking display for large field of view and high-speed camera, which was with Camera Link interface, a large field of view image acquisition and SDI display system based on FPGA was designed. FPGA EP2S90F1020 of Altera Company as the core processor and two pieces of SDRAM MT48LC4M32 were used. A method of image real-time zooming based on FPGA and real-time conversion of Bayer format color image to SDI display was proposed. The real-time display of large field of view color video image, which was Camera Link interface, was realized on SDI video image. The experimental results show that the design method can convert the 2 048×2 048, 100 Hz video image of Camera Link interface into$1\;920 \times 1\;080$ , 25 Hz or$1\;280 \times 720$ , 25 Hz, or$720 \times 576$ , 50 Hz SDI display in real time. In the FPGA environment, the whole image processing time is 8.7 ms, which meets the real-time requirements of the system, and provides an effective implementation method for the real-time display of large field of view video image in embedded system.-
Key words:
- FPGA /
- Camera Link /
- large field of view /
- Bayer /
- HD-SDI
-
表 1 相机主要参数
Table 1. Summary of camera characteristics
Characteristics Value Sensor resolution 2 048×2 048 Optical size/cm 2.54 Pixel size/μm2 5.5×5.5 Max frame rate/fps 180 Mono/color Color Camera link clock speed/MHz 65 表 2 各种算法所消耗的时间(单位:ms)
Table 2. Consuming time for some kind of algorithms(Unit:ms)
Algorithm Consuming time Nearest neighbor interpolation in MATLAB 296.4 Bilinear interpolation in MATLAB 355.7 Cubic interpolation in MATALAB 30 736.7 Bilinear interpolation in FPGA 8.7 -
[1] Shu Shuangbao, Liu Chao, Chen Meiwen, et al. A large field of view visible cameras image acquisition and processing technology in EAST device[J]. Fusion Engineering and Design, 2019, 147: 111253. [2] 王国忠. 基于CMOS传感器的高速图像采集装置的研究和设计[D]. 太原: 中北大学, 2019. Wang Guozhong. Research and design of high speed image acquisition device based on CMOS sensor[D]. Taiyuan: North University of China, 2019. (in Chinese) [3] 田家才. 基于FPGA的CMOS视频图像处理算法研究与设计[D]. 桂林: 广西师范大学, 2018. Tian Jiacai. The research and design of CMOS video image processing algorithm based on FPGA[D]. Guilin: Guangxi Normal University, 2018. (in Chinese) [4] Li Guangchun, Su Peidong, Du Shitong, et al. Design of video acquisition and real-time display system based on FPGA [J]. Computer Measurement and Control, 2015, 23(11): 3810-3816. (in Chinese) [5] 吴以凯. 基于FPGA的视频缩放的设计与实现[D]. 镇江: 江苏大学, 2017. Wu Yikai. Design and implementation of video scaling based on FPGA[D]. Zhenjiang: Jiangsu University, 2017. (in Chinese) [6] 巴斯勒工业相机官网. User’s manual for camera link cameras[EB/OL]. (2015-03-24) [2020-07-04] http://www.baslerweb.com/cn/products/cameras/area-scan-cameras/ace2. [7] Huang Biao, Tian Yan, Yao Dawei, et al. A real-time image magnification technology based on edge prediction [J]. Infrared and Laser Engineering, 2013, 42(S1): 268-273. (in Chinese) [8] Xu Yu. A weighted algorithm of image zoom-out based on image sub-block and corner points [J]. Computer and Modernization, 2011, 4: 34-36, 44. (in Chinese) [9] 何蕾, 檀结庆, 张平. 一种线性与非线性相结合的图像缩小算法[J], 2007, 24(5): 303-307. He Lei, Tan Jieqing, Zhang Ping. Method for image zooming-out based on linear and nonlinear combinations[J]. Application Research of Computers, 2007, 24(5): 303-307. (in Chinese) [10] Li Jinwen, An Bowen. Image data conversion from Bayer to YCbCr based on FPGA [J]. Video Engineering, 2013, 37(23): 54-56, 84. (in Chinese) [11] Gonzalez R C, Woods R E, Eddins S L. 数字图像处理(MATLAB版)[M]. 北京: 电子工业出版社, 2005: 152-153. Gonzalez R C, Woods R E, Eddins S L. Digital Image Processing Using MATLAB[M]. 2nd ed. Translated by Ruan Qiuqi. Beijing: Publishing House of Electronics Industry, 2005: 152-153. (in Chinese)