微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 基于FPGA的实时视频信号处理平台的设计,包括电路图及源代码

基于FPGA的实时视频信号处理平台的设计,包括电路图及源代码

时间:06-04 来源:互联网 点击:

能信号。

系统工作时,主控制器模块首先向输出缓冲中写入一行数据,在读使能信号有效时读取FIFO中的数据,当快读空时,触发主控制器模块从DDR存储器中再读取一行数据并写入到输出缓冲中,由于输出缓冲的读使能信号是输出时序信号的行场同步信号都有效时生成的,行同步信号有消隐时间,所以输出缓冲模块不会出现读空现象。

  1. 色空间转换模块

该模块将输出缓冲模块输出的16位YCbCr(4:2:2)格式视频信号转换成RGB空间(8:8:8)格式。首先将16位YCbCr(4:2:2)格式信号采用临近插值算法生成24位YCbCr(4:4:4)格式视频信号。根据CCIR-601标准,数字YCbCr色空间到RGB色空间转换的公式为:

其中,Y的取值范围是(16,240),Cb、Cr的取值范围是(16,235)。

该转换公式实现时,由于含有小数乘法,可将小数乘以211,取整进行乘法运算,将运算结果右移11位,可近似求得小数的乘法运算。

该模块生成的RGB视频信号经外部D/A转换后,可直接输出到VGA接口,则图像传感器采集的图像可在VGA显示器上实时显示。

  1. 图像放大模块

该模块实现图像的分辨率由736*576放大到1024*768。

本项目选用一种特定比例的图像放大算法。特定比例的图像放大算法的出发点是利用给定的放大比例寻找一个简单、易于实现且具有较高精度的核函数。其基本原理是,选择两个互质的整数q和p,使其比值q/p与给定的放大比例尽可能接近。于是放大算法简化为:利用原始图像的p个离散值求得连续核函数模型参数,并用采样率q对连续核函数模型重新采样,得到放大后的q个像素值。在水平和垂直方向上重复循环若干次可得到整幅图像的缩放结果。

将水平和垂直放大比例分别记为SC_X和SC_Y,则有:

SC_X = 1024/736 ≈ 1.3913

SC_Y = 768/576 ≈ 1.3333

因4/3 ≈1.3333与SC_Y近似,IZAS算法的列处理过程选择将3行原始图像滤波插值扩展为4行,即选取垂直放大比例。SC_Y0 = 4/3

7/5 = 1.4与SC_X接近,IZAS算法的行处理过程选择将5列原始图像滤波插值扩展为7列,即选取水平放大比例,SC_X0 = 7/5

垂直方向放大将3个原始像素放大生成4个新像素,其核函数公式:

f0 = g0

f1 = 1/4 g0+3/4 g1

f2 = 2/4 g1+2/4 g2

f3 = 3/4 g2+1/4 g3

其中g表示原始输入像素数据,f表示放大处理后输出的像素数据。

水平方向放大将5个原始像素放大生成7个新像素,其核函数公式:

f0 = g0

f1 = 2/7 g0+5/7 g1

f2 = 4/7 g1+3/7 g2

f3 = 6/7 g2+1/7 g3

f4 = 1/7 g2+6/7 g3

f5 = 3/7 g3+4/7 g4

f6 = 6/7 g4+1/7 g5

插值模块的实现需要一定的行缓存,来缓存三行数据,然后可根据插值算法来实现。设计中利用FPGA内部的块RAM存储器(Block RAM)来作为行缓存。

该模块内部功能模块如图9所示,数据传输控制模块控制对输入缓冲数据的更新和读取,并且在系数定标器模块选择相应的插值系数送给插值模块进行插值计算。本项目采用的IZAS放大算法计算每一个目标图像像素值需要原始图像相邻3行像素,因此输入缓冲模块采用3个双口SRAM来实现。可将原始图像的相邻3行像素写入双口SRAM中,计算出利用这三行数据能插值出的所有目标像素,然后更新较早写入双口SRAM对应的一行像素数据再进行插值计算。系数定标器模块含有从分辨率736*576放大到分辨率1024*768所对应的插值系数。

图9 图像放大模块内部结构图

数据存取控制处理由数据传输控制模块配合系数定标器模块和输入缓冲来实现。控制模块选择当前行数据存入哪一个双口SRAM并产生读写地址。例如水平方向要进行2倍放大时要读取2个原始像素,计算出4个插值像素,而在进行7/5倍放大时要读取5个原始像素,计算出7个插值像素。因此在进行2倍放大时连续读取缓冲里面的2个原始像素后要停顿2个像素周期再读取新的原始像素,而进行7/5倍放大时连续读取缓冲里面的5个原始像素后要停顿2个像素周期再读取新的原始像素。

当一帧中的第一行图像数据到来时,数据传输控制模块先将此行数据写入SRAM1中,不读取另外两个SRAM,第二行数据到来时控制模块将此行数据写入SRAM2中,第三行数据到来时控制模块将此行数据写入SRAM3中,当第四行数据到来时将此行数据写入SRAM1中,当第五行数据到来时,将此行数据写入SRAM2中如此反复完成数据的缓冲。另外因为图像在垂直方向也要进行4/3倍的放大,即把三行数据计算出四行,所以每缓冲三行后要停止一行缓冲。

图10 插值算法模块内部寄存器

插值模块内部对R、G、B信号各有1组9个8位的寄存器,如图10所示。这9个寄存器分成a,b,c三组,分别接收来自3个双口SRAM(SRAMi,i = 1,2,3)的输出数据。在输入时钟的同步下,寄存器a

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top