掌桥专利:专业的专利平台
掌桥专利
首页

哈夫曼编码图像的解码方法、装置及显示设备

文献发布时间:2023-06-19 18:32:25


哈夫曼编码图像的解码方法、装置及显示设备

技术领域

本发明涉及图像处理领域,尤其是一种哈夫曼编码图像的解码方法、装置及设备。

背景技术

在JPEG格式图像解码的过程中,关键一步是哈夫曼(Huffman)解码,其决定了图像解码效率。哈夫曼编码为可变字长编码,该方法完全依据字符出现概率来构造异字头的平均长度最短的码字,若字符出现的概率越高,则对应的哈夫曼编码长度越短。在哈夫曼解码的过程中,由于不知道实际码长,因此通常采用逐比特读取待解码数据的方式解码(以下简称逐比特解码),即每次读取待解码数据的一位比特后,加上前面已经读取的x比特B

为了提高解码效率,现有技术提出了这样的技术方案:将固定长度的待解码数据分别与每个码长对应的最小码字扩充值比较,当所述待解码码字小于所述每个码长中任意一个码长对应的最小码字扩充值时,确定所述待解码码字的有效码长,根据所述有效码长,从码长与解码码字的对应关系中查找所述有效码长对应的解码码字,实现解码的方案,然而这种方案的效率仍然有提高的空间。

发明内容

基于上述现状,本发明的主要目的在于提供哈夫曼编码图像的解码方法、装置及设备,首先对待解码数据进行区分,确定为不是多义字后,再确定当前组待解码数据的真实码长,减少了解码过程中的无效比较次数,提高了解码效率。

为实现上述目的,本发明采用的技术方案如下:

一种哈夫曼编码图像的解码方法,包括如下步骤:

S100,判断数据缓冲区内的当前组待解码数据是否为多义字,若否则执行S200,若是则执行S300;其中,每组待解码数据的长度为预设长度;

S200,将所述当前组待解码数据依次与多个最小码字扩充值中的一个进行比较,如果所述当前组待解码数据小于某一最小码字扩充值则停止比较,将所述某一码字扩充值的前一个码字扩充值作为第一最小码字扩充值,并在映射关系中查找与所述第一最小码字扩充值对应的第一真实码长,从所述当前组待解码数据中读取长度为所述第一真实码长的比特数据作为第一哈夫曼码字;其中,所述映射关系为每个最小码字扩充值与对应的真实码长的对应关系,多个最小码字扩充值由对应的哈夫曼码字右侧填0至所述预设长度后得到;

S300,根据所述多义字的真实含义以不同于S200的方式进行解码。

优选地,所述S300包括,判断下一组待解码数据是否为十六进制数值00;

若是,则判断所述多义字的真实含义为哈夫曼码字的组成部分,并从所述当前组待解码数据和下下组待解码数据组成的待解码数据中第K位比特开始逐比特解码;其中,K等于所述预设长度加1;

若否,则判断所述多义字的真实含义为标记码的组成部分,并将所述多义字与所述下一组待解码数据组成标记码,根据所述标记码的真实含义解码。

优选地,在所述S200之后还包括如下步骤:

S400,查找所述第一哈夫曼码字对应的解码值,并解析所述解码值获得第一比特长度;

S500,从所述数据缓冲区内所述第一哈夫曼码字之后读取所述第一比特长度的比特数据作为所述解码值的量化值数据。

优选地,在所述S500之后还包括如下步骤:

S600,若所述第一哈夫曼码字的真实码长与所述第一比特长度之和不等于所述预设长度的整数倍,则判断所述数据缓冲区内所述第一比特长度的比特数据之后的下一组待解码数据是否为所述多义字,若不是所述多义字,则执行步骤S700;

S700,从所述数据缓冲区内以所述当前组待解码数据的第一个比特数据为起点的第(M+N+1)位开始读取所述预设长度的待解码数据组成跨组待解码数据;其中,M为所述第一真实码长,N为所述第一比特长度;

将所述跨组待解码数据依次与多个最小码字扩充值中的一个进行比较,如果所述当前组待解码数据小于某一最小码字扩充值则停止比较,将所述某一最小码字扩充值的前一个码字扩充值作为第二最小码字扩充值,并在所述映射关系中查找与所述第二最小码字扩充值对应的第二真实码长,并从所述跨组待解码数据中读取长度为所述第二真实码长的比特数据作为第二哈夫曼码字。

优选地,在所述S600中,若所述下一组待解码数据为所述多义字,则执行S800;

S800,对所述第一比特长度的比特数据与所述下一组待解码数据之间的比特数据,从所述数据缓冲区内以所述当前组待解码数据的第一个比特数据为起点的第(M+N+1)位开始逐比特解码。

优选地,所述映射关系包括:第一子映射关系和第二子映射关系,所述第一子映射关系为所述最小码字扩充值与索引之间的关系,所述第二子映射关系为所述索引与所述真实码长之间的关系,

所述在映射关系中查找与所述第一最小码字扩充值对应的第一真实码长中包括:

S210,在所述第一子映射关系中查找所述当前组待解码数据对应的第一最小码字扩充值的索引;

S220,根据所述索引,在所述第二子映射关系中查找所述当前组待解码数据的对应的第一真实码长。

优选地,所述S400中,通过如下步骤查找所述第一哈夫曼码字对应的解码值:

S410,根据所述第一真实码长确定第一地址,所述第一地址为码长等于所述第一真实码长的最小哈夫曼码字在哈夫曼编码表中的地址,所述哈夫曼编码表用于存储哈夫曼码字对应的解码值;

S420,计算所述第一哈夫曼码字与所述最小哈夫曼码字的差值作为地址偏移值;

S430,以所述第一地址为基准偏移所述地址偏移值确定第二地址,读取所述第二地址中数值作为所述第一哈夫曼码字的解码值。

优选地,在所述S200中,若所述当前组待解码数据大于任一最小码字扩充值,则在所述第二子映射关系中,查找最大索引对应的第三真实码长;从所述当前待解码数据中读取长度为所述第三真实码长的比特数据,若所述第三真实码长的比特数据不大于最大哈夫曼码字,则将所述第三真实码长的比特数据作为第一哈夫曼码字,所述最大哈夫曼码字为真实码长为所述第三真实码长的哈夫曼码字的最大值。

优选地,若所述第三真实码长的比特数据大于所述最大哈夫曼码字,则从所述当前组待解码数据和所述下一组待解码数据组成的待解码数据中第K位比特开始逐比特解码,其中,K等于所述预设长度加1。

本发明还提供了一种哈夫曼编码图像的解码装置,包括:

第一多义字判断模块,用于判断数据缓冲区内的当前组待解码数据是否为多义字,若否则触发第一解码模块工作,若是,则触发第二解码模块工作;

所述第一解码模块,将所述当前组待解码数据依次与多个最小码字扩充值中的一个进行比较,如果所述当前组待解码数据小于某一最小码字扩充值则停止比较,将所述某一码字扩充值的前一个码字扩充值作为第一最小码字扩充值,并在映射关系中查找与所述第一最小码字扩充值对应的第一真实码长,从所述当前组待解码数据中读取长度为所述第一真实码长的比特数据作为第一哈夫曼码字;其中,所述映射关系为每个最小码字扩充值与对应的真实码长的对应关系,多个最小码字扩充值由对应的哈夫曼码字右侧填0至所述预设长度后得到;

所述第二解码模块,用于根据所述多义字的真实含义以不同于所述第一解码模块的方式进行解码。

优选地,所述第二解码模块还包括数值零检测单元,用于判断下一组待解码数据是否为十六进制数值00;

若是,则判断所述多义字的真实含义为哈夫曼码字的组成部分,并从所述当前组待解码数据和下下组待解码数据组成的待解码数据中第K位比特开始逐比特解码;其中,K等于所述预设长度加1;

若否,则判断所述多义字的真实含义为标记码的组成部分,并将所述多义字与所述下一组待解码数据组成标记码,根据所述标记码的真实含义解码。

优选地,还包括量化值数据获取模块,所述量化值数据获取模块在所述第一解码模块工作之后工作,用于:

查找所述第一哈夫曼码字对应的解码值,并解析所述解码值获得第一比特长度;

从所述数据缓冲区内所述第一哈夫曼码字之后读取所述第一比特长度的比特数据作为所述解码值的量化值数据。

优选地,还包括第三解码模块,所述第三解码模块在所述量化值数据获取模块工作之后工作,用于:

若所述第一哈夫曼码字的真实码长与所述第一比特长度之和不等于所述预设长度的整数倍,则判断所述数据缓冲区内所述第一比特长度的比特数据之后的下一组待解码数据是否为所述多义字,若不是所述多义字,

从所述数据缓冲区内以所述当前组待解码数据的第一个比特数据为起点的第(M+N+1)位开始读取所述预设长度的待解码数据组成跨组待解码数据;其中,M为所述第一真实码长,N为所述第一比特长度;

将所述跨组待解码数据依次与多个最小码字扩充值中的一个进行比较,如果所述当前组待解码数据小于某一最小码字扩充值则停止比较,将所述某一最小码字扩充值的前一个码字扩充值作为第二最小码字扩充值,并在所述映射关系中查找与所述第二最小码字扩充值对应的第二真实码长,并从所述跨组待解码数据中读取长度为所述第二真实码长的比特数据作为第二哈夫曼码字。

优选地,若所述下一组待解码数据为所述多义字,则对所述第一比特长度的比特数据与所述下一组待解码数据之间的比特数据,从所述数据缓冲区内以所述当前组待解码数据的第一个比特数据为起点的第(M+N+1)位开始逐比特解码。

优选地,所述映射关系包括:第一子映射关系和第二子映射关系,所述第一子映射关系为最小码字扩充值与索引之间的关系,所述第二子映射关系为所述索引与所述真实码长之间的关系,

所述在映射关系中查找与所述第一最小码字扩充值对应的第一真实码长中包括:

在所述第一子映射关系中查找所述当前组待解码数据对应的第一最小码字扩充值的索引;

根据所述索引,在所述第二子映射关系中查找所述当前组待解码数据的对应的第一真实码长。

优选地,所述量化值数据获取模块通过如下步骤查找所述第一哈夫曼码字对应的解码值:根据所述第一真实码长确定第一地址,所述第一地址为码长等于所述第一真实码长的最小哈夫曼码字在哈夫曼编码表中的地址,所述哈夫曼编码表用于存储哈夫曼码字对应的解码值;

计算所述第一哈夫曼码字与所述最小哈夫曼码字的差值作为地址偏移值;

以所述第一地址为基准偏移所述地址偏移值确定第二地址,读取所述第二地址中数值作为所述第一哈夫曼码字的解码值。

优选地,所述第一解码模块还用于,若所述当前组待解码数据大于任一最小码字扩充值,则在所述第二子映射关系中,查找最大索引对应的第三真实码长;从所述当前待解码数据中读取长度为所述第三真实码长的比特数据,若所述第三真实码长的比特数据不大于最大哈夫曼码字,则将所述第三真实码长的比特数据作为第一哈夫曼码字,所述最大哈夫曼码字为真实码长为所述第三真实码长的哈夫曼码字的最大值。

优选地,若所述临时码长的比特数据大于所述最大哈夫曼码字,则从所述当前组待解码数据和所述下一组待解码数据组成的待解码数据中第K位比特开始逐比特解码,其中,K等于所述预设长度加1。

本发明还提供了一种嵌入式显示设备,采用任一所述的方法进行哈夫曼编码图像解码,或者包括任一所述的解码装置。

本发明还提供了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被执行时能够实现如任一所述的方法。

本发明还提供了一种解码芯片,包括处理器和存储器,所述存储器内存储有计算机程序,所述处理器能够执行所述计算机程序以实现如任一项所述的方法。

依据本发明实施例公开的哈夫曼编码图像的解码方法、装置及设备,通过判断数据缓冲区内的当前组待解码数据是否为多义字,若否,则将所述当前组待解码数据与每个最小码字扩充值依次比较如果所述当前组待解码数据小于某一最小码字扩充值则停止比较,将所述某一码字扩充值的前一个码字扩充值作为第一最小码字扩充值,并在映射关系中查找与所述第一最小码字扩充值对应的第一真实码长,从所述当前组待解码数据中读取长度为所述第一真实码长的比特数据作为第一哈夫曼码字。本申请实施例首先对待解码数据进行区分,确定为不是多义字后,再确定当前组待解码数据的真实码长,减少了解码过程中的无效比较次数,提高了解码效率。

本发明的其他有益效果,将在具体实施方式中通过具体技术特征和技术方案的介绍来阐述,本领域技术人员通过这些技术特征和技术方案的介绍,应能理解所述技术特征和技术方案带来的有益技术效果。

附图说明

以下将参照附图对本发明的哈夫曼编码图像的解码方法、装置及设备优选实施方式进行描述。图中:

图1为根据本发明的一种优选实施方式的哈夫曼编码图像的解码方法的流程图;

图2a~图2d为根据本发明的一种优选实施方式的哈夫曼编码图像的解码方法中数据缓冲区示意图;

图3为根据本发明的又一种优选实施方式的哈夫曼编码图像的解码方法的流程图;

图4a为根据本发明的一种优选实施方式的哈夫曼编码图像的解码方法中第一子映射关系示意图;

图4b~图4c为根据本发明的一种优选实施方式的哈夫曼编码图像的解码方法中第二子映射关系示意图;

图5a为根据本发明的一种优选实施方式的哈夫曼编码图像的解码方法中第一子映射关系示意图;

图5b为根据本发明的一种优选实施方式的哈夫曼编码图像的解码方法中第二子映射关系示意图;

图6为根据本发明的一种优选实施方式的哈夫曼编码图像的解码方法中一帧图像的解码流程图。

具体实施方式

以下基于实施例对本发明进行描述,但是本发明并不仅仅限于这些实施例。在下文对本发明的细节描述中,详尽描述了一些特定的细节部分,为了避免混淆本发明的实质,公知的方法、过程、流程、元件并没有详细叙述。

此外,本领域普通技术人员应当理解,在此提供的附图都是为了说明的目的,并且附图不一定是按比例绘制的。

除非上下文明确要求,否则整个说明书和权利要求书中的“包括”、“包含”等类似词语应当解释为包含的含义而不是排他或穷举的含义;也就是说,是“包括但不限于”的含义。

在本发明的描述中,需要理解的是,术语“第一”、“第二”等仅用于描述目的,而不能理解为指示或暗示相对重要性。此外,在本发明的描述中,除非另有说明,“多个”的含义是两个或两个以上。

哈夫曼编码图像(如jpeg格式的图像)的码流中可能存在代表多种含义的多义字,例如0xFF(代表十六进制数“FF”,以下用0x开头的数值代表16进制数值),该0xFF可能是两字节的标记码的组成部分,如标记码0xFFD8代表图像起始位标志,标记码0xFFFE代表注释等;该0xFF也可能是哈夫曼码字的组成部分(即该0xFF是经过哈夫曼编码产生的两字节压缩码流例如0xFF00的组成部分)。在解码时,若待解码数据为0xFF,则需要进一步判断0xFF是标记码的组成部分还是哈夫曼码字的组成部分。

本申请公开了一种哈夫曼编码图像的解码方法,参考图1和图2a,图1为本实施例中一种哈夫曼编码图像的解码方法的流程图。图2a示出了数据缓冲区和解码器中的数据处理示意图,以一个MCU(Minimum Coding Unit,最小编码单元)为单位解码,假设当前共包括8组待解码数据,A1~A8,数据缓冲区内储存4组待解码数据A1~A4,解码器当前正在解码的当前组待解码数据为A1。其中,每组待解码数据的长度为预设长度,预设长度的取值可根据哈夫曼码字出现的概率确定,例如若码长小于8比特的哈夫曼码字出现的概率大于70%,则预设长度的可以取值为8比特,本实施例中的预设长度取8比特。

该哈夫曼编码图像的解码方法包括如下步骤:

S100,判断数据缓冲区内的当前组待解码数据是否为多义字,若否则执行S200,若是则执行S300;其中,每组待解码数据的长度为预设长度;

S200,将当前组待解码数据依次与多个最小码字扩充值中的一个进行比较,即按照最小码字扩充值由小到大的顺序比较,如果当前组待解码数据A1小于某一最小码字扩充值则停止比较,将某一码字扩充值的前一个码字扩充值作为第一最小码字扩充值,并在映射关系中查找与第一最小码字扩充值对应的第一真实码长,从当前组待解码数据A1中读取长度为第一真实码长的比特数据作为第一哈夫曼码字。

其中,映射关系为每个最小码字扩充值与对应的真实码长的对应关系,多个最小码字扩充值由对应的哈夫曼码字右侧填0至预设长度后得到,对应的哈夫曼码字指若码长为n,则码长等于n的最小码字,例如,在预设长度为8比特的情况下,码长为2对应的最小哈夫曼码字为00,最小哈夫曼码字00对应的最小码字扩充值为:0000 0000;码长为3的最小哈夫曼码字为100,最小哈夫曼码字100对应的最小码字扩充值为1000 0000,若码长为8则无需填0,其最小哈夫曼码字等于其最小码字扩充值。

S300,根据所述多义字的真实含义以不同于S200的方式进行解码。

具体的解码方式可采用逐比特解码方式,也可以采用其他的解码方式,在此不做限定。如图2a所示,在一些实施例中S300包括,判断下一组待解码数据A2是否为十六进制数值00;若是,则判断多义字的真实含义为哈夫曼码字的组成部分,并从当前组待解码数据A1和下下组待解码数据A3(0x72)组成的待解码数据(0xFF72)中第K位(第9位)比特开始逐比特解码;其中,K等于预设长度加1。如图2b所示,若下一组待解码数据不为十六进制数值00,则判断多义字的真实含义为标记码的组成部分,并将多义字(0xFF)与下一组待解码数据(0xDB)组成标记码,根据标记码(0xFFDB)的真实含义解码,如标记码0xFFDB的含义为量化表,转入至量化表处理程序处理。

本实施例中,如果不先对判断当前组待解码数据A1是否为多义字,而是直接按照步骤S200进行解码,且在当前组待解码数据A1与所有最小码字扩充值进行比较后仍没有找到所述第一最小码字扩充值(比较次数的数值大小等于预设长度),此时再判断当前组待解码数据A1是否为多义字并且发现当前组待解码数据为标记码的组成部分,而不是哈夫曼码字的组成部分,则上述将当前组待解码数据假定为哈夫曼码字并进行的多次比较将变成是无用和多余的,也即是无效的,这种解码效率较低。而在本实施例的实际方案中,先判断数据缓冲区内的当前组待解码数据A1是否为多义字,若不是多义字,则按照步骤S200进行解码,若是多义字则按照步骤S300进行解码,可以有效避免前面提到的无效比较次数,提高解码效率。如图3所示,在确定第一哈夫曼码字之后,还需要继续求解第一哈夫曼码字对应的解码值,以确定第一哈夫曼码字对应的量化值数据。具体的,包括如下步骤:S400,查找第一哈夫曼码字对应的解码值,并解析解码值获得第一比特长度;S500,从数据缓冲区内第一哈夫曼码字之后读取第一比特长度的比特数据作为解码值的量化值数据。例如,如图2c所示,当前组待解码数据A1为1110 0011,下一组待解码数据A2为10010010,执行步骤S400,求解出第一哈夫曼码字为111000,查找出对应的解码值为16进制数值06,根据解码值计算游程长度为0,非零系数占用的位宽为6,其中非零系数占用的位宽为第一比特长度。执行步骤S500,从数据缓冲区第一哈夫曼码字(111000)之后读取所述第一比特长度(6比特)的比特数据(111001)作为解码值(16进制值06)的非零量化值数据。

请继续参考图2c和图3,在第一组待解码数据完成上述解码步骤后,执行S600,若第一哈夫曼码字的第一真实码长(6)与第一比特长度(6)之和不等于预设长度(8)的整数倍,则判断数据缓冲区内第一比特长度的比特数据之后的下一组待解码数据A3(10010010)是否为多义字,若不是多义字,则执行步骤S700。S700,从数据缓冲区内以当前组待解码数据的第一个比特数据为起点的第(M+N+1)位(本实施例为第13位)开始读取预设长度的待解码数据组成跨组待解码数据(0010 1001);其中,M为第一真实码长(6),N为第一比特长度(6)。将所述跨组待解码数据依次与多个最小码字扩充值中的一个进行比较,如果所述当前组待解码数据小于某一最小码字扩充值则停止比较,将所述某一最小码字扩充值作为的前一个码字扩充值第二最小码字扩充值,并在所述映射关系中查找与所述第二最小码字扩充值对应的第二真实码长,并从所述跨组待解码数据中读取长度为所述第二真实码长的比特数据作为第二哈夫曼码字。求解第二哈夫曼码字的量化值数据与求解第一哈夫曼码字对应的量化值数据的方法相同,在此不再赘述。

如图2d所示,在步骤S600中,若下一组待解码数据A3为多义字,如0xFF,则执行步骤S800;S800,对第一比特长度的比特数据与下一组待解码数据A3之间的比特数据(0010),从所述数据缓冲区内以所述当前组待解码数据的第一个比特数据为起点的第(M+N+1)位(第13位)开始逐比特解码。

在一些实施例中,哈夫曼码字的真实码长并不连续,例如真实码长小于预设长度(如预设长度为8)哈夫曼码字的真实码长包括:2、3、4、5、7、8,即码长为1和码长为6的哈夫曼码字不存在。若步骤S200中,求解出待解码数据小于真实码长为7对应的第一最小码字扩充值,则只能确定待解码数据的真实码长小于7,则并不能直接确定出待解码数据的真实码长,若直接认定为待解码数据的真实码长为6,则出现解码错误。为解决上述问题,步骤S200中的映射关系包括第一子映射关系(如图4a所示)和第二子映射关系(如图4b所示),第一子映射关系为最小码字扩充值(记为p_cw[idx])与索引(记为idx)之间的关系,第二子映射关系为索引idx与真实码长之间的关系(为方便理解,在图4a、图5a和图5b中列出了真实码长的值,实际在图4a、图5a和图5b的第一子映射关系中并不存在真实码长列)。具体地,S200包括:步骤S210,在第一子映射关系中查找当前组待解码数据A1对应的第一最小码字扩充值的索引。若当前组待解码数据A1的值小于p_cw[4],可知当前组待解码数据A1的真实码长小于idx=4对应的真实码长,即当前组待解码数据A1中的真实码长为索引idx=3(即p_cw[4]对应的前一个码字扩充值)对应的真实码长,继续执行步骤S220。S220,根据索引,在第二子映射关系中查找当前组待解码数据A1的对应的真实码长。具体地,根据索引idx=3,在第二子映射关系中查找idx=3对应的真实码长为5,进而确定出待解码数据中的真实码长。为了后续进一步求解哈夫曼码字的解码值的方便,在另一些实施例中,第二子映射关系为索引值idx和真实码长对应的值(记为p_len[idx])的关系(如图4c所示),其中p_len[idx]的值等于真实码长的值减1。在一些实施例中,查找第一哈夫曼码字对应的解码值,包括如下步骤:S410,根据真实码长确定第一地址,第一地址为码长等于真实码长的最小哈夫曼码字在哈夫曼编码表中的地址(记为hops),其中,哈夫曼编码表用于存储哈夫曼码字对应的解码值。S420,计算第一哈夫曼码字(记为tdat)与最小哈夫曼码字(记为hmin)的差值作为地址偏移值。S430,以第一地址为基准偏移地址偏移值确定第二地址(记为code_pos,code_pos=hpos+(tdat-hmin))读取第二地址中数值作为第一哈夫曼码字的解码值。

在步骤S200中,若当前组待解码数据A1大于第一子映射关系中存储的任一最小码字扩充值,则要进一步确定待解码数据中哈夫曼码字的真实码长等于预设长度范围内真实码长的最大值还是大于预设长度。请参考图5a和图5b,图5a为第一子映射关系,索引记为idx,最小码字扩充值记为p_cw[idx],图5b为第二子映射关系,真实码长对应的值记为p_len[idx](等于真实码长减1),预设长度为8。本实施例中,真实码长为8的哈夫曼码字的数量为0,预设长度范围内真实码长的最大值为7。为了索引的方便,本实施例中统一将第一子映射关系和第二子映射关系的索引的数量扩充至预设长度,使得最大索引对应的第三真实码长为预设范围内的最大真实码长对应的值。具体地,第一子映射关系的扩充的方式为将预设范围内的最小码字扩充值的最大值复制到剩余索引对应的最小码字扩充值中,即p_cw[7]=p_cw[6]=p_cw[5]=p_cw[4]=11110000,对应地,第二子映射关系中,p_len[7]=p_len[6]=p_len[5]=p_len[4]=6,则第一子映射关系中最小码字扩充值的最大值为p_cw[7],第二子映射关系中,预设长度范围内真实码长的最大值所对应的值为最大索引对应的值p_len[7]。在第二子映射关系中,查找最大索引(idx=7)对应的第三真实码长(p_len[7]);从当前待解码数据A1中读取长度为第三真实码长的比特数据,若第三真实码长的比特数据不大于最大哈夫曼码字(真实码长为7的哈夫曼码字中的最大值),则将第三真实码长的比特数据作为第一哈夫曼码字。

若当前组待解码数据内对应的真实码长小于预设长度,在解出第一哈夫曼码字后,还要将上一次多读取的比特回归至待解码数据中,并对尚未开始解码的待解码数据继续解码。

若第三真实码长的比特数据大于最大哈夫曼码字,则从当前组待解码数据和下一组待解码数据组成的待解码数据中第K位(第9位)比特开始逐比特解码,其中,K等于预设长度加1。

若在读取哈夫曼编码表时,在预设长度范围内的哈夫曼码字均未使用,若预设长度等于8,则真实码长小于等于8的哈夫曼码字不存在,则将映射关系中预设长度范围内的每个最小码字扩充值的每一个比特均赋值为0(例如预设长度为8,则赋值为8比特的0),第二子映射关系中的真实码长也均赋值为0(相应地,p_len[idx]各元素均赋值为-1)。从数据缓冲区读取当前组待解码数据后,依次与多个最小码字扩充值比较,若当前组待解码数据大于任一最小码字扩充值,在第二子映射关系中查找索引值为最大值对应的真实码长,若对应的真实码长的为0(或者p_len[7]为-1),则判断出码长为1-8范围内的哈夫曼码字不存在,从第预设长度加1(9)位比特开始逐比特解码。若对应的真实码长的长度不为0,则查找最大索引对应的第三真实码长;从当前待解码数据中读取长度为第三真实码长的比特数据,若第三真实码长的比特数据不大于最大哈夫曼码字,则将第三真实码长的比特数据作为第一哈夫曼码字,其中最大哈夫曼码字为真实码长为第三真实码长的哈夫曼码字的最大值。

由于小型嵌入式平台的内存空间有限,待解码数据通常是分段载入数据缓冲区,因此当数据缓冲区的解码完成后,则需加载下一段待解码数据。为了指示加载下一段待解码数据的时机,本实施例中还包括如下步骤,请重新参考图2c,未开始对数据缓冲区数据解码时,剩余组数dctr初始化为4,剩余组数用于记录数据缓冲区中存储的剩余未解码的待解数据的组数。当前组待解码数据A1剩余的未解码的比特数记为bitpos,若预设长度为8,则bitpos的初始值为8,每完成1比特的数据解码后,则bitpos减1。设置tsign用于指示当前组的剩余比特数是否大于待解码数据内对应的真实码长,具体地tsign=bitpos-真实码长,当tsign大于0时,表示当前组剩余比特数大于所述真实码长,则将bitpos的值更新为tsign,当tsign小于0时,表示当前组剩余比特数小于所述真实码长,已经开始解码下一组数据,则将bitpos的值更新为8+tsign。第一比特长度记为num。读取第一哈夫曼码字对应的非零系数(量化数据)后,若非零量化数据所在的待解码数据组仍存在未解码的比特,则未解码比特数据所在组的仍计入剩余组数中。具体地,若第一哈夫曼码字的第一真实码长为6,读取第一哈夫曼码字后,当前组待解码数据A1剩余的未解码的比特数bitpos=2,根据第一哈夫曼码字查找出第一哈夫曼码字对应的解码值后,解析第一比特长度num为6,第一比特长度num大于当前组待解码数据剩余的未解码的比特数bitpos=2,且小于bitpos与预设长度(8)的和值(10),则表示A1组内存储的比特数据已经全部解码完成,未解码比特数据所在组为A2~A4,剩余组数dctr=3;若第一比特长度num为1,则第一比特长度num小于当前组待解码数据剩余的未解码的比特数bitpos(bitpos=2),则表示A1组仍存在未解码比特数据,未解码比特数据所在组为A1~A4,剩余组数为4;若第一比特长度num为14,第一比特长度num大于当前组待解码数据剩余的未解码的比特数bitpos=2,且大于bitpos与预设长度的和值(10),则表示A1和A2组内存储的比特数据已经全部解码完成,未解码比特数据所在组为A3~A4,剩余组数dctr=2。以此类推,当剩余组数为0时,则数据缓冲区加载下一段待解码数据。

以一个具体的jpeg图像AC分量解码过程为例。在第一子映射关系中,idx为索引,p_cw为最小码字扩充值,在第二子映射关系中idx为索引,p_len为真实码长对应的值(等于真实码长减1)。当前组待解码数据为A1为10100100,不为多义字,执行S210,确定出A1的值小于最小码字扩充值p_cw[3],当前组待解码数据对应的第一最小码字扩充值的索引为idx=2。执行S220,在第二映射关系中查找p_len[2]=3,确定出A1内的第一哈夫曼码字的真实码长为4(p_len[2]+1=4),则第一哈夫曼码字为1010。执行S410,真实码长为4的最小哈夫曼码字为1010,第一地址记为hpos,执行S420,计算出地址偏移值为0。执行S430,以第一地址为基准偏移地址偏移值确定第二地址,因为地址偏移值为0,计算出本实施例中第二地址的值等于第一地址,在第二地址中读取第一哈夫曼码字对应的解码值(记为rvalue)为0x23,即游程长度为2(对应解码值为2字节的零值量化值数据),第一比特长度为3,从数据缓冲区内所述第一哈夫曼码字(1010)之后读取所述第一比特长度(3)的比特数据(010)作为所述解码值的非零量化值数据。

求解出量化数据后,还要进行反量化和反DCT(Discrete Cosine Transform,离散余弦变换)运算,本实施例中,在对哈夫曼编码解码时,以MCU为单元进行解码,解析出量化值数据后,仍以MCU为单元进行反量化和反DCT运算,直至求解出一帧图像的所有MCU的最终的解码值。如图6所示,读取出第i个MCU的量化值后,再对第i个MCU的量化数据进行反量化和反DCT,直至完成一帧图像的所有MCU的解码(本实施例中一帧图像包括N个MCU)。

本发明还提供了一种哈夫曼编码图像的解码装置,包括:

第一多义字判断模块,用于判断数据缓冲区内的当前组待解码数据是否为多义字,若否则触发第一解码模块工作,若是,则触发第二解码模块工作;

所述第一解码模块,将所述当前组待解码数据依次与多个最小码字扩充值中的一个进行比较,如果所述当前组待解码数据小于某一最小码字扩充值则停止比较,将所述某一码字扩充值的前一个码字扩充值作为第一最小码字扩充值,并在映射关系中查找与所述第一最小码字扩充值对应的第一真实码长,从所述当前组待解码数据中读取长度为所述第一真实码长的比特数据作为第一哈夫曼码字;其中,所述映射关系为每个最小码字扩充值与对应的真实码长的对应关系,多个最小码字扩充值由对应的哈夫曼码字右侧填0至所述预设长度后得到;

所述第二解码模块,用于根据所述多义字的真实含义以不同于所述第一解码模块的方式进行解码。

本发明还提供了一种嵌入式显示设备,采用如前面所述的方法进行哈夫曼编码图像解码,或者包括如前面所述的解码装置。

此外,本发明还提供了一种计算机可读存储介质,如芯片、光盘等,其上存储有计算机程序,被执行时能够实现前面所述的方法。

需要说明的是,本公开的实施例所述的计算机可读存储介质并不限定于上述所给实施例,例如还可以为电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本公开的实施例中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。

本领域的技术人员能够理解的是,在不冲突的前提下,上述各优选方案可以自由地组合、叠加。其中,附图中的流程图和框图,图示了按照本公开各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,该模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生,例如,两个接连表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。本文中对于各步骤的编号仅为了方便说明和引用,并不用于限定前后顺序,具体的执行顺序是由技术本身确定的,本领域技术人员可以根据技术本身确定各种允许的、合理的顺序。

需要说明的是,本发明中采用步骤编号(字母或数字编号)来指代某些具体的方法步骤,仅仅是出于描述方便和简洁的目的,而绝不是用字母或数字来限制这些方法步骤的顺序。本领域的技术人员能够明了,相关方法步骤的顺序,应由技术本身决定,不应因步骤编号的存在而被不适当地限制,本领域技术人员可以根据技术本身确定各种允许的、合理的步骤顺序。

本领域的技术人员能够理解的是,在不冲突的前提下,上述各优选方案可以自由地组合、叠加。

应当理解,上述的实施方式仅是示例性的,而非限制性的,在不偏离本发明的基本原理的情况下,本领域的技术人员可以针对上述细节做出的各种明显的或等同的修改或替换,都将包含于本发明的权利要求范围内。

相关技术
  • 图像解码装置、图像解码方法以及图像编码装置
  • 图像解码装置、图像解码方法以及图像编码装置
  • 图像解码装置以及图像解码方法
  • 图像解码装置以及图像解码方法
  • 图像解码装置以及图像解码方法
  • 基于最大码字的哈夫曼编码图像的解码方法、装置及设备
  • 图像编码装置、图像解码装置、图像编码方法、图像解码方法、图像编码程序、图像解码程序、以及记录了图像编码程序的计算机可读记录介质、记录了图像解码程序的计算机可读记录介质
技术分类

06120115607044