首页> 中国专利> 渐进式JPEG图像解码方法

渐进式JPEG图像解码方法

摘要

一种渐进式JPEG图像解码方法,此解码方法通过记录每一个可变长度解码结果的非零历史记录及正负号记录,用以作为解码下一个扫描层的参考,不用直接记录解码结果的系数值,进而节省了所占用的内存空间。据此,本发明在有限的内存资源中,仍可正确地实现图像解码,而不会影响到图像的呈现。

著录项

  • 公开/公告号CN101335887A

    专利类型发明专利

  • 公开/公告日2008-12-31

    原文格式PDF

  • 申请/专利权人 凌阳科技股份有限公司;

    申请/专利号CN200710112700.X

  • 发明设计人 陈昱志;黄志文;

    申请日2007-06-27

  • 分类号H04N7/26(20060101);H04N7/30(20060101);G06T9/00(20060101);H03M7/30(20060101);

  • 代理机构11245 北京纪凯知识产权代理有限公司;

  • 代理人沙捷

  • 地址 中国台湾新竹科学工业园区创新一路19号

  • 入库时间 2023-12-17 21:10:54

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2018-07-17

    未缴年费专利权终止 IPC(主分类):H04N7/26 授权公告日:20100210 终止日期:20170627 申请日:20070627

    专利权的终止

  • 2010-02-10

    授权

    授权

  • 2009-02-25

    实质审查的生效

    实质审查的生效

  • 2008-12-31

    公开

    公开

说明书

技术领域

本发明涉及一种图像解码方法,且特别涉及一种渐进式JPEG图像解码方法。

背景技术

以渐进式(Progressive)离散余弦变换(Discrete CosineTransformation,DCT)为基础的联合照相专家群(Joint PhotographicExperts Group,JPEG)压缩技术是采取将整个图像以多次扫描的方式进行编码,使其编码过的JPEG数据流包含多个扫描层的数据。因此在解码过程中,需解码多个扫描层的数据以重建原始图像,且每一个扫描层皆记录有原始图像的部分特征,因此每一个扫描层所解码出的图像即可概略表现出原始图像,其图像画质会随解码出的扫描层个数的增加而提高。

图1所绘示的是传统渐进式JPEG解码装置,解码装置100中包括可变长度解码(Variable Length Decoding,VLD)装置110、内存装置120、反量化(Inverse Quantizer)装置130和反离散余弦变换(InverseDCT)装置140。以渐进式DCT为基础的解码过程中即需经过上述装置处理,其解码流程概述如下:

首先,已编码的JPEG数据会先经过可变长度解码装置110处理。由于每个扫描层在此可变长度解码装置110处理时需要参考先前扫描层的信息,故其处理结果需有一个与图像大小相同的内存装置120存储,以作为下个扫描层在可变长度解码装置110处理时参考的依据。每当内存装置120收集完一个扫描层的所有系数之后,则会依序送入反量化装置130和反离散余弦变换装置140,以进行反量化和反离散余弦变换处理,而得到解码图素并重建渐进式图像。此法虽可以保持有渐进式图像呈现的特性,但可解码的图像大小将受限于内存空间限制,故如何改善内存空间的使用将会是一个新挑战。

台湾专利第92124394号中揭露了一种渐进式JPEG解码方法,其针对每个扫描层产生一部分解码像素及一个非零历史表格,并依照预设顺序累加由每一层扫描层所产生的部分解码像素,以及更新由每一扫描层所产生的非零历史记录。虽然参考非零历史记录的方式可以省内存的空间。然而,非零历史记录仅能用以作为霍夫曼解码阶段时的参考,而在累加每层扫描层的解码系数之前,仍必须参考先前相同地址的解码结果的正负值,而将解码系数做正负二的次方调整,才能够取得正确的解码系数。

举例来说,对于一个-9的值来说,若用二进制以8位表示,也就是11110111,但是在霍夫曼编码时,则是取其绝对值进行编码,若第一次编码的位为7到3位(总共包括0~7位),而之后都为一个位的话,应为取|-9|=(00001001)。其中,第一次编码为前5个位(00001)和0(0为负1为正)、第二次为0、第三次为0,以及第四次为1。因此,当解码器接收到第一个数据时,由0知道是负值,应该将(00001)作二的正负次方调整,故在将(00001)取补码后得到(11110),再取二的次方后则得到(11110000)。接着,第二、三次的解码结果均为0,也就是代表没有值,而第四次为1,1代表有值,而根据正负号表格中记录的负值,因此可解出-1的二进制值为(11111111)。然而,由于第四次解码的扫描层所对应的位是编号0的位,所以必须将上述的解码值(11111111)向左平移零个位以得到(111111111)。此即代表数值-1,而在将所有解码的数值相加后,即可得到最后的解码系数-9,即(11111000)+0+0+(111111111)=(11110111),至此才算完成解码的动作。然而,在上述台湾专利第92124394号中并未揭露此累加值需要做正负二的次方调整的部分,因此采用其方法将可能导致解码的错误,而无法呈现正确的图像。

发明内容

有鉴于此,本发明的目的就是提供一种渐进式JPEG图像解码方法,采用以非零历史表格及正负号表格取代前个扫描层的解码结果,而降低内存的使用。

为达上述或其它目的,本发明提出一种渐进式JPEG图像解码方法,适于将位流数据解码为图像数据,该位流数据中包括有多个扫描层的数据,此解码方法包括下列步骤:a.依序接收位流数据的一层扫描层的数据;b.根据一个非零历史表格,将此扫描层的数据解码为多个解码系数;c.根据正负号表格,将解码系数做正负二的次方调整;d.根据解码产生的解码系数,更新非零历史表格及正负号表格;e.输出解码系数。

在本发明的一实施例所述的渐进式JPEG图像解码方法中,步骤b.包括根据非零历史表格,将扫描层的数据进行游程长度(Run Length)解码,获得各个解码系数的系数值,而步骤c.则包括根据正负号表格,将各个解码系数的系数值加上正负号,并参考目前解码的扫描层对应于图像数据所记录的位在二元序列的位置,将各个解码系数的系数值乘上二的次方。

在本发明的一实施例所述的渐进式JPEG图像解码方法中,步骤e.包括将解码系数经过反量化变换、反离散余弦变换处理,以及转换器转换后输出。此外,输出的解码系数则包括累加至先前输出的解码系数。

在本发明的一实施例所述的渐进式JPEG图像解码方法中,在步骤e.之后更包括判断最后解码的扫描层是否为最后的扫描层,若不是最后的扫描层,则返回步骤a.,继续解码下一层扫描层的数据;反之,若为最后的扫描层,则停止解码动作。

在本发明的一实施例所述的渐进式JPEG图像解码方法中,当位流数据的所有扫描层的数据皆解码完毕时,最后累加的解码系数即为完整的图像数据。

本发明提出一种渐进式JPEG图像解码方法,适于将位流数据解码为图像数据,此位流数据包括多个扫描层的数据,此方法包括下列步骤:a.分割扫描层为多个解码区域;b.依序在这些解码区域中选择一个作为一部解码区域;c.依序接收位流数据中一层扫描层的数据,并根据非零历史表格与正负号表格,解码此扫描层的局部解码区域内的数据,而输出多个区域解码系数,以及更新非零历史表格与正负号表格;d.依序接收位流数据中此扫描层的下一层扫描层的数据,并重复步骤c.,继续解码下一层扫描层的局部解码区域内的数据,而输出区域解码系数,以及更新非零历史表格与正负号表格,直到所有扫描层的局部解码区域内的数据皆解码完毕为止。

在本发明的一实施例所述的渐进式JPEG图像解码方法中,步骤c.包括将区域解码系数经过反量化变换、反离散余弦变换处理,以及转换器转换后输出。此外,这些输出的区域解码系数则累加至先前输出的区域解码系数。

在本发明的一实施例所述的渐进式JPEG图像解码方法中,步骤c.包括根据非零历史表格,将扫描层的数据进行游程长度解码,获得各个解码系数的系数值,再根据正负号表格,将各个解码系数的系数值做正负二的次方调整。

在本发明的一实施例所述的渐进式JPEG图像解码方法中,步骤a.中分割的解码区域的大小依据内存大小而决定,且对每一层扫描层采用相同的分割方式。

在本发明的一实施例所述的渐进式JPEG图像解码方法中,步骤c.更包括记录扫描层的局部解码区域的最后解码地址,作为下一个扫描层的局部解码区域的起始位置。

在本发明的一实施例所述的渐进式JPEG图像解码方法中,步骤c.中接收扫描层的数据之前,更包括在解码扫描层的下一个解码区域的数据时,先加载前一层扫描层的最后解码地址,然后从此最后解码地址开始解码下一个局部解码区域的数据,最后则重复上述步骤,解码各个扫描层的局部解码区域内的数据,并输出成为部分的图像数据。

在本发明的一实施例所述的渐进式JPEG图像解码方法中,步骤d.之后更包括判断是否所有解码区域内的数据皆解码完毕;若仍有解码区域的数据未解码,则重复步骤b.~d.,继续选择第一层扫描层的下一个局部解码区域,并解码下一个局部解码区域的数据,直到所有解码区域内的数据皆解码完毕为止。

在本发明的一实施例所述的渐进式JPEG图像解码方法中,当位流数据中所有扫描层的所有解码区域的数据皆解码完毕时,则形成完整的图像数据。

本发明因采用以非零历史表格及正负号表格取代前个扫描层的解码结果,而无需在内存中保留前个扫描层中各个解码系数的系数值,因此在内存资源有限的情况下,仍可正确地解码及显示JPEG图像。

为了让本发明的上述和其它目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合附图,作详细说明如下。

附图说明

图1所绘示的是传统渐进式JPEG解码装置。

图2是依照本发明第一实施例所绘示的渐进式JPEG图像解码方法的流程图。

图3是依照本发明第一实施例所绘示的二元序列的范例。

图4是依照本发明第三实施例所绘示的渐进式JPEG图像解码方法的流程图。

附图标记说明

100:解码装置

110:可变长度解码装置

120:内存装置

130:反量化装置

140:反离散余弦变换装置

S201~S207:本发明第一实施例的渐进式JPEG图像解码方法的各步骤

300:二元序列

S401~S407:本发明第三实施例的渐进式JPEG图像解码方法的各步骤

具体实施方式

在渐进式解码方法中,每次解码一个扫描层数据时,必需参考前一层扫描层的数据,也就是说,在解码的过程中,必需随时在内存中保留一块对应于图像大小的空间来记录前一层扫描层的数据,才能顺利解码接续在后的扫描层的数据,此种方式将会占用不少的内存空间。本发明即是针对改善此缺点所发展出来的一种渐进式JPEG图像解码方法,通过记录一个非零历史表格及正负号表格,取代前一层扫描层的解码结果,而能够大幅节省所需使用的内存空间。为了使本发明的内容更为明了,以下特举实施例作为本发明确实能够据以实施的范例。

第一实施例

图2是依照本发明第一实施例所绘示的渐进式JPEG图像解码方法的流程图。请参照图2,本实施例适于将一笔位流数据解码为图像数据,其中此位流数据包括有多个扫描层的数据,以下介绍本实施例的解码方法的详细步骤:

首先,依序接收此位流数据的一层扫描层的数据,(步骤S201)。其中,各个扫描层之间具有一定的顺序,而在本实施例中,一开始接收的扫描层数据为位流数据中排序最前的扫描层数据。

接着,在步骤S202中,本实施例即根据一个非零历史表格,对所接收的扫描层数据进行解码,而获得此扫描层中各个像素的解码系数。其中,此步骤可通过将扫描层的数据进行游程长度解码,获得各个解码系数的系数值。然后,在步骤S203中,可再根据一个正负号表格将这些解码系数做正负二的次方调整。

详细地说,由于在渐进式的解码方式中,利用可变长度解码装置解码扫描层的数据时,必须参照先前扫描层的解码结果(即解码系数是否为非零),因此本实施例在解码扫描层的数据时,必须参考非零历史表格进行解码,而在产生解码系数的同时,也必需想办法将这些解码系数的非零历史记录下来,以供后续解码其它扫描层时的参考。

渐进式的解码方式的另一个特性是在输出每层扫描层的解码系数之前,必须参考之前相同地址的解码结果的正负值,而将解码系数做正负的调整。因此,本发明除了记录上述扫描层中各个像素是否为零的一个非零历史表格外,还需记录一个正负号表格,以将解码系数做正负的调整。

再者,分析传统的渐进式的解码方式可发现,完整的图像数据是分别记录在各个不同的扫描层中,而在每解码完一层扫描层的数据后,即可得到更多的图像信息,当然也可获得更清晰的解码图像。更精确地来说,假设一个像素的像素值是由多个位记录而成,而在每一层扫描层中,仅仅记录其中一个或部分位的数据,因此每当解码完一层扫描层的数据时,也只能得到此像素值的一个或少数位的图像信息,而获得不完全但可大致描绘出图像轮廓的模糊图像,必须等待所有的扫描层一一解码完成时,即可通过将各个扫描层解码所得的位拼凑而成完整的位信息,进而描绘出清晰的图像。此作法的优点在于能够让使用者提前预见图像的大概内容,而不必长时间地等待完整的图像解码完毕。

根据上述可知,由于各个扫描层包含的位信息固定,因此本发明除了利用正负号表格,将各个解码系数的系数值加上正负号之外,还可以参考目前解码的扫描层对应于图像数据所记录的位在二元序列中的位置,将各个解码系数的系数值乘上二的次方,而推测此位所对应的像素值。

举例来说,假设完整的像素值是由8个位组合而成(即可记录大小为0~255的像素值),若目前解码的扫描层所记录的位信息是其中编号3的位,而此位有值且为正(如图3所示)时,则可推论其所代表的像素值为23=8。

在完成前一层扫描层的解码系数的计算后,在步骤S204中,则可依照这些解码系数所对应的位信息及正负号信息再次计算其所对应的非零历史表格及正负号表格,并以这些表格更新先前所记录、对应于前一个扫描层的解码系数的非零历史表格及正负号表格,进而作为解码下一层扫描层之用。

此外,在步骤S205中,上述解码产生的解码系数随即输出至外部的帧缓冲器(Frame Buffer),而显示在计算机屏幕上。其中,依照渐进式JEPG解码的标准,这些解码系数在输出前还包括经过反量化变换及反离散余弦变换处理,另外也可根据使用者的需求,经由转换器转换其大小后再输出,而让使用者看到适当大小的图像。

最后在步骤S206中,则是判断目前解码的扫描层是否是位流数据中最后一层的扫描层,若不是最后一层,则代表仍有扫描层的数据未解码,此时即可回到步骤S201,继续解码下一层扫描层的数据;相对地,若判断目前解码的扫描层是最后一层扫描层,则代表所有扫描层的数据皆解码完毕,因此在累加解码系数后,即可获得完整的图像数据(步骤S207)。

值得注意的是,上述计算所得的下一层扫描层的解码系数则可同样经由反量化变换及反离散余弦变换等处理后输出,并累加至先前输出的解码系数,而由于累加后的解码系数包含更多位的图像数据,因此显示出来的图像也必定更为清晰。

综上所述,本实施例利用各个扫描层中仅记录图像中固定位信息的特性,将原本需整笔记录的前一层扫描层的解码系数转换成仅需以两个位记录的非零历史表格与正负号表格,因此可大幅减少记录解码系数所需的内存,而不致受到内存空间大小的限制。而为了更清楚地说明上述实施例中记录非零历史表格与正负号表格的详细流程,以下再举另一个实施例来说明。

第二实施例

本实施例以解码实际的解码系数为例,详细说明此解码系数的编、解码过程。以解码系数-9为例,-9的二进制表示为11110111,而如同先前技术的介绍,在将系数进行霍夫曼编码时,是取其绝对值进行编码,而-9的绝对值可表示为|-9|=00001001,其中,假设本实施总共分做4层扫描层进行编码,而第一次编码为前5个位(00001),即为-1,而编码的方式是采用游程长度编码。

游程长度编码的格式为Table(RRRRSSSS)AA(K),其中K为数个零值后第一个非零值,RRRR是指在K值之前有几个零值,SSSS是指这个K值有几个位,而AA(K)为能够表示K的适当位。此外,RRRRSSSS为将RRRR值放到一个二元序列编号7~4的位,将SSSS值放到此二元序列编号3~0的位,而构成一个8位的二元序列。实际在进行编码时,若编码的系数值为负数,则取此系数的补码进行编码,而在取得RRRRSSSS值之后,即可经由查表取得一个最少位的码字(codeword),即Table(RRRRSSSS)。其中,此表是依照RRRRSSSS出现的机率而产生的一个对照表。接着,第二、三、四次所要进行的编码依序为0、0、1,这些值均附加到下一个出现的非零值。

回到之前编码-1的步骤,由上述内容可推得其对应的RRRR值为0,SSSS值为1,且AA(K)=0。此时假设查表所得的码字为Table(RRRRSSSS)=1011,则再加上AA(K)=0,合并后可得到压缩后的编码10110。

相对地,在进行霍夫曼解码时,则可相对采用游程长度解码方法,解出-1的二进制值(即11111111)。此时由于目前解码的扫描层所对应的位是编号7~3的位,因此需要将上述的解码值(11111111)向左平移三个位,而得到(11111000),此即代表数值-8,此时即可在正负号表格中将此解码系数记录为负。

接着,第二、三次的解码结果均为0,此即代表没有值。而第四次的解码结果则为1,1代表有值,而根据正负号表格中记录的负值,因此可解出-1的二进制值(即11111111)。然而,由于第四次解码的扫描层所对应的位是编号0的位,所以在将上述的解码值(11111111)向左平移零个位后,即可得到(111111111)。此即代表数值-1,而在将所有解码的数值相加后,即可得到最后的解码系数-9,即(11111000)+0+0+(111111111)=(11110111)。简言之,本实施例就是将-9分成-8、0、0、-1来传送。

经由上述可知,在本发明的渐进式JPEG图像解码方法中,除了必须参考前一层扫描层的非零历史表格外,还需要根据正负号表格决定解码系数的正负号,才能产生正确的解码系数。相较于先前技术并未提及解码系数需要做正负二的次方调整的部分,因此可证明采用其方法将可能导致解码的错误,而无法呈现正确的图像,而本发明已可解决这样的缺陷。

另一方面,本发明还包括根据系统的内存容量大小,将扫描层分割成多个解码区域,并分别进行解码,搭配上述记录的非零历史表格及正负号表格,可有效地将解码所需使用的内存降至最低,以下则再举一实施例详细说明。

第三实施例

图4是依照本发明第三实施例所绘示的渐进式JPEG图像解码方法的流程图。请参照图4,本实施例适于将一笔位流数据解码为图像数据,其中此位流数据包括有多个扫描层的数据,以下介绍本实施例的解码方法的详细步骤:

首先,将扫描层分割为多个解码区域(步骤S401)。其中,分割的解码区域的大小是依据内存的容量大小而决定的,即先依据内存大小决定解码过程中可处理的图像方块的数量,再依此数量将扫描层分割成多个解码区域。

接着则是在这些分割的解码区域中依序选择一个解码区域作为局部解码区域(步骤S402)。其中,由于各个扫描层之间具有一定的顺序,因此在本实施例中,一开始接收的扫描层数据为位流数据中排序最前的扫描层数据。

下一步则依序接收此位流数据的一层扫描层的数据,并根据一个非零历史表格与一个正负号表格,解码此扫描层的局部解码区域内的数据,产生多个区域解码系数(步骤S403)。此步骤包括先根据非零历史表格,将扫描层的数据进行游程长度解码,获得各个解码系数的系数值,再根据正负号表格,将各个解码系数的系数值做正负二的次方调整,其中详细的解码方式与第一实施例中所述相同或相似,故在此不再赘述。

而在产生区域解码系数的同时,也根据这些区域解码系数的大小,更新非零历史表格与正负号表格(步骤S404)。其中,由于在渐进式的解码方式中,解码其中一个扫描层的数据时,必须参照先前扫描层的解码结果,因此本实施例在产生区域解码系数的同时,也会将这些区域解码系数改以一个非零历史表格与一个正负号表格取代,以供后续解码其它扫描层时的参考。

值得一提的是,本实施例在一开始接收扫描层数据时,还包括先去寻找该扫描层的起始地址,然后才从此起始地址开始进行解码。此外,在每解码完一层扫描层的一个局部解码区域数据后,本实施例也包括将此局部解码区域中最后被解码的地址记录下来,以作为解码下一个局部解码区域的起始位置。相对地,在每次解码一层扫描层的一个局部解码区域之前,也会先加载之前记录的最后解码地址,而能够接续前一个局部解码区域的后面,继续进行解码动作。由上述可知,本实施例的作法只需在每次解码完一个局部解码区域时,记录一个最后解码地址,而不需要预先存储所有局部解码区域的起始位置,因此可以减少内存空间的使用。

下一步则是将这些解码产生的区域解码系数经过反量化及反离散余弦变换处理后,输出作为部分的图像数据(步骤S405)。其中,上述的区域解码系数还包括经过转换器转换后输出,而不限制其范围。

在每解码完一个扫描层中一个解码区域的数据,并输出区域解码系数后,则会判断是否还有其它扫描层的数据未解码(步骤S406),若仍有扫描层的数据未解码,则返回步骤S403,依照扫描层的顺序,继续接收下一层扫描层数据中同一个局部解码区域的数据,并参考先前存储的非零历史表格与正负号表格进行解码,产生新的区域解码系数,直到所有局部解码区域内的数据皆解码完毕为止。上述产生的新的区域解码系数,则会输出并累加至先前输出的区域解码系数,累加后的区域解码系数由于包含更多层扫描层的信息,因此最后显示的部分图像也将变得更为清晰。

最后,每当有一个解码区域的数据解码完毕时,还包括判断是否还有其它解码区域内的数据尚未解码(步骤S407),若仍有其它的解码区域的数据未解码,则返回步骤S402,继续选择下一个局部解码区域,并解码下一个局部解码区域的数据,直到所有解码区域内的数据皆解码完毕后,即可获得完整的图像数据(步骤S408)。

在本实施例中,依据内存大小决定解码过程中可存储的图像方块的非零历史表格和正负号表格的数量,并依此数量将扫描层分割为多个解码区域,在每一回合的解码中,会对所有扫描层中相同解码区域的数据进行解码,并在下一回合,继续挑选下一个解码区域进行解码。而解码产生的解码系数也先行输出,并改以非零历史表格与正负号表格的形式,提供给后续扫描层解码之用。因此,本发明能够节省更多的内存资源。

综上所述,在本发明的渐进式JPEG图像解码方法中,通过记录每一个可变长度解码结果的非零历史记录及正负号记录,而不用直接记录解码结果的系数值,因此可以节省内存空间的使用,而使得在有限的内存资源中,仍可正确地实现图像解码,而不会影响到图像的显示。

虽然本发明已以较佳实施例揭露如上,然其并非用以限定本发明,任何熟悉此技术者,在不脱离本发明的精神和范围内,当可作些许的更动与润饰,因此本发明的保护范围当视后附的权利要求所界定者为准。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号