小波变换图像压缩学习

小波变换图像压缩 MATLAB

传统视频图像压缩技术都是基于离散余弦变换(DCT)的压缩方法,例如国际的 H.264 、MPEG4、JPEG 等压缩标准都采用了该技术。DCT是利用对图像分块来进行图像变换的,无法消除块边间的相关性,因此,会出现一些影响我们视觉效果的方块效应,尤其是在低比特率的情下。
小波变换是全局变换,在时域和频域都由良好的局部优化性能。小波变换将图像的像素解相关的变换系数进行编码,比经典编码的效率更高,而且几乎没有失真,在应用中易于考虑人类的视觉特性,从而成为图像压缩编码的主要技术之一。小波变换在信号的高频部分可以取得较好的时间分辨率:在信号的低频部分,可以取得较好的频率分辨率,从而能有效地从信号(如语音、图像等)中提取信息,达到数据压缩的目的。下图为小波编解码系统的框图。
在这里插入图片描述
量化过程是一个有损的过程,采用不同的量化值对原数据进行分段近似表示,目的是减少每个码字的编码比特数。根据量化间隔是否等分,量化又可以细分为均匀量化和非均匀量化。所谓量化是一个降低精度,将每个变换后的像素用有限的信号来表示的过程。对于图像上所呈现的信息,人眼根据其视觉特性会具有不同的分辨率,也就是说可以在保证视频图像重构质量的同时,舍弃对人眼视觉效果影响不大的信息。精度的高低取决于量化步长的长短,若量化步长越长,则精度越低,压缩效果较之越好,反之效果越差,该过程要权衡压缩效率及视频重构质量等因素。
熵编码过程主要是通过编码算法将量化后的数据转换成二进制码流,以便更好地存储和传输。解码过程可以看做是编码的逆过程,将二进制码流还原成数据,并根据解成图像重构。
熵编码是一种基于统计模型的无失真编码压缩技术,通过统计信号出现的概率进行统计从而进行编码,主要用于消除信号间的统计冗余,主要的熵编码技术有游程编码、算术编码和霍夫曼编码,其中以霍夫曼编码最为经典,算术编码和霍夫曼编码在另一篇笔记中:
https://blog.csdn.net/weixin_45178274/article/details/129778280

游程编码
  • 参考链接: https://www.cnblogs.com/cc11001100/p/9465806.html
  • https://blog.csdn.net/ProgramNovice/article/details/128159362

游程编码(Run Length Coding,简称RLC)属于无损压缩编码,是栅格数据压缩的重要编码方法。对于二值图有效。该压缩编码技术相当直观和经济,运算也相当简单,因此解压缩速度很快。

行程编码(Run-length Coding)是相对简单的编码技术,主要思路是将一个相同值 的连续串用一个代表值和串长来代替。例如,有一个字符串“aaabccddddd”,经过行程 编码后可以用“3a1b2c5d”来表示。对图像编码来说,可以定义沿特定方向上具有相同灰度值的相邻像素为一轮,其延续长度称为延续的行程,简称为行程或游程。例如,若沿水平方向有一串M个像素具有相同的灰度N,则行程编码后,只传递2个值(N,M) 就可以代替M个像素的M个灰度值N。

在对图像数据进行编码时,沿一定方向排列的具有相同灰度值的像素可看成是连续符号,用字串代替这些连续符号,可大幅度减少数据量。行程编码是连续精确的编码,在传输过程中,如果其中一位符号发生错误,即可影响整个编码序列,使行程编码无法还原回原始数据。游程长度编码压缩数据是十分有效又简便的,但压缩比的大小是与图的复杂程度成反比的,在变化多的部分,游程数就多,变化少的部分游程数就少,图件越简单,压缩效率就越高。
所以,游程编码适合的场景是数据本身具有大量连续重复出现的内容。

小波变换压缩MatLab代码:
close all;                        % 清理工作空间
clear;                 
X=imread('bar.bmp');            
X=rgb2gray(X);
subplot(221); imshow(X);             
title('原始图像(小波变换)');     
disp('压缩前图像X的大小');
whos('X')
%对图像用小波进行层小波分解
[c,s]=wavedec2(X,2,'bior3.7');
%提取小波分解结构中的一层的低频系数和高频系数
cal=appcoef2(c,s,'bior3.7',1);
ch1=detcoef2('h',c,s,1);      %水平方向
cv1=detcoef2('v',c,s,1);      %垂直方向
cd1=detcoef2('d',c,s,1);      %斜线方向
%各频率成份重构
a1=wrcoef2('a',c,s,'bior3.7',1);
h1=wrcoef2('h',c,s,'bior3.7',1);
v1=wrcoef2('v',c,s,'bior3.7',1);
d1=wrcoef2('d',c,s,'bior3.7',1);
c1=[a1,h1;v1,d1];
subplot(222),imshow(c1,[]);
title ('分解后低频和高频信息');
 
%进行图像压缩
%保留小波分解第一层低频信息
%首先对第一层信息进行量化编码
ca1=appcoef2(c,s,'bior3.7',1);
ca1=wcodemat(ca1,440,'mat',0);
%改变图像高度并显示
ca1=0.5*ca1;
subplot(223);imshow(cal,[]);
title('第一次压缩图像');
disp('第一次压缩图像的大小为:');
whos('ca1')
%保留小波分解第二层低频信息进行压缩
ca2=appcoef2(c,s,'bior3.7',2);
%首先对第二层信息进行量化编码
ca2=wcodemat(ca2,440,'mat',0);
%改变图像高度并显示
ca2=0.25*ca2;
subplot(224);imshow(ca2,[]);
title('第二次压缩图像');
disp('第二次压缩图像的大小为:');
whos('ca2')

在这里插入图片描述
在这里插入图片描述

参考链接:

图像压缩之小波变换(DWT)
图像压缩小波变换原理

从傅里叶变换到小波变换

参考链接:数字图像处理与Python实现笔记之图像小波变换与多分辨率

小波:

小波的概念:
  • 小波是在有限时间范围内变化且其平均值为0的数学函数。具有两个特点。
    (1)具有有限的持续时间和突变的频率和振幅。
    (2)在有限的时间范围内,它的平均值为0
  • 小波变换的结果为各种小波系数,这些系数由尺度和位移函数组成。
小波变换
  • 通过小波对一个信号在空间和时间上进行局部化的一种数学变换,通过平移母小波,捕获到信号信息。通过缩放母小波的宽度捕获到信号的频域特性。对母小波的平移和缩放操作是为计算小波分量的系数,这些系数代表局部信号和小波之间的相互关系,这些参数反映了信号的时间属性和频率属性。

  • 傅里叶变换:
    在这里插入图片描述

  • 从时域上看,相差很大的两个信号,在频域上却非常相近。一个很自然的方法是加窗(短时距傅里叶变换),将长时间信号分成数个较短的等长信号,然后再分别对每个窗进行傅里叶变换,从而得到频率随时间的变化,这就是短时距傅里叶变换

  • 小波变换:

  • 图中不仅可以看到信号中有哪些频率,还可以看到不同的频率成分在什么时间出现。傅里叶变换类似棱镜,可以将不同的信号分解。小波变换类似于显微镜,不仅知道信号中有哪些成分,还可以知道各种成分在什么位置出现
    在这里插入图片描述

  • 小波分析优于傅里叶分析之处在于:小波分析在时域和频域同时具有良好的局部化性质,因为小波函数是紧支集,而正弦、余弦的区间是无穷区间,所以小波变换可以对高频成分采用逐渐精细的时域或空域取代步长。,从而可以聚焦到对象的任意细节。

图像金字塔

在这里插入图片描述

二维小波图像去噪

在这里插入图片描述

  • 1
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ANIMZLS

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值