CN101299611B - 一种基于集合游程的数据压缩方法 - Google Patents
一种基于集合游程的数据压缩方法 Download PDFInfo
- Publication number
- CN101299611B CN101299611B CN2008101228946A CN200810122894A CN101299611B CN 101299611 B CN101299611 B CN 101299611B CN 2008101228946 A CN2008101228946 A CN 2008101228946A CN 200810122894 A CN200810122894 A CN 200810122894A CN 101299611 B CN101299611 B CN 101299611B
- Authority
- CN
- China
- Prior art keywords
- character
- characteristic character
- data
- characteristic
- occurrence number
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Landscapes
- Compression, Expansion, Code Conversion, And Decoders (AREA)
Abstract
本发明公开了一种基于集合游程的数据压缩方法,包括:读取计算机存储器中的待压缩数据;寻找数据中的特征字符集合;进行编码;将压缩后的数据存入计算机存储器;所述寻找数据中的特征字符集合包括以下步骤:统计孤立字符;判断是否存在孤立字符,是则执行下步,否则将所有字符都化为特征字符,每个特征字符映射的连续出现次数为其数值本身,并转入上述编码步骤;将孤立字符从小到大进行排序;遍历所有特征字符集合可能出现的各种元素个数,选取使压缩率r的取值达到最小的特征字符集合元素的个数;将特征字符集合中的每个元素映射到连续出现次数。本发明提高了游程编码的效率,应用在计算机数据压缩过程中可以获取更好的数据压缩效果。
Description
技术领域
本发明涉及一种计算机领域的数据压缩方法,特别是一种具有良好压缩比例的基于集合游程的数据压缩方法。
背景技术
随着计算机技术和信息技术的飞速发展,大量的信息是以数字化的方式进行表示、存储和传输的,如雷达、图像、语音等,如今面临的一个重要的问题就是这些信息占用了庞大的空间,以雷达信号为例,一个雷达触发有3000个像素点,扫描一周(含4096个触发)需15秒,其数据率需要6.3Mbps,保存一幅雷达图像需要12M字节,数据量是很大的。同样,大量的数据量也给分析和传输带来了不便,给通信带来较大压力,相对于提高存储设备对容量和增大通信带宽,采用数据压缩方法的成本较低,可取得较好的效果。
所谓数据压缩是通过改变信息的表示方式,在有限的信息空间中表示尽可能多的信息。压缩算法主要有两类:一类压缩是可逆的,即从压缩后的数据可以完全恢复出原始数据,没有任何信息损失,称为无损压缩;另一类压缩是不可逆的,即从压缩后的数据无法完全恢复原来的数据,信息有一定的损失,称为有损压缩。常见无损压缩方法有霍夫曼编码、游程编码、算术编码等,因游程编码简单、算法复杂度低、易于硬件实现等优点,应用较为广泛。
游程编码是一种朴素的无损压缩编码方法。主要是针对一连串出现的重复字串做压缩的动作。比如,对于aaaaaaa,可以表示为7a,7表示计数值,a则是数据值,同样对于有规律的数据:aaaaaabbbcccc,则表示为6a3b4c。游程编码算法有着良好的编码和解码优势,但是当碰到abcde这样彼此都不重复的数据时,编码将返回lalblcldle,数据容量是压缩前的2倍,这是无法容忍的。这是一种“病态”情况。为了尽量避免“病态”情况的出现,需要对游程编码的基本方法进行改进。改进的方法是在具体实施时对计数字节和编码字节进行了区分,利用计数字节的高两位作为压缩的标志。对前后相邻字节均不同的孤立数据,只有当计数字节高2位全1(即C0)时才加1计数,否则直接输出该像素值,因此避免了压缩后长度增加一倍的情况。这样就使得计数字节本身的高2位也是全1,即计数字节为C0H+n(连续相同的字节数)。当单个图像数据的值大于或等于C0时,则先输出C1,再输出该图像数据值,否则直接输出该数据。 如有以下一系列数据:D2,20,30,30,30,C0,C1,C1,E2,E2,E2,…,E2(132个),E0,E0,D4,经压缩后数据为:C1,D2,20,C3,30,C1,C0,C2,C1,FF,E2,FF,E2,C6,E2,C2,E0,C1,D4,从这个压缩过程可以看到,孤立字符D2、C0、D4前面带有计数字节C1,而20前没有。这样可以有效避免压缩后膨胀的异常情况。
可上述改进并未解决如下问题:1、若某数据大量孤立字符出现在大于CO时,仍不可避免的会出现“病态”情况,使得压缩后数据是压缩前数据的1倍。2、上述编码只能最大表示连续63个相同的字节数,无法调节,限制了压缩效率的提高。3、固定的阈值C0限制了压缩效果,没有根据数据类型特征做相应调整。
发明内容
发明目的:本发明针对现有技术的不足,提供了一种具有较高压缩比的基于集合游程的数据压缩方法。
技术方案:本发明公开了一种基于集合游程的数据压缩方法,包括以下步骤:
(1)读取计算机存储器中的待压缩数据;
(2)寻找数据中的特征字符集合;
(3)进行编码;
(4)将压缩后的数据存入计算机存储器;
所述步骤(2)寻找数据中的特征字符集合包括以下步骤:
(101)统计孤立字符,即由计算机处理器对字符集合中的字符进行遍历;
(102)判断是否存在孤立字符,是则执行步骤(103),否则将所有字符都化为特征字符,每个特征字符映射的连续出现次数为其数值本身,从而形成特征字符集合与连续出现次数映射表,所述特征字符集合与连续出现次数映射表中包括特征字符与连续出现次数以及两者之间的一一对应关系;并转入上述步骤(3);
(103)将孤立字符出现的次数从小到大进行排序,特征字符集合选取出现较少次数的孤立字符;
(104)遍历所有特征字符集合可能出现的各种元素个数,选取使压缩率r的取值达到最小的特征字符集合元素的个数,特征字符表示一个数值连续出现的次数;
(105)将特征字符集合中的每个元素由连续的映射策略映射到连续出现次数从而形成特征字符集合与连续出现次数映射表,所述特征字符集合与连续出现次数映射表中包括特征字符与连续出现次数以及两者之间的一一对应关系;所述策略为特征字符集合中每个特征字符映射连续出现次数与步骤(103)排序的序号相同;
所述步骤(3)进行编码,包括以下步骤:
(201)判断是否为孤立字符,如果是则进行步骤(202),否则进行步骤(203)根据连续出现次数查特征字符集合与连续出现次数映射表,先输出对应于连续出现次数的特征字符,再输出当前字符;
(202)判断是否为特征字符集合的字符,如果是则进行步骤(204)根据连续出现次数查特征字符集合与连续出现次数映射表,先输出对应于连续出现次数为1的特征字符,再输出当前字符;否则进行步骤(205)直接将字符输出。
本发明中,优选地,所述步骤(104)中设定一个压缩率r的初值,后续各元素个数的r取值根据差分的方法递推。在步骤(103)排序的基础上遍历特征字符集合A可能出现的各种元素个数,选取使r的取值达到最小的A集合元素个数。可计算一个初值,如1,后续各元素个数的r取值递推即可,籍此可大幅加快搜索速度。
本发明中,所述集合游程压缩算法推导如下:
假设某序列,其长度为n,定义Xij为该序列中取值i连续出现j次的次数,其中0≤i≤255,1≤j≤n。则必有:
设集合M为0~255数字组成的集合,设集合A为所有特征字符集合,为M的子集,LA为A集合元素个数。设集合B为所有非特征字符集合,则有:
特征字符另外一个作用是表示连续出现的次数,所以集合A中的每个特征字符要映射一个数值,该数值可表示连续出现个数范围为1~LA-1。原游程编码算法只是集合算法的一个特例,即集合A为大于等于192的元素,193可表示连续出现1次,194可表示连续出现2次,依此类推。假设集合A为{5,7,56……96,222,254},在编码过程中,5可能映射为连续出现1次,7映射为2次,56映射为3次,编码后码长分为以下三个组成部分:
(a)集合B中的孤立字符编码长度:
(b)集合A中的孤立字符编码长度:
(c)连续出现至少两个相同字符编码长度:K3-K4,其中:
以原游程算法为例,K4考虑了如下情况:若165(小于阈值192)和224(大于阈值192)各连续出现了64次,前者编码后为255165165三个字节(不是255165193165四个字节),后者编码后为255224193224,四个字节。
其中 令
总编码长度为:L=K5+K6+K3-K4;
定义压缩率
令
为达到较好的压缩效果,就要求使r尽可能小,在序列一定的情况下,r1是个常数,不随集合A和B的划分而变化,不做考虑;r2与A集合的划分关系密切,r3只与A集合元素个数有关;相对于r1~r3,r4为极小量,也可不予考虑。问题转化为寻找集合A和B的划分方法,使得r2+r3达到最小。
假设集合A的元素个数固定,r3的值就是固定值,要使r2值达到最小,集合A的划分就必须由孤立字符出现较少的元素组成,由此,可设计如下步骤:
第一,寻找特征字符集合,即所述的A集合。具体而言包括以下三大部分:(a)将序列孤立字符出现次数按照从小到大的次序进行排序,集合A元素优先选取出现较少次数的孤立字符,如没有孤立字符,则字符集合M即为A集合。(b)在步骤(a)排序的基础上遍历A可能出现的各种元素个数,选取使r的取值达到最小的A集合元素个数。(c)每个A集合中元素肩负着映射连续出现次数的任务,映射策略只需保证连续即可。
第二,采用本领域通用的编码方法对寻找特征字符集处理后的数据进行编 码。本发明中,优选地,所述集合游程算法较传统的游程编码算法有以下特征:(a)划分特征字符不再以阈值参考,而以两个互不相交的集合构成。(b)A集合的个数不再固定为63,所以可表示的最大连续出现次数也不固定,最大限度的挖掘游程编码的潜力。
在数据压缩的过程中,为了与解码端保持同步,并为了获取更好的效果,可采取将数据分为关键帧和非关键帧,关键帧计算特征字符集合,并写入编码码流中,非关键帧直接利用得出的特征字符集合,关键帧的间隔可根据数据变化情况进行调整,可有以下三种情况:1、若数据类型是平稳的,可将关键帧只初始化一次,之后编码都为非关键帧。2、若数据类型是缓变的,将一个关键帧和若干非关键帧组合为一簇,关键帧在最前,簇内的非关键帧利用簇内关键帧的特征字符集结果。3、若数据类型为非平稳、变化剧烈,摈弃非关键帧,全部都为关键帧。
有益效果:本发明从集合论的角度研究游程编码,提出了一种新的游程编码算法——集合游程,算法中不再使用阈值,而将全域字符划分成两个互不相交的集合,分别为特征字符和非特征字符,通过对特征字符进行合理的映射来表示连续出现次数,从而将游程编码算法的效率利用到了极限。经过试验证明,本发明大大提高游程编码的算法效率,应用在计算机数据压缩过程中可以获取更好的数据压缩效果。
实验供选取了雷达、图像、文本三种类型的数据,其中雷达数据选取了两种类型,共四组数据,在实验中还发现,同数据类型的A集合是缓变的,这也为实际应用提供了可能。图4为各种类型数据A集合长度与压缩率之间的关系,图中直线部分为各类型原游程算法压缩率。图5为最优A集合情况下,集合游程算法与原游程算法的算法比较。由以上实验结果可证明,本发明设计了一种新的游程编码方法,该方法将集合论引入了编码中,克服了原游程编码编码效率较低的问题,大大提高了数据压缩比例。
附图说明
图1为本发明简要流程图。
图2为本发明中编码流程流程图。
图3为本发明在图1基础上详细的流程图。
图4为各种类型数据A集合长度与压缩率之间关系图。
图5为集合游程算法与原游程算法比较。
具体实施方式
下面结合附图对本发明做更进一步的解释。
如图1、图3所示,本发明所述的一种基于集合游程的数据压缩方法,包括以下步骤:步骤1,读取计算机存储器中的待压缩数据;步骤2,寻找数据中的特征字符集合;步骤3,进行编码;步骤4,将压缩后的数据存入计算机存储器。其中,所述步骤2,寻找数据中的特征字符集合,包括以下步骤:步骤101,统计孤立字符,即由计算机处理器对字符集合中的字符进行遍历;步骤102,判断是否存在孤立字符,是则执行步骤103,否则将所有字符都化为特征字符,并转入上述步骤3;步骤103将孤立字符出现的次数从小到大进行排序;步骤104遍历所有特征字符集合可能出现的各种元素个数,选取使压缩率r的取值达到最小的特征字符集合元素的个数;步骤105将特征字符集合中的每个元素映射到连续出现次数。本实施例中,所述步骤105中映射策略为特征字符集合中每个特征字符映射连续出现次数与步骤103中排序的序号相同。每个特征字符集合A集合中元素需要映射连续出现次数,映射策略只需保证连续即可,推荐的策略即为A集合中每个特征字符映射连续出现次数与步骤103排序的序号相同。本实施例中,所述步骤104中设定一个压缩率r的初值,后续各元素个数的r取值递推。在步骤103排序的基础上遍历特征字符集合A可能出现的各种元素个数,选取使r的取值达到最小的A集合元素个数。可计算一个初值,如1,后续各元素个数的r取值递推即可,籍此可大幅加快搜索速度。
如图2所示,本发明中,编码的核心思路与本领域的通用方法类似。根据本发明中寻找数据中的特征字符集合的改进,编码过程包括以下步骤:步骤201,判断是否为孤立字符,如果是则进行步骤202;否则进行步骤203,查A集合映射表,先输出映射字符,再输出当前字符;步骤202,判断是否为A集合字符,如果是则进行步骤204,查A集合映射表,先输出映射为1的A集合字符,再输出当前字符;否则进行步骤205,直接将字符输出。本编码方法与原游程编码基本相同,区别在于以下两个部分:(a)可表示最大连续次数不再固定为63,改为A集合个数,可在编码初始化阶段作为常量出现。(b)连续出现次数写码流时需要查询A集合中相映射元素。
为了更好的理解本发明所述的压缩方法的思路以及效果,以下数据压缩为 例详细介绍本发明的数据处理过程。
读取计算机存储器中的待压缩数据,待压缩数据如表1所示(数据按照行存储,加*上标的为孤立字符),共100个字节,其中孤立字符总计59个:
表1输入数据序列
2 | 2 | 2 | 194* | 197* | 199* | 214* | 217* | 238* | 255* |
240* | 81 | 81 | 81 | 35* | 32 | 32 | 32 | 243* | 242* |
241* | 245* | 247* | 137 | 137 | 137 | 86 | 86 | 84* | 88* |
18* | 209* | 210* | 211 | 211 | 213 | 213 | 218* | 219* | 221 |
221 | 219* | 71 | 71 | 72 | 72 | 72 | 73 | 73 | 82 |
82 | 82 | 82 | 82 | 82 | 82 | 225* | 224* | 230* | 232* |
233* | 228* | 229* | 233* | 230* | 204* | 199* | 201* | 198* | 195* |
199* | 200 | 200 | 199* | 196* | 207* | 202* | 2* | 3* | 5* |
8* | 9* | 119 | 119 | 119 | 119 | 119 | 240* | 249* | 253* |
254* | 250* | 251* | 250* | 251* | 252* | 194* | 195* | 194* | 195* |
如果采用原始游程编码算法,编码结果如表2(数据按照行进行排列)所示,编码后长度为137字节。
表2采用原始游程编码算法编码结果
195 | 2 | 193 | 194 | 193 | 197 | 193 | 199 | 193 | 214 |
193 | 217 | 193 | 238 | 193 | 255 | 193 | 240 | 195 | 81 |
35 | 195 | 32 | 193 | 243 | 193 | 242 | 193 | 241 | 193 |
245 | 193 | 247 | 195 | 137 | 194 | 86 | 84 | 88 | 18 |
193 | 209 | 193 | 210 | 194 | 211 | 194 | 213 | 193 | 218 |
193 | 219 | 194 | 221 | 193 | 219 | 194 | 71 | 195 | 72 |
194 | 73 | 199 | 82 | 193 | 225 | 193 | 224 | 193 | 230 |
193 | 232 | 193 | 233 | 193 | 228 | 193 | 229 | 193 | 233 |
193 | 230 | 193 | 204 | 193 | 199 | 193 | 201 | 193 | 198 |
193 | 195 | 193 | 199 | 194 | 200 | 193 | 199 | 193 | 196 |
193 | 207 | 193 | 202 | 2 | 3 | 5 | 8 | 9 | 197 |
119 | 193 | 240 | 193 | 249 | 193 | 253 | 193 | 254 | 193 |
250 | 193 | 251 | 193 | 250 | 193 | 251 | 193 | 252 | 193 |
194 | 193 | 195 | 193 | 194 | 193 | 195 |
按照本发明所述方法对表1数据的孤立字符进行统计,可得到统计并按照从小到大排序后的孤立字符表格,如表3所示,表中加*上标的为数据中出现的孤立字符。
本发明中,所谓A集合长度指的是A集合中元素的个数,孤立字符按照出现次数从小到大排序如表3所示。按照特征集合选取的原则,优先选取出现次 数小的字符,A集合可选取元素的个数范围为1~256:如果选为1时,则A集合就为表3的前1个,为{0};如果选为2时,则A集合就为表3的前2个,为{0,1};如果选为3时,则A集合就为表3的前3个,为{0,1,4};如果选为4时,则A集合就为表3的前4个,为{0,1,4,6}……如果选为256时,则A集合就为表3所有字符。
表3数据中孤立字符出现次数排序后结果
序号 | 字符 | 出现 次数 | 序号 | 字符 | 出现 次数 | 序号 | 字符 | 出现 次数 |
0 | 0 | 0 | 85 | 94 | 0 | 170 | 179 | 0 |
1 | 1 | 0 | 86 | 95 | 0 | 171 | 180 | 0 |
2 | 4 | 0 | 87 | 96 | 0 | 172 | 181 | 0 |
3 | 6 | 0 | 88 | 97 | 0 | 173 | 182 | 0 |
4 | 7 | 0 | 89 | 98 | 0 | 174 | 183 | 0 |
5 | 10 | 0 | 90 | 99 | 0 | 175 | 184 | 0 |
6 | 11 | 0 | 91 | 100 | 0 | 176 | 185 | 0 |
7 | 12 | 0 | 92 | 101 | 0 | 177 | 186 | 0 |
8 | 13 | 0 | 93 | 102 | 0 | 178 | 187 | 0 |
9 | 14 | 0 | 94 | 103 | 0 | 179 | 188 | 0 |
10 | 15 | 0 | 95 | 104 | 0 | 180 | 189 | 0 |
11 | 16 | 0 | 96 | 105 | 0 | 181 | 190 | 0 |
12 | 17 | 0 | 97 | 106 | 0 | 182 | 191 | 0 |
13 | 19 | 0 | 98 | 107 | 0 | 183 | 192 | 0 |
14 | 20 | 0 | 99 | 108 | 0 | 184 | 193 | 0 |
15 | 21 | 0 | 100 | 109 | 0 | 185 | 200 | 0 |
16 | 22 | 0 | 101 | 110 | 0 | 186 | 203 | 0 |
17 | 23 | 0 | 102 | 111 | 0 | 187 | 205 | 0 |
18 | 24 | 0 | 103 | 112 | 0 | 188 | 206 | 0 |
19 | 25 | 0 | 104 | 113 | 0 | 189 | 208 | 0 |
20 | 26 | 0 | 105 | 114 | 0 | 190 | 211 | 0 |
21 | 27 | 0 | 106 | 115 | 0 | 191 | 212 | 0 |
22 | 28 | 0 | 107 | 116 | 0 | 192 | 213 | 0 |
23 | 29 | 0 | 108 | 117 | 0 | 193 | 215 | 0 |
24 | 30 | 0 | 109 | 118 | 0 | 194 | 216 | 0 |
25 | 31 | 0 | 110 | 119 | 0 | 195 | 220 | 0 |
26 | 32 | 0 | 111 | 120 | 0 | 196 | 221 | 0 |
27 | 33 | 0 | 112 | 121 | 0 | 197 | 222 | 0 |
28 | 34 | 0 | 113 | 122 | 0 | 198 | 223 | 0 |
29 | 36 | 0 | 114 | 123 | 0 | 199 | 226 | 0 |
30 | 37 | 0 | 115 | 124 | 0 | 200 | 227 | 0 |
接上表
31 | 38 | 0 | 116 | 125 | 0 | 201 | 231 | 0 |
32 | 39 | 0 | 117 | 126 | 0 | 202 | 234 | 0 |
33 | 40 | 0 | 118 | 127 | 0 | 203 | 235 | 0 |
34 | 41 | 0 | 119 | 128 | 0 | 204 | 236 | 0 |
35 | 42 | 0 | 120 | 129 | 0 | 205 | 237 | 0 |
36 | 43 | 0 | 121 | 130 | 0 | 206 | 239 | 0 |
37 | 44 | 0 | 122 | 131 | 0 | 207 | 244 | 0 |
38 | 45 | 0 | 123 | 132 | 0 | 208 | 246 | 0 |
39 | 46 | 0 | 124 | 133 | 0 | 209 | 248 | 0 |
40 | 47 | 0 | 125 | 134 | 0 | 210* | 84* | 1* |
41 | 48 | 0 | 126 | 135 | 0 | 211* | 214* | 1* |
42 | 49 | 0 | 127 | 136 | 0 | 212* | 35* | 1* |
43 | 50 | 0 | 128 | 137 | 0 | 213* | 196* | 1* |
44 | 51 | 0 | 129 | 138 | 0 | 214* | 217* | 1* |
45 | 52 | 0 | 130 | 139 | 0 | 215* | 218* | 1* |
46 | 53 | 0 | 131 | 140 | 0 | 216* | 197* | 1* |
47 | 54 | 0 | 132 | 141 | 0 | 217* | 198* | 1* |
48 | 55 | 0 | 133 | 142 | 0 | 218* | 2* | 1* |
49 | 56 | 0 | 134 | 143 | 0 | 219* | 201* | 1* |
50 | 57 | 0 | 135 | 144 | 0 | 220* | 224* | 1* |
51 | 58 | 0 | 136 | 145 | 0 | 221* | 225* | 1* |
52 | 59 | 0 | 137 | 146 | 0 | 222* | 202* | 1* |
53 | 60 | 0 | 138 | 147 | 0 | 223* | 18* | 1* |
54 | 61 | 0 | 139 | 148 | 0 | 224* | 228* | 1* |
55 | 62 | 0 | 140 | 149 | 0 | 225* | 229* | 1* |
56 | 63 | 0 | 141 | 150 | 0 | 226* | 204* | 1* |
57 | 64 | 0 | 142 | 151 | 0 | 227* | 232* | 1* |
58 | 65 | 0 | 143 | 152 | 0 | 228* | 88* | 1* |
59 | 66 | 0 | 144 | 153 | 0 | 229* | 8* | 1* |
60 | 67 | 0 | 145 | 154 | 0 | 230* | 207* | 1* |
61 | 68 | 0 | 146 | 155 | 0 | 231* | 9* | 1* |
62 | 69 | 0 | 147 | 156 | 0 | 232* | 238* | 1* |
63 | 70 | 0 | 148 | 157 | 0 | 233* | 209* | 1* |
64 | 71 | 0 | 149 | 158 | 0 | 234* | 241* | 1* |
65 | 72 | 0 | 150 | 159 | 0 | 235* | 242* | 1* |
66 | 73 | 0 | 151 | 160 | 0 | 236* | 243* | 1* |
67 | 74 | 0 | 152 | 161 | 0 | 237* | 210* | 1* |
68 | 75 | 0 | 153 | 162 | 0 | 238* | 245* | 1* |
69 | 76 | 0 | 154 | 163 | 0 | 239* | 5* | 1* |
70 | 77 | 0 | 155 | 164 | 0 | 240* | 247* | 1* |
71 | 78 | 0 | 156 | 165 | 0 | 241* | 3* | 1* |
接上表
72 | 79 | 0 | 157 | 166 | 0 | 242* | 249* | 1* |
73 | 80 | 0 | 158 | 167 | 0 | 243* | 252* | 1* |
74 | 81 | 0 | 159 | 168 | 0 | 244* | 253* | 1* |
75 | 82 | 0 | 160 | 169 | 0 | 245* | 254* | 1* |
76 | 83 | 0 | 161 | 170 | 0 | 246* | 255* | 1* |
77 | 85 | 0 | 162 | 171 | 0 | 247* | 250* | 2* |
78 | 86 | 0 | 163 | 172 | 0 | 248* | 251* | 2* |
79 | 87 | 0 | 164 | 173 | 0 | 249* | 230* | 2* |
80 | 89 | 0 | 165 | 174 | 0 | 250* | 233* | 2* |
81 | 90 | 0 | 166 | 175 | 0 | 251* | 240* | 2* |
82 | 91 | 0 | 167 | 176 | 0 | 252* | 219* | 2* |
83 | 92 | 0 | 168 | 177 | 0 | 253* | 195* | 3* |
84 | 93 | 0 | 169 | 178 | 0 | 254* | 194* | 3* |
255* | 199* | 4* |
对表3中的孤立字符,利用公式(6)定义压缩率:
从表中可以看出,特征集合元素个数在8~210个的范围得出的压缩率都是相同的,这主要是由于数据集合长度太少,只有100个字节造成的。
表4各种元素个数下对应的压缩率。
元素 个数 | 压缩 率 | 元素 个数 | 压缩 率 | 元素 个数 | 压缩 率 | 元素 个数 | 压缩 率 | 元素 个数 | 压缩 率 |
3 | 0.93 | 54 | 0.73 | 105 | 0.73 | 156 | 0.73 | 207 | 0.73 |
4 | 0.79 | 55 | 0.73 | 106 | 0.73 | 157 | 0.73 | 208 | 0.73 |
5 | 0.77 | 56 | 0.73 | 107 | 0.73 | 158 | 0.73 | 209 | 0.73 |
6 | 0.75 | 57 | 0.73 | 108 | 0.73 | 159 | 0.73 | 210 | 0.73 |
接上表
7 | 0.75 | 58 | 0.73 | 109 | 0.73 | 160 | 0.73 | 211 | 0.74 |
8* | 0.73* | 59 | 0.73 | 110 | 0.73 | 161 | 0.73 | 212 | 0.75 |
9 | 0.73 | 60 | 0.73 | 111 | 0.73 | 162 | 0.73 | 213 | 0.76 |
10 | 0.73 | 61 | 0.73 | 112 | 0.73 | 163 | 0.73 | 214 | 0.77 |
11 | 0.73 | 62 | 0.73 | 113 | 0.73 | 164 | 0.73 | 215 | 0.78 |
12 | 0.73 | 63 | 0.73 | 114 | 0.73 | 165 | 0.73 | 216 | 0.79 |
13 | 0.73 | 64 | 0.73 | 115 | 0.73 | 166 | 0.73 | 217 | 0.80 |
14 | 0.73 | 65 | 0.73 | 116 | 0.73 | 167 | 0.73 | 218 | 0.81 |
15 | 0.73 | 66 | 0.73 | 117 | 0.73 | 168 | 0.73 | 219 | 0.82 |
16 | 0.73 | 67 | 0.73 | 118 | 0.73 | 169 | 0.73 | 220 | 0.83 |
17 | 0.73 | 68 | 0.73 | 119 | 0.73 | 170 | 0.73 | 221 | 0.84 |
18 | 0.73 | 69 | 0.73 | 120 | 0.73 | 171 | 0.73 | 222 | 0.85 |
19 | 0.73 | 70 | 0.73 | 121 | 0.73 | 172 | 0.73 | 223 | 0.86 |
20 | 0.73 | 71 | 0.73 | 122 | 0.73 | 173 | 0.73 | 224 | 0.87 |
21 | 0.73 | 72 | 0.73 | 123 | 0.73 | 174 | 0.73 | 225 | 0.88 |
22 | 0.73 | 73 | 0.73 | 124 | 0.73 | 175 | 0.73 | 226 | 0.89 |
23 | 0.73 | 74 | 0.73 | 125 | 0.73 | 176 | 0.73 | 227 | 0.90 |
24 | 0.73 | 75 | 0.73 | 126 | 0.73 | 177 | 0.73 | 228 | 0.91 |
25 | 0.73 | 76 | 0.73 | 127 | 0.73 | 178 | 0.73 | 229 | 0.92 |
26 | 0.73 | 77 | 0.73 | 128 | 0.73 | 179 | 0.73 | 230 | 0.93 |
27 | 0.73 | 78 | 0.73 | 129 | 0.73 | 180 | 0.73 | 231 | 0.94 |
28 | 0.73 | 79 | 0.73 | 130 | 0.73 | 181 | 0.73 | 232 | 0.95 |
29 | 0.73 | 80 | 0.73 | 131 | 0.73 | 182 | 0.73 | 233 | 0.96 |
30 | 0.73 | 81 | 0.73 | 132 | 0.73 | 183 | 0.73 | 234 | 0.97 |
31 | 0.73 | 82 | 0.73 | 133 | 0.73 | 184 | 0.73 | 235 | 0.98 |
32 | 0.73 | 83 | 0.73 | 134 | 0.73 | 185 | 0.73 | 236 | 0.99 |
33 | 0.73 | 84 | 0.73 | 135 | 0.73 | 186 | 0.73 | 237 | 1.00 |
34 | 0.73 | 85 | 0.73 | 136 | 0.73 | 187 | 0.73 | 238 | 1.01 |
35 | 0.73 | 86 | 0.73 | 137 | 0.73 | 188 | 0.73 | 239 | 1.02 |
36 | 0.73 | 87 | 0.73 | 138 | 0.73 | 189 | 0.73 | 240 | 1.03 |
37 | 0.73 | 88 | 0.73 | 139 | 0.73 | 190 | 0.73 | 241 | 1.04 |
38 | 0.73 | 89 | 0.73 | 140 | 0.73 | 191 | 0.73 | 242 | 1.05 |
39 | 0.73 | 90 | 0.73 | 141 | 0.73 | 192 | 0.73 | 243 | 1.06 |
40 | 0.73 | 91 | 0.73 | 142 | 0.73 | 193 | 0.73 | 244 | 1.07 |
41 | 0.73 | 92 | 0.73 | 143 | 0.73 | 194 | 0.73 | 245 | 1.08 |
42 | 0.73 | 93 | 0.73 | 144 | 0.73 | 195 | 0.73 | 246 | 1.09 |
43 | 0.73 | 94 | 0.73 | 145 | 0.73 | 196 | 0.73 | 247 | 1.10 |
44 | 0.73 | 95 | 0.73 | 146 | 0.73 | 197 | 0.73 | 248 | 1.12 |
45 | 0.73 | 96 | 0.73 | 147 | 0.73 | 198 | 0.73 | 249 | 1.14 |
46 | 0.73 | 97 | 0.73 | 148 | 0.73 | 199 | 0.73 | 250 | 1.16 |
接上表
47 | 0.73 | 98 | 0.73 | 149 | 0.73 | 200 | 0.73 | 251 | 1.18 |
48 | 0.73 | 99 | 0.73 | 150 | 0.73 | 201 | 0.73 | 252 | 1.20 |
49 | 0.73 | 100 | 0.73 | 151 | 0.73 | 202 | 0.73 | 253 | 1.22 |
50 | 0.73 | 101 | 0.73 | 152 | 0.73 | 203 | 0.73 | 254 | 1.25 |
51 | 0.73 | 102 | 0.73 | 153 | 0.73 | 204 | 0.73 | ||
52 | 0.73 | 103 | 0.73 | 154 | 0.73 | 205 | 0.73 | ||
53 | 0.73 | 104 | 0.73 | 155 | 0.73 | 206 | 0.73 |
由上可以得出,最优的特征集合个数为8个,然后查表3,可以得出特征集合为表3的前8个字符,即A集合,如表5所示:
表5特征字符集合
序号 | 字符 |
0 | 0 |
1 | 1 |
2 | 4 |
3 | 6 |
4 | 7 |
5 | 10 |
6 | 11 |
7 | 12 |
依据映射策略,可对特征字符集合A中每个字符可表示连续的次数进行如下映射,如表6所示:
表6特征字符和连续出现次数映射表
映射次数 | 字符 |
0 | 0 |
1 | 1 |
2 | 4 |
3 | 6 |
4 | 7 |
5 | 10 |
6 | 11 |
7 | 12 |
至此,特征字符集合的选取已经完成。
选取前10个字节作为范例进行编码,数据为2、2、2、194、197、199、214、217、238、255,前面连续出现3个2,查表6,表示3映射次数的为字符6,所以,输出6,2,接下来一个孤立字符194,因为不在特征字符中,直接输出,其后的197,199,214,217都为孤立字符且不在特征字符集合中,全部直接输 出。以下依次类推,使用集合游程编码得出的输出码流结果为表7所示(数据按行排列),表中加*上标的为出现了非孤立字符,并使用到了特征字符,最终编码后长度为87个字节,远小于原始游程编码的137字节长度。
表7本集合游程编码输出码流
6* | 2* | 194 | 197 | 199 | 214 | 217 | 238 | 255 | 240 |
6* | 81* | 35 | 6* | 32* | 243 | 242 | 241 | 245 | 247 |
6* | 137* | 4* | 86* | 84 | 88 | 18 | 209 | 210 | 4* |
211* | 4* | 213* | 218 | 219 | 4* | 221* | 219 | 4* | 71* |
6* | 72* | 4* | 73* | 12* | 82* | 225 | 224 | 230 | 232 |
233 | 228 | 229 | 233 | 230 | 204 | 199 | 201 | 198 | 195 |
199 | 4* | 200* | 199 | 196 | 207 | 202 | 2 | 3 | 5 |
8 | 9 | 10* | 119* | 240 | 249 | 253 | 254 | 250 | 251 |
250 | 251 | 252 | 194 | 195 | 194 | 195 |
至此所有编码完成压缩文件即完成,运用本领域公知的技术将压缩后的数据存入计算机存储器。解压缩时根据A集合进行解码即可。
本发明所述的压缩方法,可以应用于以下场合:1、雷达数据记录仪的使用,可以实施并压缩雷达数据。2、在信道资源受限时,可用于信道编码,节省通信带宽。3、用于各种要求无损的音视频场合。4、用于替换现有有损编码的熵编码,如现有JPEG中的游程压缩可替换为本专利的集合游程编码方法,实现更好的压缩效果。
本发明提供了一种基于集合游程的数据压缩方法的思路及方法,具体实现该技术方案的方法和途径很多,以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。本实施例中未明确的各组成部份均可用现有技术加以实现。
Claims (2)
1.一种基于集合游程的数据压缩方法,包括以下步骤:
(1)读取计算机存储器中的待压缩数据;
(2)寻找数据中的特征字符集合;
(3)进行编码;
(4)将压缩后的数据存入计算机存储器;
其特征在于,所述步骤(2)寻找数据中的特征字符集合,包括以下步骤:
(101)统计孤立字符;
(102)判断是否存在孤立字符,是则执行步骤(103),否则将所有字符都化为特征字符,每个特征字符映射的连续出现次数为其数值本身,从而形成特征字符集合与连续出现次数映射表,所述特征字符集合与连续出现次数映射表中包括特征字符与连续出现次数以及两者之间的一一对应关系;并转入上述步骤(3);
(103)将孤立字符出现的次数从小到大进行排序,特征字符集合选取出现较少次数的孤立字符;
(104)遍历所有特征字符集合可能出现的各种元素个数,选取使压缩率r的取值达到最小的特征字符集合元素的个数,特征字符表示一个数值连续出现的次数;
(105)将特征字符集合中的每个元素由连续的映射策略映射到连续出现次数从而形成特征字符集合与连续出现次数映射表,所述特征字符集合与连续出现次数映射表中包括特征字符与连续出现次数以及两者之间的一一对应关系;所述策略为特征字符集合中每个特征字符映射连续出现次数与步骤(103)排序的序号相同;
所述步骤(3)进行编码,包括以下步骤:
(201)判断是否为孤立字符,如果是则进行步骤(202),否则进行步骤(203)根据连续出现次数查特征字符集合与连续出现次数映射表,先输出对应于连续出现次数的特征字符,再输出当前字符;
(202)判断是否为特征字符集合的字符,如果是则进行步骤(204)根据连续出现次数查特征字符集合与连续出现次数映射表,先输出对应于连续出现次数为1的特征字符,再输出当前字符;否则进行步骤(205)直接将字符输出。
2.根据权利要求1所述的一种基于集合游程的数据压缩方法,其特征在于,所述步骤(104)中设定一个压缩率r的初值,后续各元素个数的r取值递推。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2008101228946A CN101299611B (zh) | 2008-06-30 | 2008-06-30 | 一种基于集合游程的数据压缩方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2008101228946A CN101299611B (zh) | 2008-06-30 | 2008-06-30 | 一种基于集合游程的数据压缩方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101299611A CN101299611A (zh) | 2008-11-05 |
CN101299611B true CN101299611B (zh) | 2011-10-05 |
Family
ID=40079318
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2008101228946A Expired - Fee Related CN101299611B (zh) | 2008-06-30 | 2008-06-30 | 一种基于集合游程的数据压缩方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101299611B (zh) |
Families Citing this family (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102064833A (zh) * | 2010-12-17 | 2011-05-18 | 曙光信息产业(北京)有限公司 | 一种dfa的正则表达式压缩方法 |
CN102595496A (zh) * | 2012-03-08 | 2012-07-18 | 西北大学 | 用于无线传感节点感知数据的上下文自适应商余编码方法 |
US8823560B1 (en) * | 2013-03-01 | 2014-09-02 | Gurulogic Microsystems Oy | Data encoder, data decoder and method |
GB2511355B (en) * | 2013-03-01 | 2015-06-03 | Gurulogic Microsystems Oy | Encoder, decoder and method |
US9448300B2 (en) * | 2014-05-28 | 2016-09-20 | Nxp B.V. | Signal-based data compression |
WO2016004629A1 (zh) * | 2014-07-11 | 2016-01-14 | 华为技术有限公司 | 一种计算数据的预期压缩率的方法及装置 |
CN106507108B (zh) * | 2016-12-07 | 2018-04-17 | 杜昀晓 | 图像编码、解码的方法和装置 |
CN106685429B (zh) * | 2016-12-29 | 2020-07-10 | 广州华多网络科技有限公司 | 整数压缩方法及装置 |
CN107565970B (zh) * | 2017-08-17 | 2021-01-15 | 苏州浪潮智能科技有限公司 | 一种基于特征识别的混合无损压缩方法及装置 |
-
2008
- 2008-06-30 CN CN2008101228946A patent/CN101299611B/zh not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
CN101299611A (zh) | 2008-11-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101299611B (zh) | 一种基于集合游程的数据压缩方法 | |
CN100517979C (zh) | 一种数据压缩及解压缩方法 | |
EP0695040B1 (en) | Data compressing method and data decompressing method | |
US5973630A (en) | Data compression for use with a communications channel | |
US6489902B2 (en) | Data compression for use with a communications channel | |
CN102122960B (zh) | 一种针对二进制数据的多字符组合无损数据压缩方法 | |
CN112953550B (zh) | 数据压缩的方法、电子设备及存储介质 | |
CN108768403A (zh) | 基于lzw的无损数据压缩、解压方法及lzw编码器、解码器 | |
CN107423397B (zh) | 一种面向多任务微***的自适应压缩存储及解压提取方法 | |
CN101667843B (zh) | 嵌入式***的数据压缩、及解压缩方法与装置 | |
CN112003625A (zh) | 一种霍夫曼编码方法、***及设备 | |
CN108810553B (zh) | 一种基于稀疏化处理的移动节点监测数据序列压缩方法 | |
US6919826B1 (en) | Systems and methods for efficient and compact encoding | |
CN114697672B (zh) | 基于游程全零编码的神经网络量化压缩方法及*** | |
CN111510156A (zh) | 一种基于分段的哈夫曼动态压缩及解压大文件的方法 | |
CN103546161A (zh) | 基于二进制位处理的无损压缩方法 | |
CN110995753A (zh) | 用电信息采集***中远程通信报文的组合压缩方法 | |
CN116016606A (zh) | 一种基于智慧云的污水处理运维数据高效管理*** | |
CN103078646B (zh) | 字典查询压缩、解压缩方法及其装置 | |
WO2001063772A1 (en) | Method and apparatus for optimized lossless compression using a plurality of coders | |
CN104394415B (zh) | 一种视频大数据分布式解码的方法 | |
CN105120276A (zh) | 自适应Motion JPEG编码方法和*** | |
US6292115B1 (en) | Data compression for use with a communications channel | |
JP6835285B1 (ja) | データ圧縮方法、データ圧縮装置、データ圧縮プログラム、データ伸長方法、データ伸長装置およびデータ伸長プログラム | |
Mathpal et al. | A research paper on lossless data compression techniques |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
C17 | Cessation of patent right | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20111005 Termination date: 20130630 |