一种比特位计数编码以及解码方法与流程

文档序号:19280840发布日期:2019-11-29 22:55阅读:750来源:国知局
一种比特位计数编码以及解码方法与流程

本发明涉及一种比特位计数编码以及解码方法。



背景技术:

关于数据压缩算法已经比比皆是,但几乎没有从数据存储的最小单位,即二进制比特位切入的。二进制只有比特0和比特1两个值,从概率上说,数据中是比较容易出现连续相同的比特位的值。在小型嵌入式系统中,其存储资源不大,若是采用现有的压缩算法(所需的存储空间较大),则会造成无法支持或加剧存储资源紧张的情况。



技术实现要素:

本发明要解决的技术问题,在于提供一种比特位计数编码以及解码方法,极低的算法复杂度,并且编码简单,编解码速率快。

本发明之一是这样实现的:一种比特位计数编码方法,包括:

步骤1、遍历输入数据,顺序记录连续出现相同比特位的值的计数值;

步骤2、记录同一计数值出现的次数,以及去除重复的计数值后的总个数;

步骤3、设定复数个二进制编码单元;

步骤4、将计数值与二进制编码单元一一对应,将最短的二进制编码单元对应重复次数最多的计数值,依次类推进行对应;

步骤5、将顺序记录的计数值转换为二进制编码数据;

步骤6、将所述总个数以及去除重复的计数值转换为二进制,并与二进制编码数据组合为新数据,完成数据压缩。

进一步地,所述步骤5进一步具体为:设定第一个计数值代表比特位的值为1的计数;若顺序记录的计数值中的第一个计数值代表比特位的值为0的计数,则在该计数值前添加一个计数值,该计数值为0,之后将其转换为二进制编码数据;否,则不添加,直接将其转换为二进制编码数据;

或者,设定第一个计数值代表比特位的值为0的计数;若顺序记录的计数值中的第一个计数值代表比特位的值为1的计数,则在该计数值前添加一个计数值,该计数值为0,之后将其转换为二进制编码数据;否,则不添加,直接将其转换为二进制编码数据。

进一步地,所述步骤6中所述新数据,若是新数据最后一个字节的有效数据位长度不为8,则将字节中空的比特位的值设为1;否,则不操作。

进一步地,所述步骤3进一步具体为:设定复数个二进制编码单元,所述二进制编码单元的数量等于所述总个数。

进一步地,所述步骤6中的所述总个数以及去除重复的计数值转换为二进制,采用不定长编码;所述不定长编码为:在字节中设置标志位以及数值位,所述标志位用于代表后续是否存在字节。

本发明之二是这样实现的:一种比特位计数解码方法,包括:

步骤1、步骤1、将压缩数据进行解压,将其中的总个数、去除重复的计数值以及二进制编码数据解码出来;

步骤2、将去除重复的计数值与设定的二进制编码单元对应,根据所述对应关系,将二进制编码数据还原为比特位计数值,再将比特位计数值还原为原始数据,完成解压缩。

进一步地,所述步骤2中将二进制编码数据还原为原始数据进一步具体为:根据设定,第一个计数值代表比特位的值为0或者1的个数,依此类推,将二进制编码数据还原为原始数据。

进一步地,所述步骤2中二进制编码数据的最后一个字节中的比特位值,根据对应关系,找到对应的二进制编码单元,则进行还原;若是找不到,则丢弃。

进一步地,所述步骤1进一步具体为:采用不定长编码解压出压缩数据中的总个数以及去除重复的计数值,之后解压出二进制编码数据。

进一步地,所述不定长编码为:在字节中设置标志位以及数值位,所述标志位用于代表后续是否存在字节。

本发明具有如下优点:

1)算法极简

极低的算法复杂度,编码简单,编解码速率快,非常适用资源有限的小型嵌入式产品。

2)特定文件压缩率高

特别适用于比特位的值易重复的内容,例如二值图像,压缩率高。

3)支持部分解码

由于是顺序编码,因此很容易定位至特定位置,并只解码部分内容。。

附图说明

下面参照附图结合实施例对本发明作进一步的说明。

图1为本发明一种比特位计数编码方法执行流程图。

图2为本发明一种比特位计数解码方法执行流程图。

具体实施方式

如图1所示,本发明比特位计数编码方法,包括:

步骤1、遍历输入数据,顺序记录连续出现相同比特位的值的计数值;

步骤2、记录同一计数值出现的次数,以及去除重复的计数值后的总个数;

步骤3、设定复数个二进制编码单元,所述二进制编码单元的数量等于所述总个数;

步骤4、将计数值与二进制编码单元一一对应,将最短的二进制编码单元对应重复次数最多的计数值,依次类推进行对应;

步骤5、设定第一个计数值代表比特位的值为1的计数;若顺序记录的计数值中的第一个计数值代表比特位的值为0的计数,则在该计数值前添加一个计数值,该计数值为0,之后将其转换为二进制编码数据;否,则不添加,直接将其转换为二进制编码数据;

或者,设定第一个计数值代表比特位的值为0的计数;若顺序记录的计数值中的第一个计数值代表比特位的值为1的计数,则在该计数值前添加一个计数值,该计数值为0,之后将其转换为二进制编码数据;否,则不添加,直接将其转换为二进制编码数据;

步骤6、将所述总个数以及去除重复的计数值转换为二进制,并与二进制编码数据组合为新数据,完成数据压缩,所述新数据,若是新数据最后一个字节的有效数据位长度不为8,则将字节中空的比特位的值设为1;否,则不操作。

所述总个数以及去除重复的计数值转换为二进制,采用不定长编码;所述不定长编码为:在字节中设置标志位以及数值位,所述标志位用于代表后续是否存在字节。

如图2所示,本发明比特位计数解码方法,包括:

步骤1、采用不定长编码解压出压缩数据中的总个数以及去除重复的计数值,之后解压出二进制编码数据,所述不定长编码为:在字节中设置标志位以及数值位,所述标志位用于代表后续是否存在字节;

步骤2、将去除重复的计数值与设定的二进制编码单元对应,根据所述对应关系,将二进制编码数据还原为比特位计数值,再将比特位计数值还原为原始数据,完成解压缩。

根据设定,第一个计数值代表比特位的值为0或者1的个数,依此类推,将二进制编码数据还原为原始数据,所述二进制编码数据的最后一个字节中的比特位值,根据对应关系,找到对应的二进制编码单元,则进行还原;若是找不到,则丢弃。

本发明一种具体实施方式:

编码过程:

遍历输入数据,顺序记下连续出现相同比特位的值的个数,称为位计数值列表。

遍历位计数值列表,记下每个位计数值在列表中出现的次数。

按出现次数从大到小对位计数值进行排序,出现次数越多的位计数值对应越短的二进制编码单元。称为位计数值编码转换表。

根据位计数值编码转换表,将位计数值列表中的内容转换为二进制编码单元,即为编码后的数据。

同理,解码过程为:

根据位计数值编码转换表,将二进制编码单元转换为位计数值列表。

根据位计数值列表,依次还原出比特位的值,即为原始数据。

1.编码约定

1)位计数值

采用不定长编码。每个编码单元都是以比特1开始,以最后一个比特0结束。

部分编码单元如下:

根据编码约定可知,m位二进制可以有m-1种编码。以ni表示i位二进制的编码数,则m位的累积编码数为∑ni,(2<=i<=m).

特别约定:

0值使用二进制0b0表示,占用大小为1bits。

结束符用全比特1表示,占用大小为1~7bits。

2)转换表值。

采用不定长编码。字节最高位为标志位,低7位字节为数值位。标志位为1代表仍有后续字节,标志位为0代表一个完整编码结束。如0x25be,编码后为0xcb3e。

2.位计数值

遍历输入数据,顺序记下连续相同比特位的值的个数。约定第一个计数值代表比特0的个数,则第二个计数值代表比特1的个数,第三个代表比特0的个数,依此类推。

3.转换表

遍历位计数值,记下每个计数值及其出现的次数。

建立3列表格,第1列记录计数值,第2列记录计数值累积出现次数。表格按第2列的内容,即次数值,按从大到小排列行的顺序。然后,第3列按编码大小顺序填入计数值编码。

此时,表格中计数值出现次数最多的对应最短的编码。

示例转换表:

编解码时,实际用到的是表第1列和第3列的内容,即计数值与编码值的对应关系。第2列仅用于位计数值排序。

由于第3列内容是一个固定的编码约定,因此实际只需要存储第1列的内容即可。

4.编码文件格式

编码后内容的一种组织方式:

采用比特位压缩,代码量小,适用于资源紧张的小型嵌入式系统,在二值位图这种比特位的值容易重复的数据压缩应用方面能够发挥出媲美其他压缩算法一样的压缩率,但其占用的资源则小得多。

虽然以上描述了本发明的具体实施方式,但是熟悉本技术领域的技术人员应当理解,我们所描述的具体的实施例只是说明性的,而不是用于对本发明的范围的限定,熟悉本领域的技术人员在依照本发明的精神所作的等效的修饰以及变化,都应当涵盖在本发明的权利要求所保护的范围内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1