发明内容
本发明的目的在于针对现有技术之弊端,提供一种基于转换压缩的最大误差图像压缩方法,以提高图像压缩比和重构质量,缩短图像的压缩时间。
本发明所述问题是通过以下述技术方案实现的:
一种基于转换压缩的最大误差图像压缩方法,所述方法首先进行第一级行转换压缩,并存储生成的近似值(均值)以及细节分量(转换系数);然后对新生成的近似值部分进行第一级列转换压缩,同时存储相应的近似值和细节分量;之后交替地对新生成的近似值进行下一级行、列的转换压缩,直到只剩下一个近似值为止,得到最终的压缩矩阵;最后利用近似值和细节分量进行数据重构。
上述基于转换压缩的最大误差图像压缩方法,所述压缩矩阵的生成步骤如下:
a.第一级行转换压缩
①对于由n×n个像素构成的原始矩阵:
根据给定的误差限Δ将每个像素数据扩展成数据区间的形式,原始矩阵的第i行数据[di1…dij…din]扩展后变为其中 其中i为行数,j为列数;
②判断每一行中相邻的两个数据区间与(j为奇数)是否具有交集,如果数据区间不存在交集,则按照下式计算细节分量b:
如果数据区间存在交集,则令细节分量b=0,
然后按照下式计算出近似值的区间
其中,max表示求最大值,min表示求最小值;
③将计算出的近似值区间存储于原始矩阵的处,将细节分量b存储于原始矩阵的处,其中m1代表原始矩阵中每一行的数据个数(此处m1=n),
对原始矩阵的每一行进行转换压缩并存储,得到第一级行转换压缩矩阵;
b.第一级列转换压缩
①判断第一级行转换压缩矩阵中近似值区间部分每一列相邻的两个近似值区间与(i为奇数)是否有交集,
如果数据区间不存在交集,则按照下式计算细节分量b:
如果数据区间存在交集,则令细节分量b=0,
然后按照下式计算出近似值区间
②将计算出的近似值区间存放于本级行转换压缩矩阵的处,将计算出的细节分量b存储于本级行转换压缩矩阵的的位置,m2代表本级行转换压缩矩阵中每一列近似值区间的个数(此处m2=n),
对第一级行转换压缩矩阵的近似值区间部分的每一列完成列转换压缩和存储,得到第一级列转换压缩矩阵;
c.交替地对新生成矩阵的近似值区间部分进行行、列转换压缩,并且在接下来的行转换压缩过程中,需要将细节分量b存储于前一级列转换压缩矩阵的处,其中m'1代表前一级列转换压缩矩阵中每一行近似值区间的个数,直到只剩下一个近似值区间为止,然后取剩余近似值区间内的任意一个值作为原始矩阵的最终近似值,生成的最终矩阵即为压缩矩阵。
上述基于转换压缩的最大误差图像压缩方法,所述数据重构的具体步骤如下:
对于压缩矩阵:
按照与其生成过程相反的顺序,从左上角开始交替进行列还原和行还原,直至对n×n个像素进行行还原后就实现了数据的重构,所述列还原和行还原的具体方法如下:
①每一级列还原的计算重构数据的通式如下:
式中,分别为本级列还原矩阵中存放位置为(i,j)、((i+1),j)的重构数据,i为奇数;为在前一级行还原矩阵中存放位置在的重构数据,当进行第一级列还原时,为压缩矩阵中存放位置为处的数据;为在前一级行还原矩阵中位置为的数据,当进行第一级列还原时,为在压缩矩阵中位置为的数据;m3为前一级行还原矩阵中需要还原的矩阵部分中每一列的数据个数,当进行第一级列还原时,m3为压缩矩阵中需要还原的矩阵部分每一列的数据个数;
②每一级行还原的计算重构数据的通式如下:
式中,分别为在本级行还原矩阵中存放位置为(i,j)、(i,(j+1))的重构数据,j为奇数;为在本级列还原矩阵中存放位置为处的重构数据;为在本级列还原矩阵中存放位置为处的数据;m4为本级列还原矩阵中需要还原的矩阵部分每一行的数据个数。
本发明采用基于最大误差准则的图像压缩方法,因此可以保证数据重构后每一点的误差都在给定范围内,便于后续查询。同对比文献中的基于转换压缩的图像压缩方法相比,所述方法不仅缩短了压缩时间,而且提高了图像的压缩比以及重构质量。
具体实施方式
本发明涉及的是一种基于转换压缩的最大误差图像压缩方法,所述算法能够缩短压缩时间、提高图像的压缩比以及重构质量。本发明是通过以下技术方案实现的。首先进行第一级行转换压缩,将生成的近似值(均值)以及细节分量(转换系数)进行相应的存储;然后对新生成的近似值部分进行第一级列转换压缩,同时存储相应的近似值和细节分量;交替的对新生成的近似值进行下一级行、列的转换压缩,直到只剩下一个近似值为止;最后可利用近似值和细节分量进行数据重构。
具体技术方案如下:
一、第一级行转换压缩
首先对由n×n的像素构成的原始矩阵进行第一级行转换压缩,生成第一级行转换压缩矩阵。所述原始矩阵(1)如下:
其中i为行数,j为列数。
以[di1…dij…din]的行转换压缩为例:
(1)将原始数据根据给定的误差限Δ扩展成数据区间的形式:
其中
(2)对相邻的两个数据区间如与(j为奇数)进行判断,判断其是否具有交集。
如果数据区间不存在交集,需要按照公式(2)计算出转换系数,也称作细节分量:
再按照公式(3)计算出近似值的区间,即对应的交集其交集计算公式:
其中,max表示求最大值,min表示求最小值。
如果数据区间存在交集,此时细节分量为0,即:
b=0 (4)
近似值区间为:
(3)将计算出的近似值区间存储于原始矩阵(1)的处。将计算出的细节分量存储于原始矩阵(1)的处,m1代表原始矩阵中每一行的数据个数。
按照步骤一的(1)、(2)、(3)步可对每一行进行行转换压缩并存储,生成的矩阵为第一级行转换压缩矩阵。
二、第一级列转换压缩
对第一级行转换压缩矩阵中的近似值区间部分进行第一级列转换压缩,生成第一级列转换压缩矩阵。
(1)判断第一级行转换压缩矩阵中近似值区间部分每一列相邻的两个近似值区间是否有交集。假设相邻的数据区间为与(i为奇数)。
如果数据区间不存在交集,需要按照公式(6)计算出细节分量:
再按照公式(7)计算出近似值区间,即对应的交集其交集计算公式:
如果数据区间存在交集,此时细节分量为0,即:
b=0(8)
近似值区间为:
(2)将计算出的近似值区间存放于本级行转换压缩矩阵的处。将计算出的细节分量存储于本级行转换压缩矩阵的的位置,m2代表本级行转换压缩矩阵中每一列近似值区间的个数。
按照步骤二的(1)、(2)步可对第一级行转换压缩矩阵的近似值区间部分的每一列完成列转换压缩和存储,生成的矩阵为第一级列转换压缩矩阵。
三、交替进行行、列转换压缩
进行完第一级列转换压缩之后,由于图像矩阵数据量很大,需要交替的对新生成矩阵的近似值区间部分进行行、列转换压缩,直到只剩下一个近似值区间为止。
(1)对生成的第一级列转换压缩矩阵中的近似值区间部分进行第二级行转换压缩,生成第二级行转换压缩矩阵。
首先判断第一级列转换压缩矩阵的近似值区间部分每一行中相邻的两个近似值区间是否有交集,然后分别计算出近似值区间和细节分量并存储,方法与步骤一的(2)、(3)步相同,不同的是此时需要将细节分量b存储于前一级列转换压缩矩阵的处,其中m'1代表前一级列转换压缩矩阵中每一行近似值区间的个数。
(2)对生成的第二级行转换压缩矩阵中的近似值区间部分进行第二级列转换压缩,生成第二级列转换压缩矩阵。方法与步骤二的(1)、(2)步相同,此时m2同样代表本级行转换压缩矩阵中每一列的近似值区间的个数。
(3)按照步骤三(1)、(2)步交替的对新生成的近似值区间进行行与列的转换压缩,直到只剩下一个近似值区间为止。
(4)此时可以取近似值区间内的任意一个值作为最终的近似值,生成的最终矩阵即为压缩矩阵。
在本发明中压缩比定义为原始数据个数与压缩矩阵中非零值个数之比。
数据压缩实例:
图1是该发明的数据转换压缩过程。图1(a)是原始数据,误差限Δ=2。
(1)首先对每一个原始数据进行数据扩展,此实例中给定误差限Δ=2,因此第一行的原始数据[12,4,7,9]进行扩展后变为[[12-2,12+2],[4-2,4+2],[7-2,7+2],[9-2,9+2]],即[[10,14],[2,6],[5,9],[7,11]]。第2-4行可以按照同样方法进行扩展,扩展的结果见图2(b)。
(2)其次进行第一级行转换压缩。以第一行数据区间[[10,14],[2,6],[5,9],[7,11]]为例:首先对第一对数据区间[10,14]、[2,6]进行压缩,由于两个数据区间没有交集,需根据公式(2)计算细节分量由于i=1,j=1,m1=4,因此该细节分量应存储于 处。再根据公式(3)计算得 可求得近似值区间 此近似区间应存储于 处。
接下来对[5,9],[7,11]进行转换压缩。由判断知两个数据区间存在交集,根据公式(5)计算出二者的交集为[7,9],由于此时i=1,j=3,m1=4,因此该近似区间应存储于处,而此时细节分量不需要计算,只需要用0代替即可,同时存储于处。
对2-4行都可以按照此方式进行计算和存储,得到第一级行转换压缩矩阵,见图1(c)。
(3)第三步是进行第一级列转换压缩。如图1(c)所示,此时矩阵的左半部分存储的是近似值区间,接下来需要对该近似值区间部分进行列转换压缩。以第一列为例:此时第一列中相邻的第一对数据区间为[6,10]、[1.5,5.5],首先判断二者没有交集,按照公式(6)计算细节分量由于i=1,j=1,m2=4,因此该细节分量应存储于处,由公式(7)得:
可求得近似值区间此近似区间应存储于处。
接下来对[3.5,7.5]、[4,8]进行压缩,由判断知两个区间存在交集,按照公式(9)计算得二者的交集为[4,7.5],此时i=3,j=1,m2=4,因此该近似区间应存储于处,此时细节分量不需要计算,只需要用0代替即可,同时存储于处。
对第二列只需要按照相同的办法就可以进行压缩,生成第一级列转换压缩矩阵,见图1(d)。
(4)对第一级列转换压缩矩阵的近似值区间部分进行第二级行转换压缩,生成第二级行转换压缩矩阵。
对图1(d)所示的近似值部分进行第二级行转换压缩:对[3.75,7.75]与[7,9]进行判断,二者存在交集[7,7.75],此时i=1,j=1,m1'=2,应将该近似值区间存储于处,细节分量值为0,存储于处。同理可求出第二行近似值区间[4,7.5]、[6,7.5]的压缩结果。最终结果见图1(e)所示。
(5)对第二级行转换压缩矩阵的近似值区间部分进行第二级列转换压缩,生成第二级列转换压缩矩阵。
对图1(e)所示结果进行第二级列转换压缩:对[7,7.75]与[6,7.5]进行判断,二者存在交集[7,7.5],此时i=1,j=1,m2=2,应将近似值区间存储于处,细节分量值为0,存储于处。最终结果见图1(f)所示。
(5)进行完第二级列转换压缩之后,只剩下一个近似值区间,因此不需要再进行下一级转换压缩,只需要计算出最终的近似值即可,在此例中,选取了近似值区间[7,7.5]的中间值7.25,最终压缩矩阵见图1(g)所示。
四、数据重构
压缩矩阵如下所示:
每一级列还原的计算重构数据的通式如下:
式中,分别为本级列还原矩阵中存放位置为(i,j)、((i+1),j)的重构数据,i为奇数;为在前一级行还原矩阵中存放位置在的重构数据,当进行第一级列还原时,为压缩矩阵(10)中存放位置为处的数据为在前一级行还原矩阵中位置为的数据,当进行第一级列还原时,为在压缩矩阵(10)中位置为的数据;m3为前一级行还原矩阵中需要还原的矩阵部分中每一列的数据个数,当进行第一级列还原时,m3为压缩矩阵(10)中需要还原的矩阵部分每一列的数据个数;
每一级行还原的计算重构数据的通式如下:
式中,分别为在本级行还原矩阵中存放位置为(i,j)、(i,(j+1))的重构数据,j为奇数;为在本级列还原矩阵中存放位置为处的重构数据;为在本级列还原矩阵中存放位置为处的数据;m4为本级列还原矩阵中需要还原的矩阵部分每一行的数据个数;
(1)第一级列还原:对压缩矩阵(10)的2×1矩阵 部分进行列还原,根据重构公式(11)与(12)可进行重构,此时公式(11)、(12)中的i为奇数,m3=2:
将分别存储在压缩矩阵(10)的(1,1)、(2,1)的位置,其余位置数据不变,构成第一级列还原矩阵。
(2)第一级行还原:对第一级列还原矩阵的2×2部分 进行行还原,根据重构公式(13)与(14)可进行重构,此时公式(13)、(14)中的j为奇数,m4=2:
将分别存储在第一级列还原矩阵的(1,1)、(1,2)、(2,1)、(2,2)的位置,其余位置数据不变,构成第一级行还原矩阵。
(3)再对第一级行还原矩阵中的4×2矩阵部分进行第二级列还原,还原方法同上述数据重构中的第(1)步。
如此交替重复,直至对n×n矩阵部分进行行还原后就实现了数据重构。
数据重构实例:
数据重构过程:
(1)首先对如图2(a)所示的压缩矩阵,进行第一级列还原。
如图2(a)所示,黑框内是需要进行还原的部分。此时i=1,j=1,m3=2,根据重构公式(11)、(12)得:
将分别存储在压缩矩阵的(1,1)、(2,1)的位置,其余位置数据不变,构成第一级列还原矩阵,如图2(b)所示。
(2)接下来对图2(b)黑框所示部分进行第一级行还原。此时i≤2,j=1,m4=2;根据重构公式(13)、(14)得:
将分别存储在第一级列还原矩阵的(1,1)、(1,2)、(2,1)、(2,2)的位置,其余位置数据不变,构成第一级行还原矩阵,如图2(c)所示。
(3)进行完第一级行还原之后,由于还没有完全还原所有数据,因此需要进行第二级列还原。如图2(c)所示,黑框内是需要进行还原的部分。此时i<4且i为奇数,j≤2,m3=4;
根据重构公式(11)、(12)得:
将分别存储于第一级行还原矩阵的(1,1)、(2,1)、(3,1)、(4,1)、(1,2)、(2,2)、(3,2)、(4,2)位置,其余位置数据不变,构成第二级列还原矩阵,如图2(d)所示。
(4)接下来需要对图2(d)黑框所示部分进行第二级行还原,最终可完成所有数据的重构。此时i≤4,j<4且j为奇数,m4=4。根据重构公式(13)、(14)得:
将上述所有重构数据存放于第二级列还原矩阵的相应位置,构成第二级行还原矩阵,也就是最终的还原矩阵,如图2(e)所示。
(5)以上步骤可完成数据的重构,重构后数据每一点的误差为: 可见每一点的误差都小于给定的误差限Δ=2。
实验对比结果:
对比文献采用《On multidimensional wavelet synopses for maximum errorbounds》,该文献在图像中应用转换压缩时,采用的是对2×2的不重叠矩阵进行转换压缩,而在转换压缩过程中,第一步同样是进行数据扩展,第二步进行数据区间交集的判断,判断的标准是四个数据区间是否存在交集,如果不存在交集需要存储1个近似区间和3个细节分量值,而本发明的转换算法在进行图像压缩时,只需要判断相邻2个数据区间是否有交集,如果不存在交集,需要存储1个近似值和1个细节值,如果存在交集只需要存储1个均值即可。这样处理的好处就是区分更细致,本发明的方法更细致更有效,因此可以提高图像的压缩比以及重构质量。
图3是原始测试图像,其图像分辨率分别为256×256、512×512、1024×1024。
(1)相同误差限下图像压缩比对比
图4是在相同误差限下图像压缩比的对比图,图中1代表本发明的压缩方法,2代表对比文献中的压缩方法。从图中可看到对于不同分辨率的图像,两种压缩方法的压缩比均随着误差限的增大而增大,并且在相同的误差限下本发明的算法所实现的压缩比均大于对比文献中压缩方法的压缩比。因此本发明的压缩方法可以提高图像的压缩比。
(2)相同压缩比下峰值信噪比对比
图5是两种压缩方法在相同压缩比下,图像峰值信噪比(PSNR)的对比图,图中3代表本发明的压缩方法,4代表对比文献中的压缩方法。为了得到相同的压缩比,在此处采用的是反复试验的方法,给一个任意的Δ值,比如值为Δ1。从实验结果看此时的图像压缩比CR1与预期的图像压缩比CR的关系:如果CR1=CR,说明此时Δ1正是所需要的误差限;如果CR1>CR,那么说明Δ1取值较大,应该减小Δ1;如果CR1<CR,那么说明Δ1取值较小,应该增大Δ1;通过多次反复试验,最终可得到适合的Δ值,使其满足预期的图像压缩比。
一般评价压缩图像与原始图像相似度的测量参数为PSNR。PSNR值越大,表明图像相似度越高,图像质量越好。从图5中可以看到在三种不同分辨率的图像下,随着压缩比的增大,两种压缩方法得到的图像PSNR都在降低,并且本发明的算法,在相同的压缩比下所实现的图像PSNR均大于对比文献中的压缩方法所实现的图像PSNR,因此利用本发明的算法可以提高图像的重构质量。
图6、图7分别是对比文献与本发明的压缩方法的重构图像,分别选取了在同一副图像达到相同压缩比情况下的重构图像的对比图。从图中可以看出在相同的压缩比下,本发明的图像重构质量的确高于对比文献中的压缩方法的图像重构质量,与图5所示结果一致。
(3)算法压缩时间对比
图8是在相同压缩比下不同图像的压缩时间对比图,图中5为对比文献中压缩方法的压缩时间,6为本发明的压缩方法的压缩时间。从图中可看出利用本发明的算法,可大大降低算法的压缩时间,最多能降低到对比文献中算法压缩时间的1/10,因此利用本发明的算法可以降低压缩时间。