CN104679775A - 一种基于Huffman表的数据处理方法 - Google Patents

一种基于Huffman表的数据处理方法 Download PDF

Info

Publication number
CN104679775A
CN104679775A CN201310630387.4A CN201310630387A CN104679775A CN 104679775 A CN104679775 A CN 104679775A CN 201310630387 A CN201310630387 A CN 201310630387A CN 104679775 A CN104679775 A CN 104679775A
Authority
CN
China
Prior art keywords
data
node
code
data processing
processing method
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.)
Granted
Application number
CN201310630387.4A
Other languages
English (en)
Other versions
CN104679775B (zh
Inventor
杨正传
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Shanghai United Imaging Healthcare Co Ltd
Original Assignee
Shanghai United Imaging Healthcare Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Shanghai United Imaging Healthcare Co Ltd filed Critical Shanghai United Imaging Healthcare Co Ltd
Priority to CN201310630387.4A priority Critical patent/CN104679775B/zh
Publication of CN104679775A publication Critical patent/CN104679775A/zh
Application granted granted Critical
Publication of CN104679775B publication Critical patent/CN104679775B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • G06F16/2228Indexing structures
    • G06F16/2246Trees, e.g. B+trees

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Compression, Expansion, Code Conversion, And Decoders (AREA)

Abstract

本发明提供一种基于Huffman表的数据处理方法,包括:基于Huffman表构建二叉树数组,并基于所述二叉树数组进行解码。所述二叉树数组为二维数组,第一维是二叉树的层数,第二维是每层的节点数。述基于所述二叉树数组进行解码包括:读取图片数据,获取节点查询码,并根据所述二维数组的层数和节点查询码,对应定位至所述二维数组中的对应节点:若对应位置数据有效,则为叶节点,则当前查询结束;若否,则继续读取图片数据。本方法采用数组方式,避免容易出错的指针及树的操作,且编码相对更加简单,调试时更是比二叉树方式更加直观简单。

Description

一种基于Huffman表的数据处理方法
技术领域
本发明涉及一种数据处理方法,尤其涉及一种基于Huffman表的数据处理方法。
背景技术
传统的图像编码技术也称为第一代编码技术,主要有预测编码、变换编码、信息嫡编码与矢量量化。预测编码和变换编码是当前图像编码器最常用的技术,预测和变换的主要目的是降低图像原始空间域表示中存在的强相关性,使得预测或变换后的数据矩阵变成弱相关性矩阵,这样可以用标量量化和嫡编码进行有效的压缩。信息嫡编码是一种无失真编码,常用的有哈夫曼编码(Huffman Coding)、游程长度编码(Run Length Coding)和算术编码(Arithmetic Coding)三种。
传统的Huffman编码算法需要对原始数据进行两遍扫描:第一遍扫描要精确地统计出原始数据中每个值出现的频率,利用得到的频率创建Huffman树,并将树的有关信息保存起来,便于解压时使用;第二遍扫描根据前面得到的Huffman树对原始数据进行编码,并将编码信息存储起来。
在JPEG文件中,每个Huffman树的表示形式如图1所示:开始的16个字节是每个级别的数据的个数,本文称为数目区。紧接着的是对应的数据,本文成为数据区,一个数据一个字节,字节数是开始16个字节的字节之和。数据区按照数目区的顺序依次排列,直到结束。在解码的时候首先依次读取数目区的一个字节,得到对应的区段的数据数目,然后再依次将数据区中对应的数据添加到对应深度二叉树中,插入优先为左侧分支。再编码的时候是解码的逆向过程。
JPEG的图片数据是bit流的形式,每组可处理的数据由两部分组成,一个是Huffman查询码,一个是数据值,所有这些都按照字节流紧密排列。每部分的bit数目不定。
基于所述Huffman树的构建包括首先构建一个二叉树节点,具体如下:
其中,各成员变量的意义如下:L_child:该节点的左侧分支;R_child:该节点的右侧分支;ch:该节点的数据;IsLeaf:该节点是否是叶节点;若无左右分支,用来标志是不是数据节点,即存放数据的,如果不是叶节点则为中继节点,即无有效数据,只是向下一层查找的支持节点。
采用上述方法构建出来的Huffman树的示例如图2所示。其中,对应的其对应的JPEG数据如下表一所示。
表一
下面是解码的步骤:
1、首先读取数目区第一个字节,数值为0,表明第一层无数据。
2、读取数目区的第二个字节,数值为1,表明第二层有一个数据,则为Root Node构建一个左子节点,该节点是第一层的,所以还需为该节点再构建一个左子节点,并填入数据区第一个字节的数值,设置该节点状态为叶节点。
3、读取数目区的第三个字节,数值为2,则接着读取数据区的两个字节,数值依次为6和7。依旧从根节点开始,采用前序遍历,创建第三层的第一个节点,并设置其数值为6,状态为叶节点;接着再按照前序遍历的规则,增加第三层的第二个节点,设置数值为7,状态为叶节点。注意遍历的时候碰到叶节点则递归返回其他的树。
4、读取数目区的第四个字节,数值为0,表明第四层无数据。
5、读取数目区的第五个字节,数值为2,则接着读取数据区的两个字节,数值依次为22和29。采用类似与第3步中的方法,为第五层添加两个叶节点。
6、后续的字节均为0,即不用再添加叶节点了。
但是,现有技术在JPEG编解码时,使用二叉树的方式来编解码Huffman表时,代码实现复杂、出错几率高、代码调试复杂。
发明内容
现有技术在JPEG编解码时,使用二叉树的方式来编解码Huffman表时,代码实现复杂、出错几率高、代码调试复杂。
为解决上述问题,本发明提供一种基于Huffman表的数据处理方法,包括:基于Huffman表构建二叉树数组,并基于所述二叉树数组进行解码。
可选的,所述二叉树数组为二维数组,第一维是二叉树的层数,第二维是每层的节点数。
可选的,所述节点的初始状态为无效,一个节点包括一个字节或两个字节,所述一个字节用以保存数据或保存状态;所述两个字节用以保存数据和保存状态。
可选的,所述二叉树的层数为16。
可选的,提供数目区及数据区,所述数目区内的字节与所述数据区内对应层数据的数目对应。
可选的,包括:依次读取数目区的字节,获得该字节对应层的数据的数目:若当前读取数目区的字节为0,则继续读取位于数目区内的下一个字节;若当前读取的字节为非0,则计算当前层的初始查询码,并读取数据区的数据。
可选的,所述计算当前层的初始查询码包括:根据当前层与第一层的层数差值,将全局查询码左移相应的层数差值,并保存为当前层的初始查询码。
可选的,包括:读取所述数据区的当前数据后,对应保存至所述二维数组中对应当前层的节点。
可选的,保存当前数据至所述二维数组的当前层后,则对应查询码加1
可选的,所述基于所述二叉树数组进行解码包括:读取图片数据,获取节点查询码,并根据所述二维数组的层数和节点查询码,对应定位至所述二维数组中的对应节点:若对应位置数据有效,则为叶节点,则当前查询结束;若否,则继续读取图片数据。
可选的,所述定位包括:所述对应节点的位置序号为查询码-当前层初始查询码。
可选的,读取图片数据中的当前bit,作为节点查询码。
可选的,若当前位置数据无效,则读取所述图片数据中下一个bit,与前面一个bit组成2bit的查询码,在进行位置定位;若2bit的查询码对应的节点有效,则本次查询结束;如果无效,则继续读取图片数据中下一个bit,与前面的查询码结合组成,形成多一个bit的查询码,再次定位,直到查询码处理完毕。
可选的,所述查询码的总数为16bit。
与现有技术相比,本发明具有以下优点:本方法采用数组方式,避免容易出错的指针及树的操作,且编码相对更加简单,调试时更是比二叉树方式更加直观简单。执行速度快,数据规整,数据结构清晰,提高调试的效率。
附图说明
图1所示为JPEG文件中的Huffman表的表示形式示意图;
图2为采用二叉树构建形成的Huffman表的结构示意图;
图3为本发明一个实施例的二叉树数组的构建方法流程示意图。
具体实施方式
在下面的描述中阐述了很多具体细节以便于充分理解本发明。但是本发明能够以很多不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本发明内涵的情况下做类似推广,因此本发明不受下面公开的具体实施的限制。
其次,本发明利用示意图进行详细描述,在详述本发明实施例时,为便于说明,所述示意图只是实例,其在此不应限制本发明保护的范围。
现有技术在JPEG编解码时,使用二叉树的方式来编解码Huffman表时,代码实现复杂、出错几率高、代码调试复杂。
本发明提供一种基于Huffman表的数据处理方法,包括:基于Huffman表构建二叉树数组,并基于所述二叉树数组进行解码。其中,所述二叉树数组为二维数组,第一维是二叉树的层数,第二维是每层的节点数。所述二叉树的层数为16。
最开始的状态时,所述节点的初始状态为无效,一个节点包括一个字节或两个字节,所述一个字节用以保存数据或保存状态;所述两个字节用以保存数据和保存状态。即每个节点最多包括两个字节,一个用于保存数据,一个用于保存状态。
构建所述二叉树数组前包括提供数目区及数据区,所述数目区内的字节与所述数据区内对应层数据的数目对应。依次读取数目区的字节,获得该字节对应层的数据的数目:若当前读取数目区的字节为0,则继续读取位于数目区内的下一个字节;若当前读取的字节为非0,则计算当前层的初始查询码,并读取数据区的数据。
读取所述数据区的当前数据后,对应保存至所述二维数组中对应当前层的节点。并且在保存当前数据至所述二维数组的当前层后,则对应查询码加1。
其中,所述计算当前层的初始查询码包括:根据当前层与第一层的层数差值,将全局查询码左移相应的层数差值,并保存为当前层的初始查询码。
对应的,所述基于所述二叉树数组进行解码包括:读取图片数据,获取节点查询码,并根据所述二维数组的层数和节点查询码,对应定位至所述二维数组中的对应节点:若对应位置数据有效,则为叶节点,则当前查询结束;若否,则继续读取图片数据。其中,所述对应节点的位置序号为查询码-当前层初始查询码。所述查询码的总数为16bit。
读取图片数据中的当前bit,作为节点查询码。若当前位置数据无效,则读取所述图片数据中下一个bit,与前面一个bit组成2bit的查询码,在进行位置定位;若2bit的查询码对应的节点有效,则本次查询结束;如果无效,则继续读取图片数据中下一个bit,与前面的查询码结合组成,形成多一个bit的查询码,再次定位,直到查询码处理完毕。
下面结合具体的实施例对本发明的基于Huffman表的构建和解码进行详细描述。
如图3所示,作为一个实施例,所述二叉树数组的生成方法可以分为以下6步骤,具体如下:
1、比较Number Bytes数目区中的各字节数值,获取所述数目区中字节数最大的值。
2、生成二维数组,所述二维数组中的一维是二叉树的层数,另一维是每层的节点数,即为第一步中得到的Number Bytes数目区中的各字节数值。作为一个实施例,所述二叉树的层数即一维大小确定为16。
进一步地,生成所述二维数组时,同时设置各节点状态为无效。设置全局查询码初始为0。一个节点最多只占用2个字节,一个保存数据,一个保存状态。
3、读取Number Bytes数目区中的第一个字节,获得该一层的数据数目。如果值为0,则继续读取Number Bytes下一个字节;如果值不为0,则进入4。
4、根据3获取的数据数目,进而获取层数差值,计算本层的初始查询码。具体地,将全局查询码左移相应的位数,并保存为该层初始查询码。
5、读取Data Bytes数据区中第一个字节,保存进二维数组中对应该层的第一个节点,全局查询码加1。
6、依次读取下一个字节,处理方法同5,直到全部该层的数据全部读取完毕。接着进入3。
经过上述步骤,二叉树对应数组建立起来了。
接着,解码时二叉树数组的使用方法包括:在解码时,首先读取图片数据中的一个bit,并作为节点查询码,根据位数(即层数)和查询码的数值,定位到二维数组中的对应节点,位置序号为“查询码-该层初始查询码”,如果对应位置为数据有效,则为叶节点,本次查询结束;如果对应位置数据无效,则读取图片数据中下一个bit,与前面一个bit组成2bit的查询码,在进行位置定位,如果节点有效,则本次查询结束,如果无效,则再读取图片数据中下一个bit,与前面的查询码结合组成又多一个bit的查询码,再次定位。如此,直到16位的查询码都处理完毕,如果此时仍未找到有效节点,证明解码出错或文件数据错误,结束解码。
此方法的空间消耗与二叉树的结构关系很大,如果树的数据按层次平均分布,那么该方案将比二叉树实现更节省空间,如果树的数据集中在某一层次,那其空间消耗将会增加。
假设数据的数目为N,而各层数据最大数目为M,那么根据登时10*N=2*16*M,得到N:M=32:10,所以当总数目与层最大数目大于4时,数组方法将节省空间,在3-4之间时,两种方法相当,当小于3的时候,二叉树的方法较节省空间。因此整体而言,该方法均比二叉树的方法节省空间。
而且理解该方法需要对JPEG编码及相应编解码过程有深入了解。优点是编码简单,执行速度也很快。而且该方法数据规整,数据结构清晰,对提高调试的效率也有较大的好处。
本发明虽然已以较佳实施例公开如上,但其并不是用来限定本发明,任何本领域技术人员在不脱离本发明的精神和范围内,都可以利用上述揭示的方法和技术内容对本发明技术方案做出可能的变动和修改,因此,凡是未脱离本发明技术方案的内容,依据本发明的技术实质对以上实施例所作的任何简单修改、等同变化及修饰,均属于本发明技术方案的保护范围。

Claims (14)

1.一种基于Huffman表的数据处理方法,其特征在于,包括:基于Huffman表构建二叉树数组,并基于所述二叉树数组进行解码。
2.如权利要求1所述的基于Huffman表的数据处理方法,其特征在于,所述二叉树数组为二维数组,第一维是二叉树的层数,第二维是每层的节点数。
3.如权利要求1所述的基于Huffman表的数据处理方法,其特征在于,所述节点的初始状态为无效,一个节点包括一个字节或两个字节,所述一个字节用以保存数据或保存状态;所述两个字节用以保存数据和保存状态。
4.如权利要求1所述的基于Huffman表的数据处理方法,其特征在于,所述二叉树的层数为16。
5.如权利要求1所述的基于Huffman表的数据处理方法,其特征在于,提供Huffman表,包括数目区及数据区,所述数目区内的字节与所述数据区内对应层数据的数目对应。
6.如权利要求5所述的基于Huffman表的数据处理方法,其特征在于,包括:依次读取数目区的字节,获得该字节对应层的数据的数目:若当前读取数目区的字节为0,则继续读取位于数目区内的下一个字节;若当前读取的字节为非0,则计算当前层的初始查询码,并读取数据区的数据。
7.如权利要求6所述的基于Huffman表的数据处理方法,其特征在于,所述计算当前层的初始查询码包括:根据当前层与第一层的层数差值,将全局查询码左移相应的层数差值,并保存为当前层的初始查询码。
8.如权利要求6所述的基于Huffman表的数据处理方法,其特征在于,包括:读取所述数据区的当前数据后,对应保存至所述二维数组中对应当前层的节点。
9.如权利要求8所述的基于Huffman表的数据处理方法,其特征在于,保存当前数据至所述二维数组的当前层后,则对应查询码加1。
10.如权利要求2所述的基于Huffman表的数据处理方法,其特征在于,所述基于所述二叉树数组进行解码包括:读取图片数据,获取节点查询码,并根据所述二维数组的层数和节点查询码,对应定位至所述二维数组中的对应节点:若对应位置数据有效,则为叶节点,则当前查询结束;若否,则继续读取图片数据。
11.如权利要求10所述的基于Huffman表的数据处理方法,其特征在于,所述定位包括:所述对应节点的位置序号为查询码-当前层初始查询码。
12.如权利要求10所述的基于Huffman表的数据处理方法,其特征在于,读取图片数据中的当前bit,作为节点查询码。
13.如权利要求12所述的基于Huffman表的数据处理方法,其特征在于,若当前位置数据无效,则读取所述图片数据中下一个bit,与前面一个bit组成2bit的查询码,在进行位置定位;若2bit的查询码对应的节点有效,则本次查询结束;如果无效,则继续读取图片数据中下一个bit,与前面的查询码结合组成,形成多一个bit的查询码,再次定位,直到查询码处理完毕。
14.如权利要求10所述的基于Huffman表的数据处理方法,其特征在于,所述查询码的总数为16bit。
CN201310630387.4A 2013-12-02 2013-12-02 一种基于Huffman表的数据处理方法 Active CN104679775B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201310630387.4A CN104679775B (zh) 2013-12-02 2013-12-02 一种基于Huffman表的数据处理方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201310630387.4A CN104679775B (zh) 2013-12-02 2013-12-02 一种基于Huffman表的数据处理方法

Publications (2)

Publication Number Publication Date
CN104679775A true CN104679775A (zh) 2015-06-03
CN104679775B CN104679775B (zh) 2019-04-23

Family

ID=53314832

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201310630387.4A Active CN104679775B (zh) 2013-12-02 2013-12-02 一种基于Huffman表的数据处理方法

Country Status (1)

Country Link
CN (1) CN104679775B (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107565973A (zh) * 2017-08-01 2018-01-09 中国人民解放军国防科学技术大学 一种结点可扩展的哈夫曼编码的实现方法及电路结构
CN111510732A (zh) * 2020-05-12 2020-08-07 上海加糖科技有限公司 Jpeg文件解码方法、装置和电子设备
CN112199088A (zh) * 2020-10-19 2021-01-08 广东工业大学 一种二叉树数据结构的可视化演变方法

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH08204578A (ja) * 1995-01-31 1996-08-09 Matsushita Electric Ind Co Ltd 可変長符号復号方法
CN101945286A (zh) * 2010-09-29 2011-01-12 上海华为技术有限公司 压缩编码方法、解码解压方法、装置和通信系统
CN101998122A (zh) * 2010-12-13 2011-03-30 山东大学 Jpeg图像中范式霍夫曼的硬件解码方法及装置

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH08204578A (ja) * 1995-01-31 1996-08-09 Matsushita Electric Ind Co Ltd 可変長符号復号方法
CN101945286A (zh) * 2010-09-29 2011-01-12 上海华为技术有限公司 压缩编码方法、解码解压方法、装置和通信系统
CN101998122A (zh) * 2010-12-13 2011-03-30 山东大学 Jpeg图像中范式霍夫曼的硬件解码方法及装置

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107565973A (zh) * 2017-08-01 2018-01-09 中国人民解放军国防科学技术大学 一种结点可扩展的哈夫曼编码的实现方法及电路结构
CN107565973B (zh) * 2017-08-01 2020-07-14 中国人民解放军国防科学技术大学 一种结点可扩展的哈夫曼编码的实现方法及电路结构
CN111510732A (zh) * 2020-05-12 2020-08-07 上海加糖科技有限公司 Jpeg文件解码方法、装置和电子设备
CN112199088A (zh) * 2020-10-19 2021-01-08 广东工业大学 一种二叉树数据结构的可视化演变方法
CN112199088B (zh) * 2020-10-19 2023-07-25 广东工业大学 一种二叉树数据结构的可视化演变方法

Also Published As

Publication number Publication date
CN104679775B (zh) 2019-04-23

Similar Documents

Publication Publication Date Title
Bille et al. Random access to grammar-compressed strings and trees
WO2019153700A1 (zh) 编解码方法、装置及编解码设备
CN110457317B (zh) 一种基于状态视图的Hilbert曲线编码和解码方法
US8937564B2 (en) System, method and non-transitory computer readable medium for compressing genetic information
CN104283567A (zh) 一种名称数据的压缩、解压缩方法及设备
JP3778087B2 (ja) データ符号化装置及びデータ復号装置
CN108776673B (zh) 关系模式的自动转换方法、装置及存储介质
CN103067022A (zh) 一种整型数据无损压缩方法、解压缩方法及装置
WO2018000709A1 (zh) 时间信息编码方法、编码值检索方法、解码方法与装置
WO2021072874A1 (zh) 基于双数组的位置查询方法、装置、计算机设备及存储介质
WO2019076177A1 (zh) 基因测序数据压缩预处理、压缩、解压方法、系统及计算机可读介质
JP2003273748A (ja) 改善されたハフマンデコーディング方法及び装置
CN104679775A (zh) 一种基于Huffman表的数据处理方法
Yao et al. HRCM: an efficient hybrid referential compression method for genomic big data
CN102255617B (zh) 哈夫曼树的存储方法及利用数组进行数据解码的方法
CN102084594A (zh) 用于处理数字数据的方法
CN114301468A (zh) 一种fse编码方法、装置、设备及存储介质
CN108345607B (zh) 搜索方法和装置
CN115841094A (zh) 一种编码方法、装置、设备、介质及产品
Suri et al. Ternary tree and memory-efficient Huffman decoding algorithm
US20080114722A1 (en) Method For Low Distortion Embedding Of Edit Distance To Hamming Distance
TWI750022B (zh) 應用於鍵樹的編碼方法、應用於鍵樹的解碼方法與電子裝置
KR20240004518A (ko) 노드 정보를 사용하여 신경망 파라미터를 업데이트하는 디코더, 인코더, 제어부, 방법 및 컴퓨터 프로그램
Tian et al. A coding algorithm for constant weight vectors: A geometric approach based on dissections
Sun et al. PMFFRC: a large-scale genomic short reads compression optimizer via memory modeling and redundant clustering

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant
CP01 Change in the name or title of a patent holder

Address after: 201815 Shanghai City, Jiading District Jiading Industrial Zone No. 1180 Building 8 Hing Road

Patentee after: Shanghai Lianying Medical Technology Co., Ltd

Address before: 201815 Shanghai City, Jiading District Jiading Industrial Zone No. 1180 Building 8 Hing Road

Patentee before: SHANGHAI UNITED IMAGING HEALTHCARE Co.,Ltd.

CP01 Change in the name or title of a patent holder
CP02 Change in the address of a patent holder

Address after: 201807 2258 Chengbei Road, Jiading District, Shanghai

Patentee after: Shanghai Lianying Medical Technology Co.,Ltd.

Address before: 201815 No. 1180 Xingxian Road, Jiading Industrial Zone, Jiading District, Shanghai

Patentee before: Shanghai Lianying Medical Technology Co.,Ltd.

CP02 Change in the address of a patent holder