二维真实压缩
从给定的图像开始,真正的压缩的目标是最小化表示图像所需的比特数,同时存储可接受质量的信息。小波有助于这个问题的有效解决。金宝搏官方网站除了小波处理本身之外,整个压缩链还包括量化、编码和解码的迭代阶段。
这个例子的目的是展示如何使用各种压缩方法来分解、压缩和解压缩灰度或真彩色图像。为了说明这些功能,我们考虑一个面具的灰度图像和一个辣椒的真彩色图像。
通过全局阈值和霍夫曼编码压缩
首先,我们加载并显示面具灰度图像。
负载面具图像(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)。
Uncompression
现在,我们将从文件中获取的图像解压缩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(分层树中的集合分区),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. Oppenheim, j . M.。波吉(2007),“小波及其应用”,ISTE DSP系列。