从给定的图像开始,真正的压缩目标是最小化表示图像所需的比特数,同时存储质量可接受的信息。小波有助于有效地解决这个问题。金宝搏官方网站完整的压缩链除了小波处理本身外,还包括量化、编码和解码的迭代阶段。
本示例的目的是展示如何使用各种压缩方法分解、压缩和解压缩灰度图像或真彩色图像。为了说明这些功能,我们考虑一个面具的灰度图像和一个辣椒的真彩色图像。
首先,我们加载并显示面具灰度图像。
负载面具图像(X)轴正方形Colormap(粉红色(255))标题(“原始图像:面具”)
通过压缩比(Cr)和每像素的比特(BPP)比给出达到压缩的量度。CR和BPP代表等效信息。CR表示使用初始存储大小的CR%存储压缩图像,而BPP是用于存储图像的一个像素的比特数。对于灰度图像,初始BPP为8.对于TrueColor图像,初始BPP为24,因为8位用于编码三种颜色中的每一个(RGB颜色空间)。
压缩方法的挑战是在低压缩比和良好的感知结果之间找到最佳折衷。
我们从级联全局系数阈值和霍夫曼编码的简单方法开始。我们使用默认小波Bior4.4以及默认级别,即可能的最大级别(参见WMAXLEV
函数)除以2。所需的BPP设置为0.5,压缩后的图像存储在名为mask.wtc..
冰毒=“gbl_mmc_h”;%方法名称选择=“c”;%'c'代表压缩[CR, BPP] = wcompress(选项,X,“mask.wtc”,甲基,BPP的,0.5)
CR = 6.7200
BPP = 0.5376
当压缩比为6.7%时,所实现的位像素比实际上约为0.53(接近理想的0.5)。
现在我们解压从文件中检索到的图像mask.wtc.并将其与原始图像进行比较。
选择=“u”;%'你'代表解压缩XC = Wcompress(选项,“mask.wtc”);colormap(粉红色(255))
次要情节(1、2、1);图像(X);轴正方形;标题(原始图像的)次要情节(1、2、2);图像(Xc);轴正方形;标题(“压缩”)包含({[的压缩比:num2str(cr,“% 1.2 f % %”),...['BPP:'num2str (BPP,' % 3.2 f ')]})
结果是令人满意的,但是可以使用更复杂的真正压缩方法获得压缩比和视觉质量之间的更好的折衷,这涉及更紧密的阈值和量化步骤。
我们现在说明使用渐进的压缩方法,从使用Haar小波的EZW算法开始。关键参数是循环次数;增加它会导致更好的恢复,但压缩比更差。
冰毒=“ezw”;%方法名称wname =“哈雾”;%小波名称nbloop = 6;%循环数量[CR, BPP] = wcompress (“c”, X,“mask.wtc”,甲基,“maxloop”nbloop,...'wname',“哈雾”);Xc = wcompress (“u”,“mask.wtc”);colormap(粉红色(255))次要情节(1、2、1);图像(X);轴正方形;标题(原始图像的)次要情节(1、2、2);图像(Xc);轴正方形;标题(“压缩图像- 6步”)包含({[的压缩比:num2str(cr,“% 1.2 f % %”),...['BPP:'num2str (BPP,' % 3.2 f ')]})
在这里,只使用6个步骤产生一个非常粗糙的解压缩图像。现在我们用9个步骤检查一个稍微好一点的结果,最后用12个步骤检查一个令人满意的结果。
[CR, BPP] = wcompress (“c”, X,“mask.wtc”,甲基,“maxloop”9'wname',“哈雾”);Xc = wcompress (“u”,“mask.wtc”);colormap(粉红色(255))次要情节(1、2、1);图像(Xc);轴正方形;标题(“压缩图像- 9步”)包含({[的压缩比:num2str(cr,“% 1.2 f % %”),...['BPP:'num2str (BPP,' % 3.2 f ')]})[Cr,bpp] = wcompress(“c”, X,“mask.wtc”,甲基,“maxloop”12'wname',“哈雾”);Xc = wcompress (“u”,“mask.wtc”);次要情节(1、2、2);图像(Xc);轴正方形;标题(“压缩图像- 12步”)包含({[的压缩比:num2str(cr,“% 1.2 f % %”),...['BPP:'num2str (BPP,' % 3.2 f ')]})
使用12个步骤时,最终的BPP比率约为0.92。
现在我们尝试用小波来改进结果Bior4.4而不是哈雾并查看12和11步的循环。
[CR, BPP] = wcompress (“c”, X,“mask.wtc”,“ezw”,“maxloop”12...'wname',“bior4.4”);Xc = wcompress (“u”,“mask.wtc”);colormap(粉红色(255))次要情节(1、2、1);图像(Xc);轴正方形;标题(“压缩图像- 12步”)包含({[的压缩比:num2str(cr,“% 1.2 f % %”),...['BPP:'num2str (BPP,' % 3.2 f ')]})[Cr,bpp] = wcompress(“c”, X,“mask.wtc”,“ezw”,“maxloop”11...'wname',“bior4.4”);Xc = wcompress (“u”,“mask.wtc”);次要情节(1、2、2);图像(Xc);轴正方形;标题(“压缩图像- 11步”)包含({[的压缩比:num2str(cr,“% 1.2 f % %”),...['BPP:'num2str (BPP,' % 3.2 f ')]})
对于第十一环,我们看到结果可以被认为是令人满意的,并且获得的BPP比率约为0.35。通过使用更新的方法,SPIHT(在层次树中设置分区),可以进一步提高BPP。
[CR, BPP] = wcompress (“c”, X,“mask.wtc”,'spiht',“maxloop”12...'wname',“bior4.4”);Xc = wcompress (“u”,“mask.wtc”);colormap(粉红色(255))次要情节(1、2、1);图像(X);轴正方形;标题(原始图像的)次要情节(1、2、2);图像(Xc);轴正方形;标题(“压缩图像- 12步”)包含({[的压缩比:num2str(cr,“% 1.2 f % %”),...['BPP:'num2str (BPP,' % 3.2 f ')]})
最终压缩比(2.8%)和每像素比率(0.23)非常令人满意。回想一下,CR表示压缩图像仅使用初始存储大小的2.8%存储。
最后,我们说明了如何压缩wpeppers.jpg真彩图像。通过对三个颜色分量应用相同的策略,真彩色图像可以使用与灰度图像相同的方案进行压缩。
使用的渐进压缩方法是SPIHT (Set Partitioning in Hierarchical Trees),编码循环的数量设置为12。
X = imread ('wpeppers.jpg');[CR, BPP] = wcompress (“c”, X,“wpeppers.wtc”,'spiht',“maxloop”,12);Xc = wcompress (“u”,“wpeppers.wtc”);colormap(粉红色(255))次要情节(1、2、1);图像(X);轴正方形;标题(原始图像的)次要情节(1、2、2);图像(Xc);轴正方形;标题(“压缩图像- 12步”)包含({[的压缩比:num2str(cr,“% 1.2 f % %”),...['BPP:'num2str (BPP,' % 3.2 f ')]})
删除(“wpeppers.wtc”)
压缩比(1.65%)和每像素比率(0.4)非常令人满意,同时保持良好的视觉感知。
关于图像真实压缩的更多信息,包括一些理论和例子,请参阅以下参考:
Misiti,M.,Y.Misiti,G. Oppenheim,J.-M。Poggi(2007),“小波及其应用”,ISTE DSP系列。