用自编的程序实现小波图像分解与重构


去年11月发布了一系列有关小波变换和图像处理的文章,把学习小波过程中的心得体会和编写的程序放在网上和大家共享交流。半年来,感谢大家的关注和帮助,在相互的讨论交流中,我不断地从大家提出的问题中拓展自己的知识面,对小波的理论及其应用有了更深入的了解和掌握。根据和大家讨论交流中发现的问题,对博客中的程序进行修正。有关小波图像分解和重构的两篇文章中分享的程序,存在下列问题:
(1)程序所用的小波函数只有非标准的Haar小波,其滤波器组为 Lo_D=[1/2 1/2], Hi_D=[-1/2 1/2],是固化在 mydwt2.m 的程序中的,不能选择其他的小波函数;
(2)非标准的Haar小波,其分解出来的系数矩阵中,高频系数的细节内容(轮廓、边缘等特征)不明显;
(3)函数 mydwt2 中列变换的矩阵对象为输入矩阵,这是错误的,其矩阵对象应该是行变换后的缓存矩阵;
(4)函数 mydwt2 的输出用[LL,HL,LH,HH]表示,不是很规范,应改为[cA,cV,cH,cD]来表示,即一级小波变换输出的系数矩阵有4个部分:平均部分、垂直细节部分、水平细节部分和对角线细节部分。
(5)函数 mywavedec2 的输出 y 是与输入矩阵 x 相同大小的矩阵,并且已将N级分解后所有的平均、细节系数组合成一体的。实际上,这种定义只对Haar小波有效。
(6)原程序中要调用 modmat 函数对图像矩阵进行修剪,使之能被 2 的 N 次方整除,主要是为了生成塔式结构图像而设的,对上述问题修正后,这个 modmat 函数已不需使用了。
针对上述问题,我对程序作了修正,发布在今天的3篇文章里,请大家点击查看。新修正的程序更为简洁易懂,功能也有所增强,可以用任意的小波函数进行小波分解,可根据小波分解系数矩阵重构出指定分解级的低频系数和原始图像。

1、《小波图像分解与重构程序存在的问题与解决办法》
http://blog.csdn.net/chenyusiyuan/archive/2008/06/05/2513126.aspx
2、《小波图像分解 Matlab 程序 - V2.0版》
http://blog.csdn.net/chenyusiyuan/archive/2008/06/05/2513865.aspx
3、《小波图像重构 Matlab 程序 - V2.0版》
http://blog.csdn.net/chenyusiyuan/archive/2008/06/05/2514119.aspx
 
      上一篇文章中我们实现了小波的一维、二维信号分解与重构,其中的二维信号分解与重构,只要稍作修改,就可以实现图像的分解和重构了。修改的工作,主要是对图像信号进行规范化处理、数据格式转换和绘图细节处理等。
 
       简单起见,我们从黑白(灰度)图像的分解、重构说起,因为彩色图像的处理要复杂一点。在本文中,我们使用著名的Lena图作为原始图像。

图1
首先,为了实现图像的N层分解,对一幅m行n列的黑白图像,我们要对其进行规范化处理,使其能被2的N次方整除。以下的modmat() 函数实现此功能:
<
  • 2
    点赞
  • 55
    收藏
    觉得还不错? 一键收藏
  • 28
    评论
小波分解是一种将信号分解为多个频率带的方法,它可以用于信号的压缩、降噪、分析等。下面是用 Python 实现小波分解重构的示例代码: 首先,需要安装 pywt 库,它是 Python 中用于小波变换的库。可以使用 pip 命令进行安装: ```python pip install pywt ``` 接下来,我们以一维信号为例进行分解重构。 ```python import pywt import numpy as np import matplotlib.pyplot as plt # 生成信号 t = np.linspace(0, 1, 1000) x = np.sin(2 * np.pi * 5 * t) + np.sin(2 * np.pi * 10 * t) # 进行小波分解,得到近似系数和细节系数 cA, cD = pywt.dwt(x, 'db4') # 将近似系数和细节系数进行逆变换,得到重构信号 x_rec = pywt.idwt(cA, cD, 'db4') # 绘制原始信号和重构信号 plt.subplot(2, 1, 1) plt.plot(t, x) plt.title('Original Signal') plt.subplot(2, 1, 2) plt.plot(t, x_rec) plt.title('Reconstructed Signal') plt.tight_layout() plt.show() ``` 上述代码中,我们首先生成了一个由两个正弦波组成的信号。然后,使用 pywt.dwt 函数进行小波分解,其中第一个参数是输入信号,第二个参数是小波函数的名称,我们使用的是 db4 小波函数。函数返回的是近似系数 cA 和细节系数 cD。接着,使用 pywt.idwt 函数进行逆变换,得到重构信号 x_rec。最后,将原始信号和重构信号进行绘制,可以看到它们非常接近。 除了一维信号外,pywt 库还支持二维信号的小波分解重构。如果需要使用二维小波变换,可以使用 pywt.dwt2 和 pywt.idwt2 函数。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值