二维haar小波matlab_matlab练习程序(图像Haar小波变换)

关于小波变换我只是有一个很朴素了理解。不过小波变换可以和傅里叶变换结合起来理解。

傅里叶变换是用一系列不同频率的正余弦函数去分解原函数,变换后得到是原函数在正余弦不同频率下的系数。

小波变换使用一系列的不同尺度的小波去分解原函数,变换后得到的是原函数在不同尺度小波下的系数。

不同的小波通过平移与尺度变换分解,平移是为了得到原函数的时间特性,尺度变换是为了得到原函数的频率特性。

小波变换步骤:

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

endimshow(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

参考:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值