基于FPGA的QUIC无损图像压缩算法设计

2018-02-25 02:39龚楠张津荣赵东升
电子技术与软件工程 2018年7期

龚楠 张津荣 赵东升

摘要 QUIc是一种预测编码算法。它在只可以压缩灰度图像的SFALIC算法的基础上,增加了RLE编码,从而可以压缩彩色图像。采用FPGA硬件实现该算法不仅可以实时压缩各种彩色图像,而且可以将其部署到需要无损图像压缩的实时终端系统中。本文通过研究QUIc算法的原理及关键技术,提出了一种基于FPGA硬件实现QUIc无损图像压缩算法的设计方案,并通过实验对其有效性进行了对比分析和验证。

【关键词】QUIc 无损压缩 FPGA

1 引言

当今的社会是一个互联网高度发达的时代,人们获取的信息有很大一部分来自于网络,其中图像信息占了绝大部分。网络中的图片传输不仅耗费了大量的带宽资源,而且占据了大量的存储空间。因此,如何在保证图片视觉不失真前提下缩小体积,对于节省带宽和能耗十分重要。QUIC作为一种高速、高压缩比、自适应的无损图像压缩算法,非常适合在实时性要求较高的领域应用。本文研究了QUIC无损图像压缩算法的原理及其关键技术,提出了基于FPGA实现QUIC无损压缩算法的设计方案。

2 QUIC算法原理及关键技术

算法整体原理框图如图1所示,当图像被处理成光栅扫描序列后形成图像数据流后,图像数据流被分割成位图数据与文件头数据。文件头数据用于优化并选取参数k,位图数据进入Golomb-Rice编码模块进行包括预测、映射、编码等处理。同时当位图数据流满足RLE编码条件时进入游长模式进行编码。在完成Golomb-Rice和RLE编码后,按顺序进行QUIc码流输出。此外,为了提高压缩速度,算法采用了基于FELICS算法的简单的上下文模型,并使用了逐级降低模型更新频率的方法。

2.1 像素值预测

在QUIC算法中,对于指定的像素X,预测器所采取的的方案是利用其周围三个像素值:左相邻像素(A),上相邻像素(B),左上相邻像素(C)。算法预测器Predl-7如表1所示,预测器Pred8如公式1所示:

2.2 Golomb-Rice编码

算法所采用的编码方案基于Golomb-Rice编码系列。对于一个呈指数概率分布的无限字母表来说,GR编码是一种最优编码,每个编码都是以一个级数k的非負整数为特征。对于一个特定的级数k,非负整数i的编码首先以

[i/2 k]

(5)

计算前缀码,而后以

imod2k

(6)

计算后缀码,其中后缀码的二进制长度为kbits。

编码方案的采用极大地简化了压缩算法。对一个指定的残差符号进行编码,首先基于存储在模型中的信息选定一个级数k,然后根据k级数输出一个对应该残差符号的码字。

2.3 模型频率更新

几乎所有的典型图像的特征是缓慢变化的,有的是几乎不变的。由此,模型引入了降低更新频率的方法。为了适应缓慢的变化,模型需要对图像进行采样,即更新数据模型,像素被编码的频率逐渐降低。如果在恒定的周期更新模型可能会干扰图像结构。因此,每次在更新模型后,随机选择若干符号进行压缩后再进行下一次更新模型。为了解码器能够选择同编码器同样的随机值,算法选择了伪随机数发生器。

在具体实现中,将每2048个像素分为一大段,每大段对应一个索引(wmidx),每个索引对应不同的闽值(trigger)。每一大段里,分成若干小段,小段的长度通过随机数发生器计算。每压缩完一小段,用这一小段的最后一个像素(stopidx)来更新模)。

这种方法可以确保在提高压缩速度的同时具有较好的压缩比,本文所述算法与FELICS算法相比,该模型更新频率递减的方法可以将压缩速度提高约250%,其代价仅仅是压缩比降低了1%。

3 QUIC压缩算法的FPGA设计方法

本文的设计采用四级流水线结构,系统只有一个主时钟CLK作为工作时钟,实现了包括串转并单元、图像上下文模型选取单元、映射单元、熵编码器单元、系统控制单元等5个单元。串转并单元负责从位图数据中读取一个像素的RGB输出;上下文模型选取单元根据上下文模型产生预测值;映射单元负责将预测残值映射后输入熵编码器单元;熵编码器单元负责将映射码流进行游长模式编码或者Golomb-Rice编码;控制单元负责控制个单元的信号以及协调各模块的工作先后顺序。

3.1 游长模式设计

游长模式条件判断模块包括两部分:预测值预备模块和预测值比较模块。预测值预备模块获得A、B、C、D的预测值。当B的预测值B和C的预测的值C'相等,A的预测值A'和D的预测值D相等,且列数大于2时,满足游长模式的判断条件,进入游长编码模式。

进入该模块后,首先要定义两个数组辅助参量并将其存储在rom中。这两个辅助参量用于对游长编码值进行区段切分与余数编码两部分的索引第一个辅助参量J[i]值为{o,O,O,O,1,1,1,1,2,2,2,2,3,3,3,3,4,4,5,5,6,6,7,7;8,9,10,11,12,13,14,15};第二个辅助参量melcoder[i]值为2^J[i]。

当进入游长模式后,通过状态机进行编码游长值,如下给出了状态机的主要状态:

(1)计算游长值得参数段数hits (Sl);

(2)计算余下长度leftlen (S2);

(3)编码hits (S3);

(4)编码leftlen (S4);

(5)合并hits与leftlen编码(S5)

如上,当该模块获取到游长值后,进入Sl状态,Sl状态计算与melcoder是对应的;Sl状态完成后进入S2状态计算余下游长值;S3状态将hits值右移5位截取高位,截取低5位,二者拼接成hits的编码;S4状态将leftlen转为固定长度的二进制,长度由hits是否大于32所确定,如果大于32固定长度就为hits+l,否则为32;最后S5状态将S3和S4的编码值合并输出。

3.2 频率更新模塊设计

触发更新模块的主要作用是选取触发更新的值,首先根据像素计数单元计算像素值的个数是否满足2048,每当计数满足2048时,wmidx递增1,直到wmidx为6时不再递增.不同的wmidx会从预设的参数更新值中进行索引。其次将参数值以paramerer的形式记录一些随机值,这些随机值用以标注每个wmidx所对应的不同区间长度。

当输入编码更新信号使能时,像素计数重置为O,同时模块根据wmidx以及不同区间长度值选择stopidx的值,而当像素计数单元等于stopidx的值时,触发k值更新使能,使得trigger_value输出值有效。

3.3 像素编码模块设计

像素编码模块是整个编码流程的最后一环,也是最终QUIC码流输出所在的模块,该模块由以下几个单元所组成预测值输入单元、k值选取单元、GR和非GR判断单元、GR和非GR解码单元、k值更新单元、RGB合并单元。

其中,预测值输入单元负责将上游模块的预测值读入本模块,进而由GR和非GR判断模块将预测值送入GR或者非GR编码单元,这两个单元所用编码k值由k值选取单元选取,编码完成后由k值更新单元更新k值,最后三个通道的编码进行合并输出。

4 QUIC算法压缩核验证与对比分析

4.1 QUIC算法压缩核验证

当完成各子模块编写并验证无误时,可利用二进制文件处理软件UltraEdit对PC机收到的压缩后码流和编写的算法C程序输出标准码流进行对比,分析数据差异后定位出问题的模块并进行代码修改。最后重复仿真并综合下到板子上调试。

4.2 对比分析

经过24幅随机图片组的测试验证,获得表2所示压缩比结果对比。

5 结束语

QUIC压缩算法可用于遥感图像,医学影像以及云桌面传输等。所以使用FPGA实现QUIC算法具有十分重要的商业前景。本文通过研究QUIC无损图像压缩算法的基本原理及关键技术,提出了基于FPGA的QUIC的无损图像压缩算法的设计方法,不仅可以使得这种高效快速的无损图像压缩算法能够得到快速的应用,也可以为该算法的改进以及优化基于FPGA的实现方法提供一定的基础。

参考文献

[1]张天序,邹胜,曾永慧,基于FPGA的图像无损压缩算法的实现[J],系统工程与电子技术,2004,26 (10):1340-1343.

[2] Starosolski R.Simple fast andadaptive lossless image compressionalgorithm[J]. Software: Practice andExperience,2010, 37 (01): 65-91.

[3]于潇,基于FPGA的无损图像压缩系统设计[J].电子产品世界,2015 (01):61-6 3.

[4]陈军,基于LOCO-I算法的高速星载图像无损压缩FPGA实现研究[D].中国科学院研究生院(空间科学与应用研究中心).2011.