一种静态图像压缩的编码方法技术

技术编号:3597981 阅读:232 留言:0更新日期:2012-04-11 18:40
本发明专利技术提供一种静态图像压缩的编码方法,其包括如下步骤:图像分块步骤:将图像的宏块分成上、下两个子宏块,并将上子宏块的下半部用0填充,下子宏块的上半部用0填充,整幅图像被分成上子宏块和下子宏块互相间隔的条带;编码步骤:以子宏块为单位进行编码,然后根据子宏块编码的结果重新组合成符合静态图像要的码流。由于本发明专利技术是以子宏块为单位进行编码,子宏块的大小为16×8,所以实际上只需要8条行缓冲区,降低了硬件成本,且易于软硬件的实现。

【技术实现步骤摘要】

本专利技术涉及一种静态图像压缩和编码方法。
技术介绍
目前绝大部分的静态图像采用的是JPEG(联合图像专家组,一种静态图像的压缩算法)压缩技术,JPEG压缩技术总的是采用离散余弦变换+量化+游程编码+霍夫曼编码(或算术编码)。对于静态图像来说图像的YUV(在NTSC颜色系统中,一个颜色可以由灰度Y,和两个色差U、V一起表示)数据格式有YUV444、YUV422、YUV420、YUV411。采用标准的JPEG压缩流程,对于YUV444、YUV422和YUV411需要8linebuffer(行缓冲器),而对于YUV420来说就要16linebuffer。采用这种压缩流程,在ASIC实现上,无形中增加了硬件成本。
技术实现思路
本专利技术所要解决的技术问题是提供,其支持所有的YUV格式的图片的JPEG压缩,将行缓冲器的数目从16条减少到8条。为了解决上述技术问题,本专利技术提供,其包括如下步骤图像分块步骤将图像的宏块分成上、下两个子宏块,并将上子宏块的下半部用0填充,下子宏块的上半部用0填充,整幅图像被分成上子宏块和下子宏块互相间隔的条带;编码步骤以子宏块为单位进行编码,然后根据子宏块编码的结果重新组合成符合静态图像要的码流。进一步地,本专利技术的编码步骤可以是分开编码的也可是隔行编码。所谓分开的就是对整个图像的sub-MCU进行编码,然后再对sub-MCU编码的结果进行重组;所述的编码方法为隔行编码方法,即先编一行的上子宏块,编码结果存放在临时压缩数据库中,然后再编一行的下子宏块,编码的结果存放在目标压缩数据缓存中,在对下子宏块进行编码的同时,抽取出相应的上子宏块的码流,重新组合成符合静态图像要求的码流。由于本专利技术是以子宏块(sub-MCU)为单位进行编码,子宏块的大小为16×8,所以实际上只需要8条linebuffer(行缓冲区),降低了硬件成本,且易于软硬件的实现。附图说明图1是基本的JPEG压缩流程图。图2是图1所示编码的流程图。图3是图像分块示意图。图4是图3所示的宏块、子宏块的示意图。图5是填充上、下子宏块的示意图。图6是本专利技术的隔行编码的示意图。图7是本专利技术的分开编码的示意图。具体实施例方式如果输入的图像格式是YUV444、YUV422、YUV411则采用基本的JPEG压缩流程(如图1所示)。图像被分成大小为16×8的MCU(宏块),从左到右对图像中的宏块进行编码,而每个MCU又分解成若干个8×8的Y(灰度)数据块,U、V(色差)数据块,按照YUV的顺序对8×8的数据块进行离散余弦变换、量化、对直流分量进行差分编码+霍夫曼编码,对交流分量进行ZigZag扫描(如图2所示)+游程编码+霍夫曼编码。如果输入的图像格式是YUV420则采用下面所描述的步骤进行1、图像分块步骤(如图3所示)YUV420图像的MCU(16×16,包含有4个Y数据块(blocks),1个U数据块(block)和1个V数据块(block))被分成上下两个sub-MCU(子宏块,16×8,2个Y blocks,1/2个U block和1/2个V block),(如图3、4所示),其中U/V block采用图5描述的方法将其填充成8×8大小的上、下子宏块,其中上子宏块的下半部(四行)用0填充,下子宏块的上半部(四行)用0填充。这样整幅图像被分成top sub-MCU(上子宏块)和bottomsub-MCU(下子宏块)互相间隔的条带。2、编码步骤首先以子宏块(sub-MCU)为单位进行编码,由于sub-MCU是大小是16×8,所以实际上只需要8条linebuffer。然后根据sub-MCU编码的结果重新组合成符合JPEG要求的码流。所述编码步骤可以采用分开编码也可以采用隔行编码。所述分开编码的就是对整个图像的sub-MCU进行编码,然后再对sub-MCU编码的结果进行重组。所谓隔行编码就是先编一行的top sub-MCU,然后再编一行的bottom sub-MCU,在对bottom sub-MCU编码的同时,抽取出相应的top sub-MCU的码流,重新组合成符合JPEG要求的码流。下面结合图6详细描述本专利技术的隔行编码的具体实施例方式所述的隔行编码具体为先编一行的上子宏块,编码结果存放在临时压缩数据库中,然后再编一行的下子宏块,在对下子宏块进行编码的同时,抽取出相应的上子宏块的码流,重新组合成符合静态图像要求的码流。上子宏块条带的编码方法与下子宏块条带的编码是不相同的。具体的描述如下。1、子宏块条带的编码从左到右顺序对每个tops sub-MCU进行编码。每个sub-MCU按照一定的顺序(YYUV)对2个Y blocks,1个U block(填充以后的)和1个V block(填充以后的)采用以下方法分别进行编码,编码的结果存放在临时压缩数据缓存中步骤a,离散余弦(DCT)变换;步骤b,对DCT系数进行量化,UV量化因子使用的是预期的1/4;实际U(V)量化后的DCT系数为qdct+qdct_top是实际需要求得的该MCU的UV数据块量化后的DCT系数,qdct_top是bottom sub_MCU中UV数据块量化后的DCT系数。步骤c,如果是第2个Y block的DC,则进行差分+霍夫曼编码,否则直接存储量化后的DC系数。对量化后的AC系数进行ZigZag(之字型)扫描,并且进行游程编码+熵编码。步骤d,对游程编码结果进行霍夫曼编码。(该步骤可选,其目标是进一步减少缓冲区大小)2、下子宏块条带的编码从左到右顺序对每个bottom sub-MCU进行编码。每个sub-MCU按照下面给出的方法进行编码。在该步骤中编码的结果存放在目标压缩数据缓存中。Y blocks编码步骤a,该步骤的目的是从临时压缩数据缓存中抽取bottom sub-MCU相应的topsub-MCU中的Y数据,将重新编码后的结果存储到目标数据压缩数据缓存中。做法如下步骤a-1,从缓冲区中获取这个bottom sub-MCU相应的top sub-MCU的第1个个Yblock的DC系数进行,对其进行差分编码和霍夫曼编码,然后对于AC部分进行霍夫曼编码(如果已经熵编码过则直接拷贝)步骤a-2,从缓冲区中获取这个bottom sub-MCU相应的top sub-MCU第2个Y block的编码结果,对其进行霍夫曼编码(如果已经熵编码过则直接拷贝)步骤b,对于该bottom sub-MCU中的两个Y blocks进行编码,编码后的结果存放到目标压缩数据缓存中。做法采用以下步骤进行步骤b-1,DCT变换;步骤b-2,DCT系数进行量化;步骤b-3,对量化后的DC系数进行差分+霍夫曼编码;步骤b-4,对量化后的AC系数进行ZigZag扫描+游程编码+霍夫曼编码U(V)block编码步骤a,DCT变换;步骤b,对DCT系数进行量化,UV量化因子使用的是预期的1/4,设得到的结果是qdct_bottom;步骤d,实际该bottom sub-MCU对应的MCU的量化后的DCT系数qdct=round((qdct_bottom)/4)步骤e,对量化后的DC系数进行差分+霍夫曼编码;步骤f,对量化后的AC系数进行ZigZag扫描+游程编码+霍夫曼编码。下面结合图7详细描述本专利技术的分开编码方法的本文档来自技高网...

【技术保护点】
一种静态图像压缩的编码方法,其特征在于,包括如下步骤:图像分块步骤:将图像的宏块分成上、下两个子宏块,并将上子宏块的下半部用0填充,下子宏块的上半部用0填充,整幅图像被分成上子宏块和下子宏块互相间隔的条带;编码步骤:以子宏块为单位进 行编码,然后根据子宏块编码的结果重新组合成符合静态图像要的码流。

【技术特征摘要】

【专利技术属性】
技术研发人员:林哲民林豪张本好林福辉
申请(专利权)人:展讯通信上海有限公司
类型:发明
国别省市:31[中国|上海]

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1