MATLAB图像多尺度分析

1.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源代码及分析

 
  1. clear all;close all;clc;

  2. img=double(imread('Ziheng.jpg'));

  3. [m,n]=size(img);

  4.  
  5. [LL,LH,HL,HH]=haar_dwt2D(img); %dwt2(img,'haar')一样

  6. img=[LL LH;HL HH]; %一层分解

  7.  
  8. imgn=zeros(m,n);

  9. for i=0:m/2:m/2

  10. for j=0:n/2:n/2

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

  12. imgn(i+1:i+m/2,j+1:j+n/2)=[LL LH;HL HH];

  13. end

  14. end

  15. imshow(imgn)

 
  1.  
  2. function [LL,LH,HL,HH]=haar_dwt2D(img)

  3. [m,n]=size(img);

  4. for i=1:m %每一行进行分解

  5. [L,H]=haar_dwt(img(i,:));

  6. img(i,:)=[L H];

  7. end

  8. for j=1:n %每一列进行分解

  9. [L,H]=haar_dwt(img(:,j));

  10. img(:,j)=[L H];

  11. end

  12. %本来分解不应该加mat2gray的,不过为了有好的显示效果就加上了

  13. LL=mat2gray(img(1:m/2,1:n/2)); %行列都是低频

  14. LH=mat2gray(img(1:m/2,n/2+1:n)); %行低频列高频

  15. HL=mat2gray(img(m/2+1:m,1:n/2)); %行高频列低频

  16. HH=mat2gray(img(m/2+1:m,n/2+1:n)); %行列都是高频

  17. end

 
  1. %haar_dwt.m

  2. function [L,H]=haar_dwt(f)

  3. %没有做边界处理,图片最好是2^n*2^n型

  4. n=length(f);

  5. n=n/2;

  6. L=zeros(1,n); %低频分量

  7. H=zeros(1,n); %高频分量

  8. for i=1:n

  9. L(i)=(f(2*i-1)+f(2*i))/sqrt(2);

  10. H(i)=(f(2*i-1)-f(2*i))/sqrt(2);

  11. end

  12.  

3.实验结果分析

                      

猜你喜欢

转载自blog.csdn.net/liangjiubujiu/article/details/81078546