专利名称:一种对图像进行快速压缩和解压缩的方法
技术领域:
本发明属于计算机图像处理和数据压缩领域,具体涉及一种对图像进行快速压缩和解压缩的方法。
背景技术:
JPEG(Joint Photographic Experts Group,联合图象专家组)是国际标准组织(International Standard Organization,简称ISO)下属一个讨论组制订的静态图像压缩格式国际标准。目前广泛地用于图像存储、数码相机等领域。JPEG中有若干基于离散余弦变换(Discrete CosineTransform,简称DCT)及逆离散余弦变换(Inverse Discrete CosineTransform,简称IDCT)的压缩和解压缩的方法。
基于离散余弦变换的压缩方法的具体步骤如下(1)预处理,本处理过程的输入为任意的图像数据。本处理过程的主要目的是预处理输入数据,使之符合后续处理过程的要求,或者是为了获得最好的压缩效果。其中包括把原始图像数据切分成8×8的块、把图像的像素值标准化、颜色空间转换等等。
(2)离散余弦变换,本过程的输入为8×8的图像数据块,每个像素的取值已经经过了标准化。离散余弦变换的计算公式如下F(u,v)=14C(u)C(v)ΣΣf(x,y)cosπ(2x+1)u16cosπ(2y+1)v16]]>其中u,v,x,y=0,1,2,...7。
(x,y)表示块内离散余弦变换前某个点的坐标,其中(0,0)是图像数据块左上角的像素的坐标;f(x,y)表示离散余弦变换前坐标(x,y)处像素的取值;(u,v)表示离散余弦变换后块内某个元素的坐标,其中(0,0)表示图像数据块左上角的像素坐标;F(u,v)表示离散余弦变换后坐标(u,v)处元素的取值。
当u,v=0,C(u),C(v)=1/sqrt(2),其中sqrt表示开平方运算。
(3)量化,本过程的输入为经过离散余弦变换后的数据块和一个指定的量化矩阵。量化矩阵内所有元素都是非0的正整数。假定量化矩阵为Q(x,y),那么量化处理的计算公式为F(x,y)=[F(x,y)/Q(x,y)+0.5]其中x,y=0,1,2,...7,[]表示取整运算。加0.5是为了四舍五入操作。
(4)一维直流分量(Direct Current,简称DC)预测。F(0,0)被称为直流分量,其它元素被称为交流分量(Alternating Current,简称AC),本过程主要指的是对直流分量的处理。假定上一个图像块的直流分量为P,也就是当前直流分量预测值,那么预测的计算公式为F(0,0)=F(0,0)-P;//预测后的直流分量取值最后用于下一个图像块的直流分量预测值变为P=P+F(0,0);//生成下一个图像块直流分量的预测值(5)直流分量熵编码(Entropy Coding),本过程的输入为步骤(4)中的输出矩阵中的直流分量。在图2中的左上角黑色元素表示直流分量。
(6)交流分量熵编码(Entropy Coding),本过程的输入为步骤(4)中的输出矩阵中的交流分量。其中对交流分量的处理是熵-游程(RunLength)编码,矩阵内各个元素的处理顺序是蛇行排列(zigzag),详见图2。在图2中除左上角黑色元素外的其它元素为交流分量。折线表示对交流分量进行编码时使用的蛇行排列。图3表示的是交流分量熵-游程编码的程序流程图。
基于逆离散余弦的解压缩方法描述如下,基本上是压缩方法的逆过程(1)直流分量熵解码。
(2)交流分量熵解码(3)一维直流分量反预测。计算公式如下P=F(0,0)=F(0,0)+P(4)反量化。计算公式如下F(x,y)=F(x,y)×Q(x,y)(5)逆离散余弦变换。计算公式如下f(x,y)=14ΣΣC(u)C(v)F(u,v)cosπ(2x+1)u16cosπ(2y+1)v16]]>(6)后处理,是预处理的逆过程。
基于离散余弦变换和逆离散余弦变换的JPEG压缩/解压缩处理流程详见图1。有关JPEG的所有细节请参见CCITT(The International Telegraphand Telephone Consultative Committee)发布的编号为CCITT Rec.T.81(1992E)的文件,名为《Information Technology-DigitalCompression and Coding of Continuous-Tone StillImages-Requirement and Guideline》。
目前,基于离散余弦变换的JPEG压缩算法能够取得很好的压缩倍率,而且图像还原后所产生的误差人的视觉几乎无法察觉,但是它的处理速度却不能令人满意。从离散余弦变换和逆离散余弦变换的计算公式可以看出,仅离散余弦变换或者逆离散余弦变换的计算量就相当大。尽管离散余弦变换和逆离散余弦变换都有快速算法,相对于直接实现公式而言大大降低了计算量,但是当处理高分辨率和大尺寸图像数据时,处理速度始终是应用JPEG的一个障碍。
发明内容
针对现有技术中存在的缺陷,本发明的目的是在不改变基于离散余弦变换和逆离散余弦变换的JPEG算法的效果的前提下提高基于离散余弦变换和逆离散余弦变换的JPEG压缩/解压缩处理速度,同时并不影响JPEG的压缩/解压缩结果,即不影响图像压缩和解压缩的质量。
为达到以上目的,本发明采用的技术方案是一种对图像进行快速压缩和解压缩的方法。其中,一种对图像进行快速压缩的方法包括以下步骤(1)对输入的图像进行预处理,包括把原始图像数据切分成图像数据块、把图像的像素值标准化及颜色空间转换;(2)判断给定的图像数据块是否满足加速压缩处理条件,如果满足那么执行步骤(3),否则执行步骤(4),所述的加速压缩处理条件指的是一个图像块中的所有像素取值是否相等;(3)对图像数据块进行简化离散余弦变换,结束后跳转到步骤(5);(4)对图像数据块进行离散余弦变换;(5)对变换后的图像数据块进行量化处理;(6)对图像数据块中的一维直流分量进行预测;(7)对图像数据块中的直流分量熵编码,即DC熵编码;(8)对图像数据块中的交流分量熵编码,即AC熵编码,压缩处理结束。
进一步来说,为了使上述快速压缩方法有更好的效果,可以把步骤(2)中对加速压缩处理条件的判断改为快速判断方法,即将多个图像数据合成一个较大“单位”的数据进行比较,而不是一次仅比较一个图像数据;更进一步,在满足加速压缩处理条件的情况下,离散余弦变换和量化处理可以合并成一个步骤即简化离散余弦-量化处理,直流分量熵编码和交流分量熵编码可以合并成一个步骤即简化熵编码,优选的加速压缩处理流程如下(1)对输入的图像进行预处理;(2)对给定的图像数据块判断是否满足加速压缩处理条件,如果满足那么执行步骤(8),否则执行步骤(3),所述的加速压缩处理条件指的是一个图像块中的所有像素的取值是否相等;(3)对图像数据块进行离散余弦变换;(4)对变换后的图像数据块进行量化处理;(5)对图像数据块中的一维直流分量进行预测;(6)对图像数据块中的直流分量熵编码;(7)对图像数据块中的交流分量熵编码,处理结束;(8)进行简化离散余弦变换-量化处理;(9)对图像数据块中的一维直流分量进行预测;(10)进行简化熵编码,处理结束。
一种对图像进行快速解压缩的方法包括以下步骤(1)输入经过压缩的图像数据块,对图像数据块中的直流分量熵解码,即DC熵解码;(2)对图像数据块中的交流分量熵解码,即AC熵解码;(3)对图像数据块中的一维直流分量进行反预测;(4)对量化的图像数据块进行反量化;(5)判断给定的图像数据块是否满足加速解压缩处理条件一,如果满足那么执行步骤(6),否则执行步骤(7),所述的加速解压缩处理条件一指的是给定的图像数据块中的交流分量是否全部为0;(6)进行简化逆离散余弦变换,结束后跳转到步骤(8);(7)进行逆离散余弦变换;(8)对图像数据进行后处理,输出经过解压缩后的原始图像数据。
进一步来说,为使上述快速解压缩方法具有更好的效果上述快速解压方法中的步骤5中对加速解压缩处理条件一的判断采用快速判断方法,即将多个数据合成一个较大“单位”的数据进行比较,而不是一次仅比较一个数据;再进一步,对图像进行解压缩时将加速处理的起点前移,在满足加速解压缩处理条件的情况下省略交流分量熵解码,简化反量化过程和逆离散余弦变换过程,优选的加速解压缩处理流程为(1)对图像数据块中的直流分量熵解码;(2)判断给定的图像数据块是否满足加速解压缩处理条件二,如果满足那么执行步骤(7),否则执行步骤(3),所述的加速解压缩处理条件二指的是第一个交流分量编码是否为块结束标志,即End Of Block,简称EOB;(3)对图像数据块中的交流分量熵解码;(4)对图像数据块中的一维直流分量进行反预测;(5)对量化的图像数据块进行反量化;(6)进行逆离散余弦变换,结束后跳转到步骤(9);(7)对图像数据块中的一维直流分量进行反预测;(8)进行简化逆离散余弦变换-反量化处理;(9)对图像数据进行后处理,输出经过解压缩后的原始图像数据。
本发明的效果在于采用本发明所述的方法,在绝大多数情况下,加快了基于离散余弦变换和逆离散余弦变换的JPEG压缩/解压缩处理速度,同时完全不影响基于离散余弦变换的JPEG压缩/解压缩效果;即使在最不利的情况下,也几乎不会增加基于离散余弦变换和逆离散余弦变换的JPEG压缩/解压缩的处理时间。
图1是基于离散余弦变换和逆离散余弦变换的经典JPEG压缩/解压缩处理流程图;图2是交流分量的蛇行排列图;图3是交流分量的熵-游程编码处理流程图;图4是加速的JPEG压缩和解压缩方法处理流程图;图5是优选的加速JPEG压缩和解压缩方法处理流程图。
具体实施例方式
下面结合附图和实施例对本发明作进一步的描述如图4、图5所示,对于基于离散余弦变换的JPEG压缩过程,基本加速压缩处理流程如下(1)对输入的图像进行预处理,包括把原始图像数据切分成图像数据块、把图像的像素值标准化及颜色空间转换。同背景技术的预处理步骤;(2)对给定的图像块判断是否满足加速压缩处理条件。如果满足那么执行步骤(3),否则执行步骤(4)本过程的输入为8×8的图像数据块,每个像素的取值已经经过了标准化。所述的加速压缩处理条件指的是一个图像块中的所有像素的取值是否相等。JPEG可以处理的像素深度有8位和12位两种,下面是分别针对两种像素深度的伪代码表示。对于像素深度为8位的情况for(int n=1;n<64;n++)if(f
!=f[n])return false;return true;上述操作最不利情况下需要进行63次比较操作。
对于像素深度为12位的情况int tmp=read_bit(f,12);//从数据流中读取12位for(int n=1;n<64;n++)if(read(f,12)!=tmp)return false;return true;其中变量f表示一个数据流。上述操作最不利情况下需要进行64次位流操作和63次比较操作。返回值true表示满足加速压缩处理条件;返回值为false表示不满足加速压缩处理条件。
(3)简化离散余弦变换变换,结束后跳转到5;简化离散余弦变换变换计算公式如下,假定f(x,y)为离散余弦前的矩阵,F(x,y)为离散余弦变换后的矩阵,其中x,y=0,1,2,...7,那么对于x,y=0,F(x,y)=f(0,0)×8;对于x!=0或者y!=0,F(x,y)=0。
(4)离散余弦变换变换,同背景技术的同名步骤;(5)量化,同背景技术的同名步骤;
(6)一维直流分量预测,同背景技术的同名步骤;(7)直流分量熵编码,同背景技术的同名步骤;(8)交流分量熵编码,同背景技术的同名步骤。
上述处理流程请参见图4中的压缩部分。
为了使本发明拥有更好的效果,本实施例步骤(2)采用了如下方法将多个数据合成一个较大“单位”的数据进行比较,而不是一次仅比较一个数据。
针对本实施例中加速压缩处理中的步骤(2)(加速压缩处理条件)而言,快速判断的伪代码如下unsigned int*p=(unsigned int*)f;unsigned int temp=circle_1eft_shift(p
,8);//循环左移8位。当然循环右移8位效果也是相同的。
for(int n=0;n<64/sizeof(int);n++)if(temp!=p[n])retutn falsereturn true;可以证明,该算法和基本加速压缩处理流程中的步骤2中描述的算法是等价的。对于目前绝大部分的32位CPU,在最不利的情况下仅需要一次循环移位操作和16次比较操作。在最不利的情况下,它的算法代价只是步骤2中描述算法的1/4。对于拥有64、128位寄存器的CPU(例如Intel公司CPU上的MMX寄存器)而言,该算法的代价更是只有步骤2中描述算法的1/8或者1/16。
在满足快速压缩条件的情况下,可优化的步骤不仅仅是离散余弦变换,还有量化和熵编码步骤。优选的加速压缩处理流程如下(1)预处理,同背景技术的“预处理”部分;(2)判断给定的图像块是否满足加速压缩处理条件。如果满足那么执行步骤(8),否则执行步骤(3);所述的加速处理条件和加速压缩处理流程中步骤2中的条件相同。判断条件的方法可以是步骤2中的,也可以是前面提到快速判断方法。
(3)离散余弦变换,同背景技术的“离散余弦变换”部分;(4)量化处理,同背景技术的同名步骤;(5)一维直流分量预测,同背景技术的同名步骤;
(6)直流分量熵编码,同背景技术的同名步骤;(7)交流分量熵编码,同背景技术的同名步骤,处理结束;(8)简化离散余弦变换-量化处理;假定F表示处理前的矩阵,f表示变换后的矩阵,Q表示量化矩阵,那么F(0,0)=f(0,0)*(8/Q(0,0));由于8/Q(0,0)事实上是一个常数,因此本步骤实际上仅执行了一次乘法。
(9)一维直流分量预测,同背景技术的“一维直流分量预测”部分;(10)简化熵编码,处理结束;此时熵编码过程变成只需要进行两次编码,如下DC_Code(F(0,0));//对预测后的直流分量进行熵编码AC_Code(EOB);//游程编码结束符处理流程图详见图5中的压缩部分。注意在图5中有几条虚线,表示在加速压缩处理过程进行中,可以在适当的时机重新回到“背景技术”部分描述的处理过程。它们认为是本发明中描述的加速压缩处理过程的变种。
对于基于逆离散余弦变换的JPEG解压缩过程,基本加速解压缩处理流程如下(1)直流分量熵解码,同背景技术的同名步骤;(2)交流分量熵解码,同背景技术的同名步骤;(3)一维直流分量反预测,同背景技术的同名步骤;(4)反量化,同背景技术的同名步骤;(5)判断给定的图像块是否满足加速解压缩处理条件一。如果满足那么执行步骤(6),否则执行步骤(7);本过程的输入为包括直流分量和交流分量的长度为64的数据块。在这里,所谓的加速解压缩处理条件一指的是输入数据块中所有的交流分量是否为0,下面是加速解压缩处理条件的伪代码表示,假定输入的数据块为F,那么for(int n=1;n<64;n++)if(F
!=0)return false;//不满足加速解压缩处理条件return true;//满足加速处理条件上述操作最不利情况下需要进行63次比较操作。
(6)简化逆离散余弦变换,结束后跳转到步骤(8);简化逆离散余弦变换变换计算公式如下。假定F(x,y)为逆离散余弦变换前的矩阵,f(x,y)为逆离散余弦变换后的矩阵,其中x,y=0,1,2,...7,那么对于x,y=0,1,2,...7,f(x,y)=F(0,0)/8;(7)逆离散余弦变换,同背景技术的同名步骤;(8)后处理,同背景技术的同名步骤;处理流程图详见图4中的解压缩部分。
为了使本发明拥有更好的效果,本实施例步骤(5)采用了如下方法将多个数据合成一个较大“单位”的数据进行比较,而不是一次仅比较一个数据。
针对本实施例中加速压缩处理中的步骤(5)(加速解压缩处理条件一)而言,快速判断的伪代码如下<pre listing-type="program-listing"> unsigned int temp=F
;//把直流分量先保存起来 F
=0;//把直流分量清0 unsigned int* p=(unsigned int*)(&amp;F(0,0)); for(int n=0;n<64*sizeof(short)/sizeof(int);n++) if(p[n]!=0) { F
=temp; return false;//不满足加速解压缩处理条件 } F
=temp; return true;//满足加速解压缩处理条件</pre>可以证明,该算法和步骤5中描述的算法是等价的。对于目前绝大部分的32位CPU,在最不利的情况下,它的算法代价只是步骤5中描述算法的1/2。对于拥有64、128位寄存器的CPU(例如Intel公司CPU上的MMX寄存器)而言,该算法的代价更是只有步骤5中描述算法的1/4或者1/8。
虽然在基于逆离散余弦变换的解压缩过程中,逆离散余弦变换是最耗时的步骤,也是本发明重点优化的步骤,但是在满足加速解压缩处理条件二的情况下,其它步骤也可以得到加速。
优选的加速解压缩处理流程如下
(1)直流分量熵解码,同背景技术的“直流分量熵解码”部分;(2)对给定的图像块判断是否满足解压缩加速处理条件二。如果满足那么执行步骤(7),否则执行步骤(3);所述的加速解压缩处理条件二指的是第一个交流分量熵编码是否为块结束标志,示意代码如下R=DEC0DE();//解出第一个交流分量编码if(R==EOB)//判断是否为块结束标志return true;//满足条件return false;//不满足条件注意在满足快速解压缩处理条件二情况下,“交流分量熵解码”将被省略。
(3)交流分量熵解码,同背景技术的“交流分量熵解码”部分;(4)一维直流分量反预测,同背景技术的“一维直流分量反预测”部分;(5)反量化,同背景技术的“反量化”部分;(6)逆离散余弦变换,结束后跳转到步骤(9)。同背景技术同名步骤;(7)一维直流分量反预测,同背景技术同名步骤;(8)简化逆离散余弦变换-反量化处理;假定F表示处理前的矩阵,f表示变换后的矩阵,Q表示量化矩阵,那么f(x,y)=F(0,0)*(Q(0,0)/8),对于x,y=0,1,2,…7。
注意Q(0,0)是一个常数。
(9)后处理,同背景技术同名步骤。
具体流程图请参见图5中的解压缩部分。注意在图5中有几条虚线,表示在加速解压缩处理过程进行中,可以在适当的时机重新回到“背景技术”部分描述的处理过程。它们是本发明中描述的加速解压缩处理过程的变种。
权利要求
1.一种对图像进行快速压缩的方法,包括以下步骤(1)对输入的图像进行预处理,包括把原始图像数据切分成图像数据块、把图像的像素值标准化及颜色空间转换;(2)判断给定的图像数据块是否满足加速压缩处理条件,如果满足那么执行步骤(3),否则执行步骤(4),所述的加速压缩处理条件指的是一个图像块中的所有像素取值是否相等;(3)对图像数据块进行简化离散余弦变换,结束后跳转到步骤(5);(4)对图像数据块进行离散余弦变换;(5)对变换后的图像数据块进行量化处理;(6)对图像数据块中的一维直流分量进行预测;(7)对图像数据块中的直流分量熵编码,即DC熵编码;(8)对图像数据块中的交流分量熵编码,即AC熵编码,压缩处理结束。
2.如权利要求1所述的一种对图像进行快速压缩的方法,其特征在于步骤(2)中对加速压缩处理条件的判断采用快速判断方法,即将多个图像数据合成一个较大“单位”的数据进行比较,而不是一次仅比较一个图像数据。
3.如权利要求1或2所述的一种对图像进行快速压缩的方法,其特征在于在满足加速压缩处理条件的情况下,离散余弦变换和量化处理可以合并成一个步骤即简化的离散余弦变换-量化处理,直流分量熵编码和交流分量熵编码可以合并成一个步骤即简化熵编码,优选的加速压缩处理流程如下(1)对输入的图像进行预处理;(2)判断给定的图像数据块是否满足加速压缩处理条件,如果满足那么执行步骤(8),否则执行步骤(3),所述的加速压缩处理条件指的是一个图像块中的所有像素的取值是否相等;(3)对图像数据块进行离散余弦变换;(4)对变换后的图像数据块进行量化处理;(5)对图像数据块中的一维直流分量进行预测;(6)对图像数据块中的直流分量熵编码;(7)对图像数据块中的交流分量熵编码,处理结束;(8)进行简化离散余弦变换-量化处理;(9)对图像数据块中的一维直流分量进行预测;(10)进行简化熵编码,处理结束。
4.一种对图像进行快速解压缩的方法,包括以下步骤(1)输入经过压缩的图像数据块,对图像数据块中的直流分量熵解码,即DC熵解码;(2)对图像数据块中的交流分量熵解码,即AC熵解码;(3)对图像数据块中的一维直流分量进行反预测;(4)对图像数据块进行反量化;(5)判断给定的图像数据块是否满足加速解压缩处理条件一,如果满足那么执行步骤(6),否则执行步骤(7),所述的加速解压缩处理条件一指的是给定的图像数据块中的交流分量是否全部为0;(6)进行简化逆离散余弦变换,结束后跳转到步骤(8);(7)进行逆离散余弦变换;(8)对图像数据进行后处理,输出经过解压缩后的原始图像数据。
5.如权利要求4所述的一种对图像进行快速解压缩的方法,其特征在于步骤(5)中对加速解压缩处理条件一的判断采用快速判断方法,即将多个图像数据合成一个较大“单位”的数据进行比较,而不是一次仅比较一个图像数据。
6.如权利要求4所述的一种对图像进行快速解压缩的方法,其特征在于对图像进行解压缩时,将快速处理的起点前移,在满足加速解压缩处理条件二的情况下省略交流分量熵解码,简化反量化过程和逆离散余弦变换过程,优选的加速解压缩处理流程如下(1)对图像数据块中的直流分量熵解码;(2)判断给定的图像数据块是否满足加速解压缩处理条件二,如果满足那么执行步骤(7),否则执行步骤(3),所述的加速解压缩处理条件二指的是第一个交流分量编码是否为块结束标志,即End Of Block,简称EOB;(3)对图像数据块中的交流分量熵解码;(4)对图像数据块中的一维直流分量进行反预测;(5)对图像数据块进行反量化;(6)进行逆离散余弦变换,结束后跳转到步骤(9);(7)对图像数据块中的一维直流分量进行反预测;(8)进行简化逆离散余弦变换-反量化处理;(9)对图像数据进行后处理,输出经过解压缩后的原始图像数据。
全文摘要
本发明涉及一种对图像进行快速压缩和解压缩的方法,属于计算机图像处理和数据压缩领域。在现有技术中,JPEG(联合图象专家组,一种压缩标准)压缩/解压缩方法的速度不是非常令人满意。本发明所述的方法通过针对某些具有特殊特征的图像部分做简化处理来达到提高处理速度的目的。采用本发明所述的方法,可以在不影响现有JPEG压缩/解压缩结果的情况下提高JPEG压缩/解压缩处理速度。
文档编号G06T9/00GK1622137SQ200510000589
公开日2005年6月1日 申请日期2005年1月7日 优先权日2005年1月7日
发明者王剑 申请人:北京北大方正电子有限公司, 北京大学