主要内容

二维真压缩

从给定的图像开始,真正压缩的目标是最小化表示图像所需的比特数,同时存储可接受质量的信息。小波有助于有效地解决这个问题。金宝搏官方网站除了小波处理本身之外,完整的压缩链还包括量化、编码和解码的迭代阶段。

本示例的目的是展示如何使用各种压缩方法分解、压缩和解压缩灰度图像或真彩色图像。为了说明这些功能,我们考虑一个面具的灰度图像和一个辣椒的真彩色图像。

全局阈值压缩和霍夫曼编码

首先,我们加载和显示面具灰度图像。

负载面具图像(X)轴广场colormap(粉色(255))标题(“原始图片:面具”

图中包含一个轴对象。标题为Original Image: mask的axes对象包含一个Image类型的对象。

实现压缩的度量由压缩比(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)。

Uncompression

现在我们解压缩从文件中检索到的图像mask.wtc并与原始图像进行比较。

选择=“u”% 'u'代表未压缩Xc = wcompress(选项,“mask.wtc”);colormap(粉红色(255))

图中包含一个轴对象。标题为Original Image: mask的axes对象包含一个Image类型的对象。

次要情节(1、2、1);图像(X);轴广场;标题(原始图像的)次要情节(1、2、2);图像(Xc);轴广场;标题(“压缩”)包含({[压缩比:num2str (CR,“% 1.2 f % %”)),...“BPP:”num2str (BPP,' % 3.2 f ')})

图中包含2个轴对象。标题为Original Image的坐标轴对象1包含一个Image类型的对象。标题为Compressed Image的Axes对象2包含一个Image类型的对象。

结果是令人满意的,但更复杂的真实压缩方法,包括更严格的阈值和量化步骤,可以获得更好的折衷压缩比和视觉质量。

渐进压缩法

我们现在演示使用渐进式压缩方法,从使用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 ')})

图中包含2个轴对象。标题为Original Image的坐标轴对象1包含一个Image类型的对象。axis对象2带有标题压缩图像- 6步包含一个图像类型的对象。

在这里,只使用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 ')})

图中包含2个轴对象。轴对象1带有标题压缩图像- 9步包含一个图像类型的对象。axis对象2带有标题压缩图像- 12步包含一个图像类型的对象。

当使用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 ')})

图中包含2个轴对象。axis对象1带有标题压缩图像- 12步包含一个图像类型的对象。标题为压缩图像的坐标轴对象2 - 11步包含一个图像类型的对象。

对于第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个轴对象。标题为Original Image的坐标轴对象1包含一个Image类型的对象。axis对象2带有标题压缩图像- 12步包含一个图像类型的对象。

最终的压缩比(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 ')})

图中包含2个轴对象。标题为Original Image的坐标轴对象1包含一个Image类型的对象。axis对象2带有标题压缩图像- 12步包含一个图像类型的对象。

删除(“wpeppers.wtc”

压缩比(1.65%)和比特像素比(0.4)非常令人满意,同时保持良好的视觉感受。

更多关于图像的真实压缩

有关图像真实压缩的更多信息,包括一些理论和示例,请参阅以下参考资料:

米西提,M.米西提,G.奥本海姆,j -M。Poggi(2007),“小波及其应用”,ISTE DSP系列。