快速高效无损图像压缩系统的低功耗硬件实现
2014-08-26薛金勇黑勇陈黎明
薛金勇,黑勇,陈黎明
(中国科学院 微电子研究所,北京100029)
数字图像传感器广泛应用在各种视频应用领域,由于图像的数据量很大,所以在图像传输前要对图像进行有损或无损压缩,有损压缩一般应用在对图像质量要求不高的应用领域,但是医学图像等一些高端应用领域要求图像必须采用无损压缩。快速高效无损图像压缩系统是一个快速高效的无损图像压缩算法,比工作在无损模式下的JPEG快5倍,且能够达到相同的压缩比[1],同时快速高效无损图像压缩系统(fast and efficient lossless image compression system,FELICS)算法复杂度低,因此非常适合应用于医疗内窥镜系统[2]。但是算法中Golomb-Rice编码[3]的k参数选取需要一块大容量的存储器,更新存储器的过程更是消耗大量功耗与时钟周期,不定长编码也限制了系统的吞吐量。本文据此提出了一种更加易于超大规模集成电路(very large scale integration,VLSI)实现的低功耗 VLSI-oriented FELICS算法,简化了k参数的选取,降低了系统的设计复杂度,提高了系统吞吐率。
1 FELICS算法
编码一帧图像,FELICS算法不进行任何编码直接输出前2个像素,然后按照光栅扫描顺序依次编码像素,编码步骤如下[1]:
1)选取当前像素P和2个相邻像素N1、N2。N1与N2已知,且已编码,为P提供相关信息,其选取规则如图1。
2)计算预测区间下界L=min{N1,N2},上界H=max{N1,N2},预测上下文 Δ=H-L。
3)如果L≤P≤H,像素P落在预测区间[L,H],编码1 bit的0,表示像素P落在预测区间内,然后对P-L在[0,Δ]内进行修正的二元编码;如果L>P,则像素P低于预测区间,编码1 bit的1,表示像素P落在预测区间外,再用1 bit的0表示低于预测区间,然后计算出P点与预测区间边界的差值D=L-P-1,对该差值D进行Golomb-Rice编码。
如果P>H,则像素P处于高于预测区间,编码1 bit的1,表示像素P落在预测区间外,再用1 bit的1表示高于预测区间;然后计算出P点与预测区间边界的差值D,D=P-H-1,对该差值D进行Golomb-Rice编码。
图1 当前像素和相邻像素Fig.1 Current pixel and the two nearest neighbors
1.1 修正的二元编码
对P-L在[0,Δ]内进行修正的二元编码,即如果Δ+1是2的幂,使用编码字长为lb(Δ+1)的简单二元编码;否则调整编码方式,一些值的编码字长为⎿lb(Δ+1)」,另一些编码字长为「lb(Δ+1)⏋。由于像素落在预测区间[L,H]中间的概率较大,所以对其采用较短的编码。
1.2 Golomb-Rice 编码
Golomb-Rice编码方法分为3步:
1)参数确定:在开始一帧图像处理前建立一个编码累加表C[Δ][k],其中Δ取值范围同像素值的变化范围,k取值范围为0至像素深度。对于像素深度为8的Bayer图像,累加表为256×8的二维数组。每次Golomb-Rice codes编码时,根据Δ0=H-L确定k,即选取最小的k0,使
对于每一个预测上下文Δ,编码累加表C[Δ][k]记录了使用每一个可能的k值(0,1,…,7)时Golomb-Rice编码的编码总长度,同时使用令编码总长度最小的k值进行下一次编码。
2)Golomb-Rice编码:参数k确定后,对D/2k进行一元编码;后对差值D剩余的低k位进行二元编码。采用此种编码单个像素的编码长度最长可达258 bits。
3)参数更新:k值确定后,更新编码累加表:
2 VLSI-oriented FELICS算法
观察FELICS的编码过程,Golomb-Rice编码的k参数选取是影响压缩效率的关键因素,k参数选取根据最少编码位确定,编、解码器要在Golomb-Rice编码下对Δ(0~255),在k(0~7)下累计编码位,从而需要256×8Wbits的存储空间,W表示编码累加值的位宽。累计编码位的过程也要消耗额外的操作周期。
FELICS是不定长编码,单个像素的编码长度在Golomb-Rice编码时最长可达258 bits,因此不论是串行还是并行编码输出,都不易于硬件实现,限制了系统的吞吐率。
本文提出的VLSI-oriented FELICS采用限长Golomb-Rice编码,可以简化参数k的选择和更新步骤,消除了256×8Wbits编码累加表存储空间,参数k的选择可以在一个时钟周期完成,提高了编码效率,易于低功耗硬件实现;同时限长Golomb-Rice编码使得单像素编码不超过16 bits,输出装置的输出缓冲器可在单周期内完成单个像素的编码输出操作,更适合于实时图像压缩,能有效提高系统吞吐率。
2.1 限长Golomb-Rice编码方法
像素P落在预测区间外,对D进行限长Golomb-Rice编码,分为3步:
1)参数确定:参数k的确定根据图像的上下环境关系确定,采用JPEG-LS[4-5]中的序列参数估计,参数k估计基于误差绝对值的期望,计算公式为
但由于准确的计算量化误差绝对值的期望比较困难,在JPEG-LS编码过程中使用误差的平均值,设置2个变量N和A,其中N表示到目前为止出现的误差的数,A表示到目前为止误差绝对值的累计值。k参数满足k=min{k'|2k'N≥A},即最小的k值使2kN≥A成立。在本设计中,N为编码落在预测区间外的像素数目,A为像素落在预测区间外的误差累计。至此,k参数的选取简化为计算A与N的最高非零位的差值,如果N通过左移使之最高非零位与A对齐,且值不小于A,则k参数为A与N的最高非零位的差值,否则为A与N的最高非零位的差值加1。通过对胃窥镜图像进行仿真,平均压缩比由2.66降为2.63,但是硬件复杂度得到了极大降低,更易于VLSI实现。
2)限长的Golomb-Rice编码:确定参数k后,进行Golomb-Rice编码时,当需要编码的数值D远大于2k时,码字会变得很长。因此如果D/2k≤5,则编码为差值D的Golomb-Rice编码;否则编码采用限长编码 {6'b000000+8'bD},由于 FELICS是前缀编码,使用6'b000000用来表示Golomb-Rice采用了限长编码,差值D以其 8 bits二进制表示为8'bD,连同指示像素P落于预测区间外的1 bit编码、以及指示像素P高于或低于预测区间的1 bit编码,单个像素的编码长度最大为16 bits。
3)参数更新:在完成限长的Golomb-Rice编码后,对参数进行更新。利用图像的局部特性,为了获得更好的压缩效果,当N超过一定阈值时,将N和A归零,阈值通常取32~256的数,这样k值主要取决于当前像素附近的局部图像,通过对胃窥镜图像进行仿真,阈值取32可以获得较好的压缩效果;否则N=N+1,A=A+D。
对12幅标准测试图像(图2)的压缩结果表明(如表1),本文VLSI-oriented FELICS相比FELICS,压缩比下降了约为1.7%。在低功耗内窥镜系统中,对12幅医学图像肠胃图(如图3)R通道的压缩结果表明,FELICS算法平均压缩比约为2.659;VLSI-oriented FELICS的平均压缩比约为2.626,相比FELICS压缩比下降约为1.2%;文献[6]参数k采取定值2,平均压缩比约为2.476,相比FELICS压缩比下降约为6.9%。对比文献[6]参数k采取固定值,本文中参数k采取自适应选取,能够更好的适应图像特征,对大部分图像均能获得良好的压缩比,同时硬件与时钟周期的开销也非常低。
VLSI-oriented FELICS硬件实现消除了256×8Wbits编码累加表存储空间,复杂度和功耗可大幅减小,参数k选择可在一个时钟周期完成,编码效率显著提升。
图2 标准测试图像Fig.2 Standard test images
表1 VLSI-oriented FELICS与FELICS对标准图像压缩率比较Table 1 Comparison of compression ratio between VLSI-oriented FELICS and FELICS
图3 医学图像肠胃图Fig.3 Medical images of intestines and stomach
2.2 Bayer图像的 VLSI-oriented FELICS 扩展
Bayer图像格式被广泛的应用在彩色数字图像传感器[7]。GBRG格式Bayer图像,其RGB三色通道间的像素相关性较小,单色通道内的像素相关性较大[8],在编码时为了去除更多图像冗余信息,要对上述的FELICS算法针对Bayer图像进行适当的调整,对Bayer图像的RGB三色分别进行FELICS压缩,以达到更高的压缩比。在编码时需要根据当前像素P所处的通道选取同通道内的相邻像素进行FELICS编码,随着当前像素所处的通道变化,不同通道的FELICS压缩交叉进行,编码依序送入输出缓冲器。
FELICS对Bayer图像的扩展表现在图像压缩实施过程中相邻像素的选择,以及k参数的维持,下面分别介绍。
2.2.1 相邻像素的选择
对于Bayer图像,同通道内的相邻像素选取规则如FELICS算法描述。但同通道内的像素在整幅图像中是隔行或者隔列相邻的,所以在选取相邻像素时必须越过相邻的行和列,在同通道内按FELICS算法相邻像素规则选取,如图4所示。
图4 Bayer图像相邻像素的选取规则Fig.4 The two nearest neighbors in Bayer image
2.2.2k参数的维持
对Bayer图像的RGB三通道分别维持k参数选取变量N、A、k:
1)参数确定:对Bayer的每个通道维持各自的变量N和A,分别为变量NG1、AG1,NB、AB,NR、AR,NG2、AG2。在Golomb-Rice编码时,判断当前像素P所处的通道,选择相应的N和A。如当前像素处于R通道,则N=NR,A=AR。k参数满足公式k=min{k'|2k'N≥A}。
2)参数更新:在完成限长的Golomb-Rice编码后,对参数进行更新。判断当前像素P所处的通道,更新相应的N和A。如当前像素处于R通道,则更新NR,AR。
本文针对Bayer图像的FELICS扩展能够对Bayer图像进行良好的快速无损压缩。Bayer图像所需存储空间本身是RGB格式图像的1/3[8],在低功耗的内窥镜系统中,VLSI-oriented FELICS对医学图像的压缩比可达2.6,因此可以得到约7.8的无损图像压缩比。
综上,本文的 VLSI-oriented FELICS消除了256×8×Wbits编码累加表存储空间;参数k选择可在一个时钟周期完成;单像素编码不超过16 bits,输出编码单元的输出缓冲器可在单周期内完成单个像素的编码输出操作;针对Bayer图像的FELICS扩展能够对Bayer图像进行较好的快速无损压缩。因此VLSI-oriented FELICS更适合于实时图像压缩系统,更易于VLSI的低功耗实现。
3 VLSI-oriented FELICS硬件实现
设计采用3级流水线,Bayer图像大小可配置,系统时钟包括图像数据传输时钟PCLK和工作时钟CLK,采用一块深度可配置的双时钟异步FIFO缓存图像数据。压缩后的图像数据经过解压缩与图像插值将图像彩色复原,系统框图如图5。
图5 VLSI-oriented FELICS系统框图Fig.5 Block diagram of VLSI-oriented FELICS system
硬件实现包括控制单元,编码预测单元,编码单元和编码输出单元。控制单元判断一幅图像的开始与结束,产生控制信号协调各个模块的工作;编码预测单元将传感器的输入像素存储,产生当前像素P、相邻像素N1与N2、预测上下文Δ;编码单元进行修正的二元编码或者限长Golomb-Rice编码,输出编码的数据与位长;编码数据每组成16 bits,编码输出单元将其输出。设计整体采用流水线结构,用以提高系统的时钟频率,硬件结构框图如图6。表2是本文算法与表文献[6,9]设计复杂度与硬件开销的对比。从表2可以看出本文提出的针对Bayer图像的FELICS扩展算法仅使用7.02 K门与10.2 KBits的存储器,功耗为 26.8 μW/MHz,吞吐率为60 f/s,由于文献[6]要求对全高清图像进行压缩,因此硬件实现对速度要求非常高,采用了并行结构,但对其吞吐率归一化并且考虑图像传输格式因素,其吞吐率与本文的实现具有一定的可比性。最终,相较文献[6,9],本文的实现均具有一定优势或者可比性,其VLSI设计复杂度低、功耗低,非常适合对功耗与面积要求极高的内窥镜系统。
图像传感器采用OmniVision公司的OV7649,其VGA帧时序[10]如图7。当图像数据传输时钟PCLK为24 MHz时,系统的吞吐率可以达到60 f/s。
设计使用 SMIC 0.13 μm的工艺,进行 DC综合,Prime Power功耗分析,其特征参数如表3。最后设计经过了FPGA验证与实现,符合设计要求。
图6 VLSI-oriented FELICS硬件结构框图Fig.6 Block diagram of hardware architecture of VLSI-oriented FELICS
表2 与已发表文献比较Table 2 Comparisons with existing works
图7 VGA帧时序图Fig.7 VGA frame timing diagram
表3 设计参数Table 3 Specification of the design
4 结论
本文提出了一种更加易于VLSI实现的低功耗VLSI-oriented FELICS算法:1)采用限长 Golomb-Rice编码,简化了k参数的选取,消除了大容量的存储器以及操作周期;自适应的选取过程使得修改后的FELICS算法对不同特征的图像仍然保证了图像的压缩效果;限长编码有效的提高了系统的吞吐率。2)更加适合硬件实现,通过合理的划分流水线,可以获得更大的系统吞吐量,以满足更广泛的应用,如全高清视频应用[6]等。3)针对Bayer图像格式的算法扩展进一步扩展了算法的应用范围。4)在SMIC 0.13 μm工艺条件下,完成了算法的VLSI设计、FPGA验证以及功耗分析。系统工作时钟为25 MHz,图像数据时钟为24 MHz时,VGA图像的吞吐率可以达到 60 f/s,功耗为 669 μW,每帧的功耗仅为11.15 μW。
[1]HOWARD P G,VITTER J S.Fast and efficient lossless image compression[C]//IEEE Data Compression Conference.Snowbird,USA,1993:351-360.
[2]IDDAN G,MERON G,GLUKHOVSKY A,et al.Wireless capsule endoscopy[J].Nature,2000,405:417.
[3]GOLOMB S W.Run-Length Encodings[J].IEEE Transactions on Information Theory,1966,12(3):399-401.
[4]WEINBERGER M J,SEROUSSI G,SAPIRO G.The LOCO-I lossless image compression algorithm:principles and standardization into JPEG-LS[J].IEEE Transactions on Image Processing,2000,9(8):1309-1324.
[5]WU X,MEMON N.Context-based,adaptive,lossless image coding [J].IEEE Transactions on Communications,1997,45(4):437-444.
[6]TSAI T H,LEE Y H,LEE Y Y.Design and analysis of high-throughput lossless image compression engine using VLSI-oriented FELICS algorithm[J].IEEE Transactions on Very Large Scale Integration(VLSI)Systems,2010,18(1):39-52.
[7]BAYER B E.Color imaging array:USA,3,971,065[P].1976-5-12.
[8]XU Xinfeng,HEI Yong.A shortcut to compressing Bayerpattern imagery losslessly[C]//IEEE International Congress on Image and Signal Processing.Tianjin,2009:1-4.
[9]CHEN Xinkai,ZHANG Xiaoyu,ZHANG Linwei,et al.A wireless capsule endoscope system with low-power controlling and processing ASIC [J].IEEE Transactions on Biomedical Circuits and Systems,2009,3(1):11-22.
[10]OmniVision Technologies.OV7649/OV7149 CMOS VGA(640 x 480)CAMERACHIPTM[Z].Sunnyvale:OmniVision Technologies,2003:8-9.