基于FPGA的无损图像压缩系统设计
依照当前像素点P位于区间[L,H]的位置信息,分为三种情况采用不同的编码方式:
本文引用地址:https://www.eepw.com.cn/article/267434.htmIf (L≤P≤H) 选用修正的二元编码,并用1比特’0’来表示P落于[L,H]内,残余值R=P-L;
If (P≤L) 选用GOLOMB-RICE编码,并用2比特’10’表示P落于小于下界L的区间内,残余值R=L-P-1;
If (H≤P) 同样选用GOLOMB-RICE编码,并用2比特’11’表示P落于大于上界H的区间内,残余值R=P-H-1。
1.2 修正的二元编码
在修正二元编码的编码区间[L,H]内,中间部分和两边部分相比,有像素点出现的概率要略高一些,所以对二进制编码进行修正,对中间部分像素点的残余值R赋予较短的编码,对两边部分像素点的残余值R赋予较长的编码。例如当△为5时,P值的可能值为0、1、2、3、4、5。在编码时,将处在区间中央的2、3分别编码为00和11,而将0、1、4、5分别编码为110、111、100和101。
1.3 GOLOMB-RICE熵编码
GOLOMB-RICE熵编码是GOLOMB编码的一种特殊情况,属于指数编码的一种。FELICS算法中像素点概率分布模型在小于下界L和大于上界H的部分是以指数形式分布的,符合GOLOMB-RICE编码的适用范围,因此选用这种编码方法。编码步骤如下:
(1)选定参数K
在整幅图像编码开始之前,建立一个U×V×T比特大小的累加表,其中U,V和T分别代表背景值Δ的个数、备选K值的个数和每一个K值下累计编码的长度。在每一次进行GOLOMB-RICE编码之前,按照Δ的数值定位到累加表的相应行,选出累计编码长度最短的K值作为当前像素残余值GOLOMB-RICE编码的K值。
(2)分别确定一进制和二进制编码
一进制编码:unary=R/2K的整数部分;
二进制编码:binary=R/2K的余数部分;
最终的GOLOMB-RICE编码由三部分组成:unary个’1’,binary的二进制形式和1比特’0’,其中’0’置于一进制编码和二进制编码之间,作为解码时的标志位。
(3)更新累加表
编码完成之后要依次用备选的K值对残余值R进行GOLOMB-RICE编码,计算出编码的长度并累加到累加表中K值相应的位置处,以用于后续像素点进行GOLOMB-RICE编码时K值的选取。
2 压缩系统硬件设计
设计采用 4 级流水线结构,系统只有一个主时钟CLK作为工作时钟。硬件实现包括控制单元、上下文模型选取单元、预测单元、熵编码单元和并串转换单元,硬件结构框图如图 4。
fpga相关文章:fpga是什么
评论