一、前言
实验目的
用小波变换对图像去噪。
简单回顾一下小波变换:
数学公式我就不上了,估计上了也没人会认真看…
小波变换之所以诞生,是由于之前使用的傅里叶变换有一些缺点:
- 傅立叶变换提取信号的频谱,需要利用信号的全部时域信息。
- 傅立叶变换,没有随着时间的变化信号频率成分的变化情况。
- 傅立叶变换积分作用平滑了非平稳信号的突变成分。
用大白话说就是:
- 前两点:因为傅里叶变换是统计一段时间内的图像频率变化(高频低频波普啊什么的),他本身是不具备时间属性的,用户只知道这一段时间里面频域率总共发生了什么,但是先后顺序啊这种时间信息一概不知。
- 第三点:傅里叶变换由于本身性质,对于偶然出现的一个超大值点,会被其影响整个时间段的频率图像分布,但是小波变换由于具有时间属性,就能够锁定这个突变点(再进行什么操作那是后话,反正是知道这个突变点是什么时候出现的)
傅里叶变换:
但是在这种情况,如图所示,傅里叶变换不能区分这两种图像区别:
自然界的大量信号几乎都是非平稳的,所以在比如生物医学信号分析等领域的论文中,基本看不到单纯傅里叶变换这样naive的方法。所以就引出了小波变换:
- 首先,顾名思义,小波变换是对波进行了一些处理,把大波变成了小波的操作将无限长的三角函数基换成了有限长的会衰减的小波基。
- 这就是为什么它叫“小波”,因为是很小的一个波嘛~
- 小波还有一些好处,比如,我们知道对于突变信号,傅里叶变换存在吉布斯效应,我们用无限长的三角函数怎么也拟合不好突变信号:
二、环境配置
python 小波库PyWavelets 直接在cmd中输入:
pip install PyWavelets
要运行PyWavelets所有测试还需要安装 Matplotlib 包
pip install Matplotlib.
如果已经安装,则会出现如下图示:
三、实验思路及过程(附图)
- 首先,用小波变换(随便选去一个小波基,我用的哈尔)对图像进行分解,得到高低频分量(其中高频有三个分量)。
#读取灰度图
img = cv2.imread('pic/house.jpg',0)
#cA,cH,cV,cD 分别为近似分量(低频分量)、水平细节分量、垂直细节分量和对角细节分量
cA,(cH,cV,cD)=dwt2(img,'haar')#dwt2函数第二个参数指定小波基
#打印语句
plt.subplot(232), plt.imshow(cA, 'gray'), plt.title('cA')
plt.subplot(233), plt.imshow(cH, 'gray'), plt.title('cH')
plt.subplot(234), plt.imshow(cV, 'gray'), plt.