新闻中心

EEPW首页 > EDA/PCB > 设计应用 > 基于FPGA实现固定倍率的图像缩放

基于FPGA实现固定倍率的图像缩放

作者: 时间:2012-07-02 来源:网络 收藏

F(x,y)的值可以对其邻域的原始进行二维卷积运算得到。
c.JPG
其中mxn为邻域范围,f(i,j)是输入原始,s(i,j)为系数函数。
因为中邻近的像素存在着相关性,所以输出图像像素可以依据其在原始输入图像映射位置邻域的像素数据卷积得到。邻域范围内各个像素的相关度由系数函数决定,邻域的范围决定了算法的运算速度。
基于硬件实现固定的图像缩放,为了降低设计的复杂性,提高图像缩放算法的运算速度,增强系统的实时性,将2维卷积运算分解成2次1维卷积运算,对输入原始图像像素先进行行方向的卷积,再进行列方向的卷积,从而得到输出图像像素。

2 图像缩放的实现
2.1 基于FPGA实现图像缩放的功能结构
基于FPGA实现图像缩放的功能结构图如图2所示。

本文引用地址:https://www.eepw.com.cn/article/190182.htm

d.JPG


卷积计算模块的硬件结构由算法决定,每个点时钟周期内,对输入原始图像像素和系数先进行行方向的卷积,再进行列方向的卷积,从而得到输出图像像素。系数产生功能是依据控制模块确定的状态,产生算法要求的系数。输入缓存由控制模块不断刷新,保证每一时钟输入给卷积计算模块相应的像素数据。输出缓存提供下一环节数据流接口。
控制模块是核心逻辑部分,可以采用逆向映射方式(按照输出像素的时间顺序递增,选择对应的输入像素得到结果),也可以采用顺向映射方式(直接在输入像素的时序中产生输出像素)。
逆向映射方式工作在输出图像的时钟域,控制模块根据缩放、分辨率和同步信号,确定输入像素坐标的增量大小,使得在每一时钟周期输入缓存中出现相应的像素数据。因为逆向映射方式需要使输出时钟域与输入时钟域保持同步,所以需要大容量的输入数据存储空间,才能确保在每个时钟周期提供相应的输入像素数据。顺向映射方式输入和输出像素有很强的时序对应关系,按照输入像素的时序进程实时确定输出像素的时序,输出图像分辨率发生变化,但帧频一致。图像缩放过程中,输入一个像素可能会输出2个或3个像素,控制模块可以采用输出缓存、双口RAM、变换时钟域、增加数据总线宽度等方法达到这种同步。顺向映射方式符合输入图像的时序,不需要大容量的数据存储空间,具体根据图像缩放算法的邻域大小而定。
2.2 基于FPGA实现图像缩放的方法
基于FPGA实现图像缩放时,无论是逆向映射方式还是顺向映射方式,控制模块的设计都比较复杂。为了发挥FPGA的优势,大幅度降低设计难度,简化硬件结构,文中把图像缩放过程设计为一个单元体的循环过程,在单元体内部,可以事先计算出卷积系数。例如,把每行720个像素,放大到768个像素,相当于每输入15个像素,输出16个像素。此时可以把15个像素作为一个单元体,事先计算出每个输入像素周期的卷积系数,在FPGA中设计一个包含15种情况的状态机即可。单元体的像素数量越少,事先计算卷积系数和状态机设计的工作量就越少,因此像素的数量控制在20个以内,必要时可以采用近似的整数比。当输出像素的数量与实际要求相差很小时,图像边缘部分增加或减少几个像素对显示效果影响甚微,因此各种图像缩放情况下,相应个数的输入像素都可以作为一个合适的单元体。
为论述方便,文中以将768x576的输入图像放大到1 024x768为例,说明基于FPGA实现对输入原始图像像素先进行行方向的卷积,再进行列方向的卷积,从而得到输出图像像素。



关键词: FPGA 倍率 图像

评论


相关推荐

技术专区

关闭