一种基于fpga的视频亚像素亮度插值的方法及其装置的制作方法

文档序号:7554786阅读:606来源:国知局
专利名称:一种基于fpga的视频亚像素亮度插值的方法及其装置的制作方法
技术领域
本发明涉及一种视频图像亮度插值的方法及其装置,具体是指一种基于FPGA的视频亚像素亮度插值的方法及其装置。
背景技术
目前数字视频已经得到了广泛应用,但是数字视频的信息量大,传输时需要的带宽高,存储时需要的存储容量大,所以一般需要先将数字视频进行压缩。在数字视频的压缩标准中,H.264/AVC标准,简称H.264,由于其同等图像质量下两倍于MEPG2的压缩效率得到了越来越广泛的应用。帧间编码是H.264/AVC标准中的的一项关键技术,其中高精度的亚像素补偿是帧间编码的一项核心算法,H.264高精度的亚像素补偿对图像亮度进行1/4插值,并使用插值的结果进行运动估 计,对运动估计后的残差进行编码,相对于札263视频压缩标准使用亮度1/2像素插值(也称为分像素),H.264能够取得更小的运行估计后的残差,编码的码率更小,压缩效率更高。亮度1/4插值算法为先对整数像素点1/2像素插值,然后根据1/2插值后的结果和原始的整数像素点进行1/4像素插值。图1是H.264高精度的亚像素补偿算法中显示的亮度的分像素插值,图中标有大写字母的阴影表示整数像素,标有小写字母的非阴影块表示亚像素(1/2像素和1/4像素点)。1/2像素点的值(图1中标示为b,h, s,m, j,其中b, s称为水平半像素点,而h,m称为垂直半像素点,j称为中心半像素点)而6抽头FIR滤波器的计算出中间值再把取值范围取为0 255,半像素点可以有以下公式计算得到:b = Clipl(((E — 5XF+20XG+20XH_5XI+J)+16)/32) (I)h = CliPl(((A-5XC+20XG+20XM-5XR+T)+16)/32) (2)m = Clipl(((B-5XD+20XH+20XN-5XS+U)+16)/32) (3)s = Clipl(((K-5XL+20XM+20XN-5XP+Q)+16)/32) (4)J=Clipl (((aa-5 X bb+20 X b1+20 X s1-5 X gg+hh)+512)/1024) (5)其中aa、bb、bl、s1、gg、hh中间值的求解需要6抽头的滤波器,例如,bl=E -5*F+20*G+20*H - 5*I+J,其他类推。
<0
2SS;x>255
xmmmm然后,在图1中表示为a、c、d、n、f、1、k和q的1/4位置的分像素值由双线性滤波器对最邻近的两个整数像素和半像素求平均得到。在图1中表示为e、g、p和r的1/4像素由双线性滤波器对对角的两个最邻近的半像素点求平均得到。这12个1/2像素值由以下公式计算得到:
a= (G+b+l)/2 (6)c=(H+b+l)/2 (7)d = (G+h+l)/2 (8)n=(M+h+l)/2 (9)f = (b+j+l)/2 (10) i=(h+j+l)/2 (11)k=(j+m+l)/2 (12) q=(j+s+l)/2 (13)e = (b+h+1) /2 (14) g = (b+m+1) /2 (15)p= (h+s+1) /2 (16) r = (m+s+1) /2 (17)宏块是H.264标准编码的基本单位,每个宏块为16 X 16的图像块。目前已经有一些亮度插值的方法和装置被提出,但这些装置普遍使用4X4大小的图像进行插值,根据札264标准为插值一块大小为MXN(意为水平方向M个像素点,垂直方向N个像素点)的亮度块,最多需要从片外存储器中去除一块(M+5) * (N+5)的参考块。对于4X4的窗口则需要从片外存储器中取得9*9个像素数据,需要从外部存储器读取的数据量为图像块大小的5倍以上。同时这些方法和装置中在使用的6抽头的滤波器是普遍采用独立的水平和垂直的滤波器,其缺点是需要占用大量的外部存储器带宽,并且需要的滤波器数量多,增加了硬件成本。

发明内容本发明所要解决的技术问题在于提供一种节约硬件成本的基于FPGA的视频亚像素亮度插值的方法及其装置。本发明是这样实现的:一种基于FPGA的视频亚像素亮度插值的方法,包括如下步骤:步骤一:从FPGA片内SRAM中读取整数像素点数据,进行1/2水平插值,并将插值结果存储回SRAM中;步骤二:从FPGA片内SRAM中读取整数像素点数据,进行1/2垂直插值,并将插值结果存储回SRAM中;以上步骤一与步骤二无先后顺序,但是不同时进行;步骤三:从FPGA片内SRAM中读取1/2水平插值像素点或1/2垂直插值像素点数据,进行1/2中心插值,并将插值结果存储回SRAM中;步骤四:在进行运动估计时根据目标像素点的位置读取整数像素点或1/2插值像素点进行1/4插值,插值结果直接用于计算1/4插值像素点的运动矢量,或直接使用1/2插值像素点用于计算1/2像素点的运动矢量。所述SRAM 大小为 32Kbit。所述SRAM由四个8Kbit的存储区构成,四个存储区分别用于存储整数像素点、水平分像素插值像素、垂直分像素插值像素、和中心分像素插值像素。所述步骤四中,在进行运动估计时,运动估计装置从所述SRAM中读取整数像素数据或1/2插值像素数据,根据像素位置确定是否进行1/4插值,由1/4像素插值装置完成1/4像素插值,插值结果直接用于分像素运动估计。所述步 骤三中,中心插值是指,将中心插值公式由J=Clipl (((aa-5Xbb+20X b1+20 X s1-5 X gg+hh)+512)/1024)
修改为:aat=Clipl( (aa+16)/32)bbt=Clipl( (bb+16)/32)blt=Clipl((bl+16)/32)slt=Clipl((sl+16)/32)ggt=Clipl((gg+16)/32)hht=Clipl((hh+16) /32)j=Clipl ((aat_5 Xbbt+20 Xblt+20 X slt+5 X ggt+hht+16) /32)其中aat, bbt, bit, sit, ggt, hht 为对滤波器中间计算值 aa, bb, bl, si, gg, hh 进行限幅操作所的结果,该结果即为1/2像素水平插值的结果。一种基于FPGA的视频亚像素亮度插值的装置,包括:—个插值控制装置,用于控制滤波器输入控制装置依次进行水平、垂直和中心像素点插值;

一个SRAM装置,用于存储整数像素点数据和插值后分像素点的数据;一个滤波器输入配置装置,用于根据所述插值控制装置的状态从所述SRAM装置中读取插值所需的整数点像素数据,将整数点像素数据分配到4个插值滤波器的输入端,并将4个输出限度单元的输出数据存储至所述SRAM装置中;一组4个六抽头的四阶流水线的插值滤波器,用于水平、垂直、中心像素点的插值。4个输出限幅单元,用于对滤波器的输出数据进行限幅;若干个1/4插值滤波器,用于在运动估计前进行1/4像素插值。所述SRAM装置大小为32Kbit。所述SRAM装置由四个8Kbit的存储区构成,四个存储区分别用于存储整数像素点、水平分像素插值像素、垂直分像素插值像素、和中心分像素插值像素。所述插值控制装置由一个状态机控制,该状态机有4种状态,除空闲状态外其他三种状态分别对应三种像素点的插值操作,状态机依次为水平、垂直、中心像素的插值状态。所述插值滤波器包括采用移位加法运算代替乘法计算的移位加法器。本发明的优点在于:针对安防领域,图像长期静止或运动物体变化缓慢特点,提出了适用于小范围搜索窗的亮度插值装置,该装置对搜索窗内的像素进行插值,搜索窗的大小为27X27,当对27X27大小的图像进行插值时,需要从外部存储器读取32*32个像素的数据,需要从外部存储器读取的数据量最多为插值图像块大小的的1.4倍,利用FPGA内部的SRAM,作为图像数据存储,极大程度降低了片外存储器访问带宽,并且通过时分复用将水平滤波器和垂直滤波器合并为同一种滤波器,降低了逻辑资源的使用量同时保证了插值效率,在只用4个6抽头的滤波器时就可满足标清数字视频的插值效率要求。

下面参照附图结合实施例对本发明作进一步的描述。图1是H.264高精度的亚像素补偿算法中分像素插值像素位置分布图。
图2是本发明分像素运动估计系统结构图。图3是本发明滤波器输入配置装置数据配置图。图4是本发明6抽头4阶流水线插值滤波器结构图。图5是本发明中1/2插值装置结构图。图6是本发明中插值控制装置状态转移示意图。图7是本发明中32X32个整数像素点的名称及排列示意图。图8是本发明中限幅逻辑处理流程示意图。图9是本发明中1/4像素的插值滤波器的结构图。
具体实施方式FPGA (Field — Programmable Gate Array),即现场可编程门阵列,它是在 PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物。它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。随着高容量低成本的FPGA的推出,目前已经可以使用FPGA进行视频压缩。SRAM是英文Static RAM的缩写,它是一种具有静止存取功能的内存,不需要刷新电路即能保存它内部存储的数据,目前SRAM已经在FPGA中普遍存在,使用FPGA内部的SRAM可以有效提高FPGA资源利用效率,为构造高效的系统创造条件。本发明针对真实环境场景对公式:j = Clipl (((aa-5Xbb+20Xbl+20Xsl-5Xgg+hh)+512)/1024) (5)进行了简化,直接采用水平插值的的结果作为中心插值的数据源,具体是指,将中心插值公式由j = Clipl (((aa-5 Xbb+20 Xb 1+20 X s 1-5 X gg+hh) +512) /1024)修改为:aat=Clipl((aa+16)/32)bbt=Clipl ((bb+16) /32)blt=Clipl ((bl+16)/32)Slt=Clipl((sl+16)/32)ggt=Clipl((gg+16)/32)hht=Clipl((hh+16)/32)j=Clipl ((aat_5 Xbbt+20 Xblt+20 X slt+5 X ggt+hht+16) /32)其中aat, bbt, bit, sit, ggt, hht 为对滤波器中间计算值 aa, bb, bl, si, gg, hh 进行限幅操作所的结果,该结果即为1/2像素水平插值的结果。这样中心插值所使用的滤波器也与水平和垂直滤波器相同,使用这种方法后只需要在解码端也使用同样的方法进行插值即可保证完全不失真,并且即使使用标准的解码器也不会带来视觉影响。但是使用这种方法后会将滤波器的比特位宽由13位减小为8位大幅减小,并且可以达到共用同一种滤波器,并且不 再需要使用单独的SRAM用于存储13bit的aa,bb,…hh这几个数据,节约了大量的逻辑资源及SRAM资源。同时本发明对6抽头滤波器针对FPGA进行了优化,使用移位加法器代替乘法器,并使用了多级流水线技术,提高了滤波器的工作频率,使整个插值装置能够处理标清的数字视频。图2显示了本发明中分像素运动估计的系统结构图,在亚像素插值系统中,插值所需的整数像素数据存储在片外大容量存储器中,在需要插值时由整数像素加载装置将整数像素数据存储到32Kbit的SRAM中,1/2亮度插值装置从上述SRAM中读取整数像素数据或1/2插值像素数据进行1/2像素插值,插值完成后将1/2插值结果存储回上述SRAM中,在进行运动估计时,运动估计装置从上述SRAM中读取整数像素数据或1/2插值像素数据,根据像素位置确定是否进行1/4插值。由1/4像素插值装置完成1/4像素插值,插值结果直接用于分像素运动估计。其中本发明涉及FPGA中的SRAM、1/2亮度插值装置和1/4插值装置。其中1/2插值装置是本发明的核心,其结构图如图5所示。其中插值控制装置根据所述插值方法控制滤波器输入控制装置依次进行水平、垂直和中心像素点插值,滤波器输入装置根据所述插值控制装置的状态从所述32kbit-SRAM中读取插值所需的整数点像素数据,将整数点像素数据分配到4个插值滤波器的输入端,4个六抽头的四阶流水线的插值滤波器进行1/2像素插值,1/2插值结果通过4个输出限幅单元限幅后由滤波器输入装置将结果存储回32kbit-SRAM中。本发明中含有一个插值控制装置。插值控制装置是本插值装置的核心部分,它由一个状态机控制,该状态机的转移状态转移图如图6所示,该状态机有4种状态,除空闲状态外其他三种状态分别对应三种像素点的插值操作,状态机依次为水平、垂直、中心像素的插值状态。本发明装置含有一个32kbit_SRAM装置,该装置为一个容量为32kbit的SRAM,在FPGA中可以由多个块SRAM构成。32kbit-SRAM装置可以由4个8Kbit的存储区构成,这四个存储区分别用于存储整数像素点、水平分像素插值像素、垂直分像素插值像素、和中心分像素插值像素。其中整数像素点数据由整数像素点加载装置从FPGA外部的大容量存储器
写入。 本发明含有4个6抽头的插值滤波器,本发明中使用4级流水线六抽头的滤波器,滤波器使用移位加法运算代替乘法计算有效降低逻辑资源使用率,并使用4级流水线结构可以在FPGA中取得较高的运行频率,该滤波器的计算公式为:DOUT=A - 8*5+020+0*20 - E^+F图4显示了 6抽头滤波器的结构。图4中所有方块均表示寄存器,圆圈表示逻辑运算,加0至加6都是加法器。寄存器的位宽与其前部逻辑运算或寄存器的位宽相同。本发明中采用了四级流水线,相对其他专利中使用3级流水线可以在FPGA中获得更高的运行速度,从而获得更高的插值效率。如图4所示该亮度插值装置含有四个6抽头的滤波器,每个6抽头的滤波器含有6个输入端,所以总共有24个滤波器数据输入端,这四个滤波器分别命名为滤波器0至滤波器3,每个滤波器的输入端分别命名为A到F,与图4中的输入端相对应,对24个输入端命名为FIM-N,其中M=O 3N=A F,例如FIO-A即表示滤波器0的A输入端。本发明含有一个滤波器输入配置装置,用于根据插值控制装置的状态从32kbit-SRAM中读取插值所需的整数点像素数据,将整数点像素数据分配到4个插值滤波器的输入端,并将4个输出限度单元的输出数据存储至32kbit-SRAM中。
其中整数像素点的数量为32X32个,图7表示了 32X32个整数像素点的名称及排列,每个像素命名为PM-N,其中M表示像素所在行号,N表示像素所在列号。将同一行的相邻的四个像素合并为一 32bit的数据存储在32bit宽的SRAM中,即将PM-N,N=4k至N=4k+3,0〈=k〈8合并为一 32bit的数据,同时将该数据命名为PM- (4k-4k+3)。其中整数像素点可以根据以下方法分配至4个插值滤波器.数据配置方法如图3所示:1.当在水平插值时从32kbit_SRAM中依次读出整数像素P0_(0_3)PO-(4-7).. PO-(28-31)Pl-(0-3)。。。。P31-(28-31)(各像素的位置参见图 7),在每个时钟周期将PM- (4k-4k+3)送入FIM-N,并对FIM-N的数据进行调整,其配置方式在图3中用带箭头的虚线表示,其关系如下:F10-A〈=PM_4K+3F10-B〈=PM_4K+2F10-C<=PM-4K+1F10-D〈=PM_4KFIl-A〈=PM_4K+2FI1-B〈=PM_4K+1FI1-C〈=PM_4KFI1-D〈=F10_·AFI2-A〈=PM_4K+1FI2-B〈=PM_4KFI2-C〈=F10_AFI2-D〈=F10_BFI3-A〈=PM_4KFI3-B〈=F10_AFI3-C〈=F10_BFI3-D〈=F10-CFIM-E<=FIM-AFIM-F<=FIM-B2.当在垂直插值时从 32kbit-SRAM 中依次读出 PO-(0-3) Pl-(0-3) P31-(0-3)PO-(4-7)。。。。P31-(28-31)在每个时钟周期将 PM- (4k_4k+3)送入 FM-N,并对 FM-N 的数据进行调整,其配置方式在图3中用带箭头的实线表示,其关系如下:F10-A〈=PM-4k+3FIl-A〈=PM-4k+2FI2-A〈=PM-4k+lFI3-A〈=PM_4kFIM-B<=FIM-AFIM-C<=FIM-BFIM-D<=FIM-CFIM-E<=FIM-D
FIM-F<=FIM-E3.当在中心插值时与垂直插值数据读出顺序相同,并且数据调整方法也与垂直插值的调整方法相同,但是中心插值时从32kbit-SRAM中读取的数据是水平插值后的像素数据。本发明含有4个输出限幅单元,用于对滤波器的输出数据进行限幅。限幅的逻辑处理流程如图8所示,每个滤波器的输出结果是16位的,首先先最后4位舍弃得到数据Dl,然后进行进位操作得到数据D2,进位后根据最高比特D2[12]是否为1,确定结果是否为负值,如果D2[12]为I则限幅结果为0,然后根据次高位D2[11]、D2[10]和D2[9]判断结果是否会超过255,如果D2[11]、D2[10]或D2[9]其中一个为1,则输出数据会大于255,限幅结果为255,其他情况去D[8:1]作为最终的限幅结果.
本发明中含有若干个1/4插值滤波器,1/4插值滤波器的结构图如图9所示,该装置只是将输入的数据A、B和I相加,再右移一位,并将结果存储在寄存器中。1/4像素插值装置位于运动估计装置内部,当需要进行1/4像素运动估计时需要从32kbit-SRAM中同时读取两个像素,这两个像素可以为整数像素也可为1/2插值像素,将这两个像素使用1/4插值滤波器后得到1/4插值像素。本发明使用世界一流的FPGA厂商ALTERA公司的FPGA编译软件QUARTUS进行编译,在EP2C35上可以稳定工作在150MHZ,在150MHZ下对1280*720@30fps的标清视频进行处理,则每个宏块的处理时间不应超过1388个时钟周期,本装置插值一个27*27大小的搜索窗只需要900个时钟周期,假如在视频压缩时处理每个宏块都需要插值一个27*27大小的搜索窗,则本装置能够完全满足压缩标清视频的处理能力。
本发明的有益效果在于:1、本发明适用于FPGA,能够有效利用FPGA内部的SRAM,降低逻辑单元的使用量,并提高运行频率,降低外部内存带宽,而其他专利都是针对ASIC,如果用于FPGA上则需要大量的逻辑单元,和几倍于本发明的内存带宽,并只具有相对本专利较低的性能。2、本发明中水平插值垂直插值中心插值是依次进行的,所以只需要I组滤波器即可完成滤波,而现有技术是同时进行的,至少需要两组滤波器才可同时进行滤波。本发明所使用的滤波器数量少,降低了逻辑单元使用量。3、本发明中1/4插值是在运动估计前通过从SRAM中读取整数像素点和1/2像素点进行插值得到的的,其他现有技术1/4插值是在1/2插值后直接进行的,本发明将亚像素运动估计与亚像素插值分离,使运动估计不再受亚像素插值速率影响,解决了运动估计与亚像素插值性能互相制约的问题。
权利要求
1.一种基于FPGA的视频亚像素亮度插值的方法,其特征在于:包括如下步骤: 步骤一:从FPGA片内SRAM中读取整数像素点数据,进行1/2水平插值,并将插值结果存储回SRAM中; 步骤二:从FPGA片内SRAM中读取整数像素点数据,进行1/2垂直插值,并将插值结果存储回SRAM中; 以上步骤一与步骤二无先后顺序,但是不同时进行; 步骤三:从FPGA片内SRAM中读取1/2水平插值像素点或1/2垂直插值像素点数据,进行1/2中心插值,并将插值结果存储回SRAM中; 步骤四:在进行运动估计时根据目标像素点的位置读取整数像素点或1/2插值像素点进行1/4插值,插值结果直接用于计算1/4插值像素点的运动矢量,或直接使用1/2插值像素点用于计算1/2像素点的运动矢量。
2.如权利要求1所述的一种基于FPGA的视频亚像素亮度插值的方法,其特征在于:所述SRAM大小为32Kbit。
3.如权利要求2所述的一种基于FPGA的视频亚像素亮度插值的方法,其特征在于:所述SRAM由四个8Kbit的存储区构成,四个存储区分别用于存储整数像素点、水平分像素插值像素、垂直分像素插值像素、和中心分像素插值像素。
4.如权利要求1所述的一种基于FPGA的视频亚像素亮度插值的方法,其特征在于:所述步骤四中,在进行运动估计时,运动估计装置从所述SRAM中读取整数像素数据或1/2插值像素数据,根据像素位置确定是否进行1/4插值,由1/4像素插值装置完成1/4像素插值,插值结果直接用于分像素运动估计。
5.如权利要求1所述的一种基于FPGA的视频亚像素亮度插值的方法,其特征在于:所述步骤三中,中心插值是指, 将中心插值公式由j = Clipl (((aa-5 Xbb+20 Xb1+20 X s1-5 X gg+hh)+512)/1024) 修改为:aat=Clipl((aa+16) /32)bbt=Clipl((bb+16) /32)blt=Clipl((bl+16)/32)Slt=Clipl((sl+16)/32)ggt=Clipl((gg+16)/32)hht=Clipl((hh+16) /32) j=Clipl ((aat-5Xbbt+20Xblt+20Xslt+5Xggt+hht+16)/32) 其中aat, bbt, bit, sit, ggt, hht为对滤波器中间计算值aa, bb, bl, si, gg, hh进行限幅操作所的结果,该结果即为1/2像素水平插值的结果。
6.一种基于FPGA的视频亚像素亮度插值的装置,其特征在于:包括: 一个插值控制装置,用于控制滤波器输入控制装置依次进行水平、垂直和中心像素点插值; 一个SRAM装置,用于存储整数像素点数据和插值后分像素点的数据; 一个滤波器输入配置装置,用于根据所述插值控制装置的状态从所述SRAM装置中读取插值所需的整数点像素数据,将整数点像素数据分配到4个插值滤波器的输入端,并将4个输出限度单元的输出数据存储至所述SRAM装置中; 一组4个六抽头的四阶流水线的插值滤波器,用于水平、垂直、中心像素点的插值。
4个输出限幅单元,用于对滤波器的输出数据进行限幅; 若干个1/4插值滤波器,用于在运动估计前进行1/4像素插值。
7.如权利要求6所述的一种基于FPGA的视频亚像素亮度插值的装置,其特征在于:所述SRAM装置大小为32Kbit。
8.如权利要求7所述的一种基于FPGA的视频亚像素亮度插值的装置,其特征在于:所述SRAM装置由四个8Kbit的存储区构成,四个存储区分别用于存储整数像素点、水平分像素插值像素、垂直分像素插值像素、和中心分像素插值像素。
9.如权利要求6所述的一种基于FPGA的视频亚像素亮度插值的装置,其特征在于:所述插值控制装置由一个状态机控制,该状态机有4种状态,除空闲状态外其他三种状态分别对应三种像素点的插值操作,状态机依次为水平、垂直、中心像素的插值状态。
10.如权利要求6所述的一种 基于FPGA的视频亚像素亮度插值的装置,其特征在于:所述插值滤波器包括采用移位加法运算代替乘法计算的移位加法器。
全文摘要
一种基于FPGA的视频亚像素亮度插值的方法及装置,包括从FPGA片内SRAM中读取整数像素点数据,进行1/2水平插值,并将插值结果存储回SRAM中;从FPGA片内SRAM中读取整数像素点数据,进行1/2垂直插值,并将插值结果存储回SRAM中;从FPGA片内SRAM中读取1/2水平插值像素点或1/2垂直插值像素点数据,进行1/2中心插值,并将插值结果存储回SRAM中;在进行运动估计时根据目标像素点的位置读取整数像素点或1/2插值像素点进行1/4插值,插值结果直接用于计算1/4插值像素点的运动矢量,或直接使用1/2插值像素点用于计算1/2像素点的运动矢量。本发明可节约硬件成本。
文档编号H04N7/46GK103237211SQ20131011717
公开日2013年8月7日 申请日期2013年4月7日 优先权日2013年4月7日
发明者许勇, 刘灵辉, 郑维宏 申请人:福建星网视易信息系统有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1