- 1、本文档共8页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
?
?
基于FPGA的视频缩放设计与实现
?
?
张晓晶
摘要:利用Altera公司CycloneⅢ系列的FPGA作为主控芯片,通过VHDL语言编程,设计实现了一个实时的视频缩放系统。本文将双线性插值算法分解成两个一维插值算法,先实现行方向的插值,再实现列方向的插值,大大简化了FPGA实现视频缩放的处理过程。实验结果表明,处理后图像无明显锯齿现象,达到了预期效果。
关键词:图像缩放;双线性插值;FPGA
中图分类号:TP391.41文献标识码:A文章编号:1007-9416(2019)11-0118-02
0引言
实时视频处理是图像处理领域的研究热点之一,广泛应用于可视电话、视频会议,监控、通信等领域中。图像缩放又是图像处理的一个基本问题,随着显示器分辨率的提高,原有的视频源需要采用视频缩放的方法才可以在不同的显示器中逐点显示。本文基于FPGA实现了一个实时视频处理系统。FPGA的优点在于其灵活的可编程性和强大的并行处理能力,可以把很多图像处理功能集成在一个FPGA芯片上,这里主要阐述基于FPGA的视频缩放的实现。缩放采用的几何变换是双线性内插法。
1系统整体设计
本系统的硬件需求如:FPGA型号为EP3C55F484,A/D芯片TVP5150,D/A芯片ADV7123和ADV7171,两块16bit数据线的SRAM。系统板如图1所示。
1.1信号采集
在系统前端,先利用摄像头取得光学图像。摄像头的输出为一路PAL制复合视频信号,完成光信号到模拟电信号的转变。之后通过TVP5150视频解码芯片将模拟信号转变为数字信号。利用FPGA对TVP5150进行I2C配置,选择输出格式为ITU-RBT.656,即时钟频率为27mhz的4:2:2取样格式的YCrCb信号。
1.2场解码
一帧完整的PAL制式ITU-RBT656数据分为奇偶两场,23-311行为偶数场有效数据,366-624行为奇数场有效数据,其余为行场控制信号或无效数据。每行前288byte为行控制信号,其中最前面的4byte为EAV(有效视频结束)信号,最后面的4byte是SAV(有效视频起始)信号[1]。
EAV信号和SAV信号均有3byte的前导:FF,00,00。最后1byte为XY。F为奇偶标志位,V为垂直消隐标志位,H为水平消隐标志位,P3,P2,P1,P0为保护比特位。首先通过连续判断FF,00,00和XY来进行F、V、H的提取与检测。若H为0,即为SAV,再去判断F,若F为0,即为奇数场,若F为1,即为偶数场。每当F从1跳变到0,则为一帧的帧头。之后去判断V,若V为0,则为场正程。由于我们只处理有效数据,所以在检测到帧头的情況下,若H=0且V=0,则此行为有效数据。
1.3帧缓存
因为ITU-RBT.656是隔行数据,需要利用两块SRAM进行乒乓存储实现逐行与隔行之间的转换。在本实验的设计中,将以一帧数据为单位进行存储。当向SRAM1中写当前帧时,读的是SRAM2中存储的前一帧,当SRAM1中存好一帧后,才会进行乒乓切换,读取SRAM1中的数据。
一帧中的有效数据为720×576个像素,开始时写地址指针位于(0,78),当检测到帧头且H=0、V=0后,第一行有效数据的SAV中的FF、00会写入(0,78),随后的00、XY会写入(0,79),随后的第一个有效像素会被写入(0,80),第一行的最后一个像素写入(0,719)。由于需要逐行变隔行,而进来的下一行数据依旧为奇数场,所以写地址的指针跳转到(2,78),然后重复第一行的存储方式。存储时,若发现SAV中的F从0跳变到1时,意味着奇数场结束,进来的将是偶数场的数据,写地址指针将跳到(1,78),进行偶数场的存储。当F从1跳变到0,即为新的一帧帧头,写地址指针会重新位于(0,78),如此循环,周而复始[2]。
2双线性插值的图像缩放在FPGA上实现
2.1双线性内插法
双线性插值是利用图像像素点周围四个点的相关性,即目标坐标的像素值f(i+u,j+v)是由原图像中四个坐标分别为(i,j),(i+1,j),(i,j+1)和(i+1,j+1)的像素值决定。公式为:f(i+u,j+v)=(1-u)(1-v)f(i,j)+(1-u)vf(i,j+1)+u(1-
这是一个二维算法,既要考虑图像行的信息又要考虑列的信息。本文为了FPGA编程实现的简单,把二维插值算法分解为两个一维插值算法:
(1)先进行行方向上的插值:
在数据存入时实现行插值算法,然后数据存入RAM中,在数据读出时实现列插值算法,从而大大简化了FPGA实现双线性插值的过程。
2.2缩放算法在FPGA上实现
基于FPGA实现图像缩放时,无论是逆向映射方式还是顺向映射方式。控制模块的设计都比较复杂。为了发挥FPGA的优势,降低设
文档评论(0)