• 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

     1 clear all;
     2 close all;
     3 clc;
     4 
     5 img=double(imread('Lena (2).jpg'));
     6 [m n]=size(img);
     7 
     8 [LL LH HL HH]=haar_dwt2D(img);  %当然dwt2(img,'haar')是一样的,我只是想明白细节
     9 img=[LL LH;HL HH];      %一层分解
    10 
    11 imgn=zeros(m,n);
    12 for i=0:m/2:m/2
    13     for j=0:n/2:n/2
    14         [LL LH HL HH]=haar_dwt2D(img(i+1:i+m/2,j+1:j+n/2)); %对一层分解后的四个图像分别再分解
    15         imgn(i+1:i+m/2,j+1:j+n/2)=[LL LH;HL HH];  
    16     end
    17 end
    18 
    19 imshow(imgn)

    haar_dwt2D.m

     1 function [LL LH HL HH]=haar_dwt2D(img)
     2     [m n]=size(img);
     3     for i=1:m       %每一行进行分解
     4         [L H]=haar_dwt(img(i,:));
     5         img(i,:)=[L H];
     6     end
     7     for j=1:n       %每一列进行分解
     8        [L H]=haar_dwt(img(:,j));
     9        img(:,j)=[L H];
    10     end
    11     %本来分解不应该加mat2gray的,不过为了有好的显示效果就加上了
    12     LL=mat2gray(img(1:m/2,1:n/2));          %行列都是低频  
    13     LH=mat2gray(img(1:m/2,n/2+1:n));        %行低频列高频
    14     HL=mat2gray(img(m/2+1:m,1:n/2));        %行高频列低频
    15     HH=mat2gray(img(m/2+1:m,n/2+1:n));      %行列都是高频
    16     
    17 end

    haar_dwt.m

     1 function [L H]=haar_dwt(f)  %显然,我没有做边界处理,图片最好是2^n*2^n型的
     2     n=length(f);
     3     n=n/2;
     4     L=zeros(1,n);   %低频分量
     5     H=zeros(1,n);   %高频分量
     6     for i=1:n
     7         L(i)=(f(2*i-1)+f(2*i))/sqrt(2);
     8         H(i)=(f(2*i-1)-f(2*i))/sqrt(2);
     9     end
    10     
    11 end
  • 相关阅读:
    C# 创建Excel并写入内容
    c#中使用excel
    C#中EXCEL表格的内容进度条实现
    WinForm c#操作Excel
    如何使用 Visual C# .NET 处理 Excel 事件
    C#与Excel的交互示例
    c#操作excel方式三:使用Microsoft.Office.Interop.Excel.dll读取Excel文件
    C#在excel中添加超链接
    ASP.NET学习笔记(3)
    ASP.NET学习笔记(4)
  • 原文地址:https://www.cnblogs.com/ybqjymy/p/13645304.html
Copyright © 2020-2023  润新知