主要内容

二维真正压缩

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

此示例的目的是使用各种压缩方法展示如何分解,压缩和解析灰度或TrueColor图像。为了说明这些功能,我们考虑掩模的灰度图像和辣椒的TrueColor图像。

全局阈值和哈夫曼编码的压缩

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

加载面具图像(x)轴广场彩色地图(粉红色(255))标题('原始图片:面具'

通过压缩比(CR)和每像素位(BPP)比率给出实现压缩的度量。CR和BPP表示等效信息。CR表示使用初始存储大小的CR%存储压缩图像,而BPP表示用于存储图像一个像素的位数。对于灰度图像,初始BPP为8。对于真彩色图像,初始BPP为24,因为使用8位对三种颜色(RGB颜色空间)中的每种进行编码。

压缩方法的挑战是在低压缩比和良好感知结果之间找到最佳折衷方案。

我们从一个简单的方法开始级联全局系数阈值和哈夫曼编码。我们使用默认的小波生物4.4和默认级别,这是最大可能水平(见WMAXLEV.函数)除以2.所需的BPP设置为0.5,压缩图像存储在命名的文件中mask.wtc

meth ='gbl_mmc_h';%方法名称选项='C';%“c”代表压缩[cr,bpp] = wcompress(选项,x,'mask.wtc',冰毒,'BPP',0.5)
CR = 6.7200.
BPP = 0.5376.

实现的达到每像素比实际为约0.53(截止到0.5中的0.5个),压缩比为6.7%。

解压缩

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

选项='U';%“u”代表不压缩Xc=wcompress(选件,'mask.wtc');Colormap(粉红色(255))

子图(1,2,1);图像(x);轴广场; 头衔('原始图像​​')子图(1,2,2);图像(XC);轴广场; 头衔('压缩图像')xlabel({['压缩率: 'num2str(CR,'%1.2f %%'),......[“BPP:”num2str(BPP,'%3.2f')]})

结果令人满意,但使用更复杂的真实压缩方法可以在压缩比和视觉质量之间获得更好的折衷,这涉及更严格的阈值和量化步骤。

渐进法压缩

我们现在说明了使用哈尔小波的EZW算法开始使用渐进式压缩方法。关键参数是循环的数量;增加它导致更好的恢复,而是更糟糕的压缩比。

meth ='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步')xlabel({['压缩率: 'num2str(CR,'%1.2f %%'),......[“BPP:”num2str(BPP,'%3.2f')]})

这里,仅使用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步')xlabel({['压缩率: 'num2str(CR,'%1.2f %%'),......[“BPP:”num2str(BPP,'%3.2f')]})[CR,BPP]=wcompress('C',X,'mask.wtc',冰毒,'maxloop',12,“wname”'哈尔');XC = Wcompress('U''mask.wtc');子图(1,2,2);图像(XC);轴广场; 头衔('压缩图像 -  12步')xlabel({['压缩率: 'num2str(CR,'%1.2f %%'),......[“BPP:”num2str(BPP,'%3.2f')]})

使用12个步骤时,最终BPP比率约为0.92。

现在我们尝试通过使用小波来改进结果生物4.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步')xlabel({['压缩率: 'num2str(CR,'%1.2f %%'),......[“BPP:”num2str(BPP,'%3.2f')]})[CR,BPP]=wcompress('C',X,'mask.wtc''ezw''maxloop',11,......“wname”'bior4.4');XC = Wcompress('U''mask.wtc');子图(1,2,2);图像(XC);轴广场; 头衔('压缩图像 -  11步')xlabel({['压缩率: 'num2str(CR,'%1.2f %%'),......[“BPP:”num2str(BPP,'%3.2f')]})

对于第十一个回路,我们可以认为结果是令人满意的,得到的BPP比率约为0.35。通过使用更新的方法SPIHT(分层树中的集合划分),BPP可以得到进一步改进。

[cr,bpp] = wcompress('C',X,'mask.wtc'“斯皮特”'maxloop',12,......“wname”'bior4.4');XC = Wcompress('U''mask.wtc');Colormap(粉红色(255))子图(1,2,1);图像(x);轴广场; 头衔('原始图像​​')子图(1,2,2);图像(XC);轴广场; 头衔('压缩图像 -  12步')xlabel({['压缩率: 'num2str(CR,'%1.2f %%'),......[“BPP:”num2str(BPP,'%3.2f')]})

最终压缩比(2.8%)和每像素比率(0.23)非常令人满意。回想一下,CR表示压缩图像仅使用初始存储大小的2.8%存储。

处理真彩色图像

最后,我们说明了如何压缩wpeppers.jpg.TrueColor图像。通过对三种颜色组件中的每一个应用相同的策略,可以使用与灰度图像相同的方案来压缩TrueColor图像。

使用的渐进压缩方法是SPIHT(在分层树中设置分区),编码循环的数量设置为12。

x = imread(“wpeppers.jpg”); [CR,BPP]=wcompress('C',X,'wpeppers.wtc'“斯皮特”'maxloop',12); Xc=wcompress('U''wpeppers.wtc');Colormap(粉红色(255))子图(1,2,1);图像(x);轴广场; 头衔('原始图像​​')子图(1,2,2);图像(XC);轴广场; 头衔('压缩图像 -  12步')xlabel({['压缩率: 'num2str(CR,'%1.2f %%'),......[“BPP:”num2str(BPP,'%3.2f')]})

删除('wpeppers.wtc'

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

更多关于真正压缩图像

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

米西蒂,M.,Y。米西蒂,G。奥本海姆,J.-M。波吉(2007),“小波及其应用”,ISTE DSP系列。