从给定的图像开始,真正的压缩目标是最小化表示图像所需的比特数,同时存储质量可接受的信息。小波有助于有效地解决这个问题。万博 尤文图斯完整的压缩链除了小波处理本身外,还包括量化、编码和解码的迭代阶段。
本示例的目的是展示如何使用各种压缩方法分解、压缩和解压缩灰度图像或真彩色图像。为了说明这些功能,我们考虑一个面具的灰度图像和一个辣椒的真彩色图像。
首先,我们加载并显示面具灰度图像。
负载面具图像(X)轴广场colormap(粉色(255))标题(“原始图像:面具”)
压缩比(CR)和比特像素比(BPP)给出了实现压缩的度量。CR和BPP代表等价的信息。CR表示使用初始存储大小的CR %存储压缩图像,BPP是存储图像的一个像素所使用的比特数。对于灰度图像,初始BPP为8。对于真彩色图像,初始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”;% '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 ')})
对于第11个循环,我们看到结果可以被认为是令人满意的,得到的BPP比率约为0.35。通过使用最新的SPIHT (Set Partitioning in Hierarchical Trees)方法,可以进一步改进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)非常令人满意,同时保持了良好的视觉感知。
关于图像真实压缩的更多信息,包括一些理论和例子,请参阅以下参考:
米西提,M., Y.米西提,G.奥本海姆,J.-M.。Poggi(2007),“小波及其应用”,ISTE DSP系列。