(思远老师的好文章留着)
转载自http://blog.csdn.net/chenyusiyuan/article/details/2513126

去年11月发布了一系列有关小波变换和图像处理的文章,把学习小波过程中的心得体会和编写的程序放在网上和大家共享交流。半年来,感谢大家的关注和帮助,在相互的讨论交流中,我不断地从大家提出的问题中拓展自己的知识面,对小波的理论及其应用有了更深入的了解和掌握。的确,分享,才是知识永恒之道!

接下来有新的课题,并且要准备考博,研学征途马上要展开新的探索。在此之前,得先整理下博客文章,根据和大家讨论交流中发现的问题,对博客中的程序进行修正。今天发布的文章,就是对小波图像分解和重构程序作出重要的修正,这个程序是了解小波、使用小波最根本的,希望对大家学习小波有所帮助。

首先指出我原来发布的小波图像分解重构的文章中存在的问题。相关的文章有:

1、自己动手编写小波信号分解与重构的Matlab程序
http://blog.csdn.net/chenyusiyuan/archive/2007/11/13/1881781.aspx

2、用自编的程序实现小波图像分解与重构
http://blog.csdn.net/chenyusiyuan/archive/2007/11/13/1881940.aspx

其存在的问题有:

(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)函数 mydwt2 的输出[LL,HL,LH,HH]中,HL 取的是小波行变换和列变换后所得矩阵的左下角部分,即垂直细节部分,但在最终的显示结果中 HL 是在右上角的位置的;类似地,LH 取行、列变换所得矩阵的右上角部分,即水平细节部分,但最终显示位置是在左下角,当时这样定义,是我从教材中看到小波一级分解后所得矩阵的平均、细节部分分布从上到下、从左到右依次为:平均部分、水平细节部分、垂直细节部分、对角线细节部分。但通过编程实现和仔细分析,我发现其分布次序应该是平均部分、垂直细节部分、水平细节部分、对角线细节部分才对,即水平和细节的位置对调,具体过程下文会给出图示,希望能和大家讨论下哪个次序才是正确的。

(5)函数 mywavedec2 的输出 y 是与输入矩阵 x 相同大小的矩阵,并且已将N级分解后所有的平均、细节系数组合成一体的。实际上,这种定义只对Haar小波有效。因为对于Haar小波来说,其滤波器长度仅为2,输入序列与滤波器系数卷积后,输出序列与输入序列长度是相同的(在Matlab中,若信号长度为n,滤波器长度为2N,则小波分解后cA、cD的长度均为:lnf = floor((n-1)/2)+N,若2N=2,则 lnf*2 = n),从而使小波系数矩阵与图像矩阵的大小相同。若使用其它类型的小波,由于 2N > 2,lnf*2 > n,这样函数 mydwt2 输出的系数矩阵将比输入矩阵大,那么 mywavedec2 的输出 y 将会显示出平均与细节部分边界重叠的问题。这说明了试图把平均和细节系数组合成一体,以显示小波分解的塔式结构,理论上是不可行的,至少对于Matlab来说是不可行的。当然,由公式 lnf = floor((n-1)/2)+N ,我们可以对卷积后的序列进行截取,使卷积输出序列与输入序列长度相同,但通过编程实现发现,截取会找出下一级分解错误,所以函数 mywavedec2 的输出 y 的格式要作适当调整。

(6)原程序中要调用 modmat 函数对图像矩阵进行修剪,使之能被 2 的 N 次方整除,主要是为了生成塔式结构图像而设的,对上述问题修正后,这个 modmat 函数已不需使用了。

针对上述问题,我对程序作了以下几点修正:

(1)函数 mywavedec2 / mywaverec2 的输入参数增加了小波函数'wname',可以选择任意类型的小波函数来对图像进行小波分解和重构。相应地,调用Matlab函数 wfilters 来求取小波函数的分解滤波器组系数[Lo_D,Hi_D]和重构滤波器组系数[Lo_R,Hi_R]。

(2)函数 mydwt2 的输出应改为[cA,cV,cH,cD]来表示,注意这4个部分的位置分布:cA 在系数矩阵的左上角,cV 在右上角,cH 在左下角,cD 在右下角。

(3)函数 mydwt2 的列变换,其处理对象由输入矩阵 x 改为 行变换后的缓存矩阵 x1,列变换后得到缓存矩阵 x2。输出 cA 取 x2 的左上角1/4部分,cV 取 x2 的右上角1/4部分,cH 取 x2 的左下角1/4部分,cD 取 x2 的右下角1/4部分。

(4)函数 mywavedec2 的输出 y 格式改为与Matlab的 wavedec2 类似,但我的是以“细胞矩阵”的格式,而 wavedec2 是以“向量序列”的格式输出小波系数。小波分解的结果显示方式不再使用塔式结构方式,而是用 subplot 函数把各级平均、细节系数显示出来。

(5)重构函数 mywaverec2 根据分解函数 mywavedec2 的输出格式做了相应的修改,程序更简洁、易懂和合理。并且 mywaverec2 的重构级数可以与分解级数不同,能够实现不同级别的小波重构。

(6)函数 myidwt2 的行、列变换中,卷积后要对卷积输出序列进行裁剪,消除分解滤波器和重构滤波器对序列长度的影响,使重构矩阵的大小与上一分解级的系数矩阵大小一致。

以上是主要的修正点,更详细的修改信息请看下一篇文章给出的程序及其注释。

转载于:https://www.cnblogs.com/cyxcw1/archive/2012/05/25/3051303.html

小波图像分解与重构程序存在的问题与解决办法相关推荐

  1. 【转】小波图像分解与重构

    原文地址:[转]小波图像分解与重构 作者:freedesert 小波图像融合综述(1) 分类: 小波变换 2007-11-14 11:15  4728人阅读  评论(6)  收藏  举报 图像融合是将 ...

  2. matlab 小波的分解与重构

    小波的分解和重构在很多领域都有运用. 第一: matlab中相关小波函数 1. wavedec:  Multilevel 1-D wavelet decomposition    小波分解 [C,L] ...

  3. 小波分析:db小波的分解与重构

    小波分析:db小波的分解与重构 最近在利用行波测距中使用到了小波变换的模极大值提取行波波头的时间,苦于公开资源太少,无从下手.最终经过学习,有所所获,希望可以帮助到有需要的同学. 贴一段matlab的 ...

  4. (转)小波的分解和重构

    转:天津大学 小波分析 宗婧 1015202078 原理可参考:https://wenku.baidu.com/view/73439a6d5901020207409cd5.html 1.单层小波分解 ...

  5. 【图像融合】基于matlab低频融合策略小波图像融合【含Matlab源码 2319期】

    ⛄一.小波变换彩色图像融合简介 1 基于小波的图像融合 1.1 小波的分解和重构 小波变换是一种能够用来检测信号局部特征的数学工具.当然也可以将二维信号分解成不同分辨率的子带信号.由于图像为二维信号, ...

  6. 小波图像融合综述(1)

    图像融合是将两幅或多幅图像融合在一起,以获取对同一场景的更为精确.更为全面.更为可靠的图像描述.融合算法应该充分利用各原图像的互补信息,使融合后的图像更适合人的视觉感受,适合进一步分析的需要:并且应该 ...

  7. 小波图像融合的Matlab实现示例(添加图片演示080428)

    前几天我们讨论了一种基于低频融合策略的小波图像融合算法(http://blog.csdn.net/chenyusiyuan/archive/2007/11/14/1883987.aspx),今天就来说 ...

  8. matlab 程序 收缩,基于MATLAB的小波收缩去噪方法研究(程序)

    基于MATLAB的小波收缩去噪方法研究(程序)(课题申报表,任务书,开题报告,中期检查表,外文翻译,论文15400字,程序,答辩PPT) 摘 要 信号在采集.传输和获取的过程中难免会受到各种噪声的干扰 ...

  9. catia 安装打开闪退_win10catia r20应用程序无法正常启动的解决办法

    catia r20是一款用于模具设计的专业软件,能够给用户提供十分完善的建模技术.但近日有用户却反映说自己的win10正式版电脑出现了catia r20无法正常启动的情况,那我们要怎么解决这一问题呢? ...

最新文章

  1. Gbps接口面向汽车应用
  2. 基于Vue的WebApp项目开发(四)
  3. setjmp()、longjmp() Linux Exception Handling/Error Handling、no-local goto
  4. oracle 存储过程 ,触发器练习
  5. hdu 4937 Lucky Number(数学题 进制转换)2014多校训练第7场
  6. Openstack的镜像上传原理
  7. iPhone 12包装盒设计曝光,没充电器没耳机实锤?
  8. 如何把一个bin文件捆绑到一个可执行文件exe中?
  9. VMware ubuntu16安装
  10. 决策树算法小结(一) ID3原理及代码实现
  11. 产品经理项目从0-1工作简要流程
  12. 单片机c语言实习报告,单片机实习心得
  13. 金融衍生品软件产品设计必备知识——上海黄金交易所产品概览
  14. 域名申请(注册)的流程
  15. 学CNC编程,首先要从哪里开始?
  16. 根据出生年月日计算出生了多少年,多少月,多少天
  17. mysql inet aton ipv6_Linux网络编程IPv4和IPv6的inet_addr、inet_aton、inet_pton等函数小结
  18. Day25:Python基础编程(函数)能力训练50天——回文数
  19. 上海工程技术大学计算机专硕,2017年上海工程技术大学硕士研究生调剂公告
  20. php 实现ppt转动态swf,如何将ppt转换成swf,ppt转swf的软件,ppt转换flash

热门文章

  1. jQuery综合案例——打地鼠(教学版本·附源码)
  2. Oracle 中control_file_record_keep_time参数的解释
  3. Oracle约束的关键字Enable/Disable/Validate/Novalidate
  4. 如何修改oracle字段类型
  5. JavaWeb第五讲 Web核心基础之HTTP协议
  6. MySQL内存管理,内存分配器和操作系统
  7. 简述区块链(1)- 也许只有这一篇
  8. RPC与其实现方式概念笔记
  9. JSON数据表示格式简介(JavaScript对象表示法)
  10. [转]密码技术-实现数字信封和数字签名