小波变换

小波分析是泛函分析、Fourier 分析、样条分析、调和分析、数值分析等得完美结合。小波分析被广泛用于图像的压缩、降噪、平滑和融合等,在人脸识别,医学图像处理、机器人视觉、数字电视等领域受到人们越来越多的重视。基于二维小波分析进行图像处理具有坚实的理论基础。

    小波变换的概念是1984年法国地球物理学家J.MOlet在分析处理地球物理勘探资料时提出来的。小波变换的数学基础是19世纪的傅里叶变换,其后理论物理学家A.Grossman采用平移和伸缩不变性建立了小波变换的理论体系。1985年构造出了具有一定衰减性的光滑小波;1998年比利时数学家Daubechies证明了紧支撑正交标准小波基的存在并成功构造了它,使得离散小波分析成为可能。1989年S.Mallat提出了多分辨率分析概念,统一了在此之前各种构造小波的方法。

   小波分析方法和傅里叶变换比较

1) 傅里叶变换的实质是把能量有限的信号F(x)分解到{e^(iwt)}为正交基的空间上去,小波变换的实质是把能量有限的信号发f(x)分解到由小波函数所构成的空间上去。

2)在小波分析中,尺度a越大相当于傅里叶变换中的W值越小。

3)在短时傅里叶变换中,变换系数Gf(w,t)主要依赖于信号在时间窗内的情况,一旦时间窗函数确定,则分辨率也就固定了,而在小波变换中,变换系数WT(a,t)虽然也是依赖于信号在时间窗内的情况,但时间宽度是随尺度a变换而变换的,所以小波变换具有时间局部分析能力。

等等。

haar小波MATLAB实现:

小波变换步骤:

1.把小波w(t)和原函数f(t)的开始部分进行比较,计算系数C。系数C表示该部分函数与小波的相似程度。

2.把小波向右移k单位,得到小波w(t-k),重复1。重复该部知道函数f结束.

3.扩展小波w(t),得到小波w(t/2),重复步骤1,2.

4.不断扩展小波,重复1,2,3.

我这里使用的haar小波,缩放函数是[1 1],小波函数是[1 -1]。是最简单的小波了。

先看看分解的效果,这次我选用了大图:

尺度为2的全分解小波包:

下面是matlab代码:

main.m

复制代码
clear all;
close all;
clc;

img=double(imread('Lena (2).jpg'));
[m n]=size(img);

[LL LH HL HH]=haar_dwt2D(img);  %当然dwt2(img,'haar')是一样的,我只是想明白细节
img=[LL LH;HL HH];      %一层分解

imgn=zeros(m,n);
for i=0:m/2:m/2
    for j=0:n/2:n/2
        [LL LH HL HH]=haar_dwt2D(img(i+1:i+m/2,j+1:j+n/2)); %对一层分解后的四个图像分别再分解
        imgn(i+1:i+m/2,j+1:j+n/2)=[LL LH;HL HH];  
    end
end

imshow(imgn)
复制代码

haar_dwt2D.m

复制代码
function [LL LH HL HH]=haar_dwt2D(img)
    [m n]=size(img);
    for i=1:m       %每一行进行分解
        [L H]=haar_dwt(img(i,:));
        img(i,:)=[L H];
    end
    for j=1:n       %每一列进行分解
       [L H]=haar_dwt(img(:,j));
       img(:,j)=[L H];
    end
    %本来分解不应该加mat2gray的,不过为了有好的显示效果就加上了
    LL=mat2gray(img(1:m/2,1:n/2));          %行列都是低频  
    LH=mat2gray(img(1:m/2,n/2+1:n));        %行低频列高频
    HL=mat2gray(img(m/2+1:m,1:n/2));        %行高频列低频
    HH=mat2gray(img(m/2+1:m,n/2+1:n));      %行列都是高频
    
end
复制代码

haar_dwt.m

复制代码
function [L H]=haar_dwt(f)  %显然,我没有做边界处理,图片最好是2^n*2^n型的
    n=length(f);
    n=n/2;
    L=zeros(1,n);   %低频分量
    H=zeros(1,n);   %高频分量
    for i=1:n
        L(i)=(f(2*i-1)+f(2*i))/sqrt(2);
        H(i)=(f(2*i-1)-f(2*i))/sqrt(2);
    end
    
end
复制代码

参考:

http://amath.colorado.edu/courses/5720/2000Spr/Labs/Haar/haar.html

http://www.cs.ucf.edu/~mali/haar/

http://wenku.baidu.com/view/7839b821aaea998fcc220eed.html

http://www.cnblogs.com/tiandsp/archive/2013/04/12/3016989.html

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值