首页 > 其他分享 >小波分解

小波分解

时间:2024-11-18 17:29:58浏览次数:1  
标签:subplot title haar imshow 小波 分解 Level

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

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

小波变换步骤:

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的全分解小波包:

main.m

% sanjixiaobofenjie.m
clc;
clear all;
img = double(imread('lena.bmp'));
[m, n] = size(img);

% 确保图像尺寸是2的整数次幂
if mod(m,2) ~= 0 || mod(n,2) ~= 0
img = img(1:floor(m/2)*2, 1:floor(n/2)*2);
[m, n] = size(img);
end

% 一级分解
[LL1, LH1, HL1, HH1] = haar_dwt2D(img);

% 二级分解
[LL2, LH2, HL2, HH2] = haar_dwt2D(LL1);

% 三级分解
[LL3, LH3, HL3, HH3] = haar_dwt2D(LL2);

% 创建图形窗口
figure('Position', [100 100 1200 900]);

% 第一级分解结果
subplot(3,4,1), imshow(LL1), title('First Level - LL');
subplot(3,4,2), imshow(LH1), title('First Level - LH');
subplot(3,4,3), imshow(HL1), title('First Level - HL');
subplot(3,4,4), imshow(HH1), title('First Level - HH');

% 第二级分解结果
subplot(3,4,5), imshow(LL2), title('Second Level - LL');
subplot(3,4,6), imshow(LH2), title('Second Level - LH');
subplot(3,4,7), imshow(HL2), title('Second Level - HL');
subplot(3,4,8), imshow(HH2), title('Second Level - HH');

% 第三级分解结果
subplot(3,4,9), imshow(LL3), title('Third Level - LL');
subplot(3,4,10), imshow(LH3), title('Third Level - LH');
subplot(3,4,11), imshow(HL3), title('Third Level - HL');
subplot(3,4,12), imshow(HH3), title('Third Level - HH');

% 调整子图之间的间距
set(gcf, 'Units', 'Normalized', 'OuterPosition', [0 0 1 1]);
sgtitle('Haar Wavelet Decomposition Results');

  haar_dwt2D.m

function [LL, LH, HL, HH] = haar_dwt2D(img)
[m, n] = size(img);
temp = img; % 创建临时变量存储中间结果

% 行变换
for i = 1:m
[L, H] = haar_dwt(temp(i,:));
if length([L H]) == n % 确保长度匹配
temp(i,:) = [L H];
end
end

% 列变换
for j = 1:n
[L, H] = haar_dwt(temp(:,j)');
if length([L H]) == m % 确保长度匹配
temp(:,j) = [L H]';
end
end

% 分割子带
m2 = floor(m/2);
n2 = floor(n/2);
LL = mat2gray(temp(1:m2, 1:n2));
LH = mat2gray(temp(1:m2, n2+1:n));
HL = mat2gray(temp(m2+1:m, 1:n2));
HH = mat2gray(temp(m2+1:m, n2+1:n));
end

  haar_dwt.m

function [L, H] = haar_dwt(f)
n = floor(length(f)/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

  参考:https://www.cnblogs.com/tiandsp/archive/2013/04/12/3016989.html

 

标签:subplot,title,haar,imshow,小波,分解,Level
From: https://www.cnblogs.com/sweeeper/p/18553236

相关文章

  • 深入理解RAG查询转换优化:多查询、问题分解与回答回退
    引言在RAG(检索增强生成)系统中,查询转换是影响检索质量的关键环节。本文将深入探讨三种先进的查询转换优化策略:多查询重写、问题分解以及回答回退(Step-Back)。这些策略不仅能显著提升检索准确性,还能有效处理复杂查询场景。多查询重写策略原理与优势多查询重写策略的核心思想是通......
  • Bracketing Image Restoration and Enhancement with High-Low Frequency Decompositi
    paper通过密集连接的小卷积核实现细节特征(高频特征提取)提取importtorch.nnasnnclassDense(nn.Module):def__init__(self,in_channels):super(Dense,self).__init__()#self.norm=nn.LayerNorm([in_channels,128,128])#Assuminginputsi......
  • 数据分析-38-时间序列分解之时变滤波器经验模态分解TVFEMD
    文章目录1时间序列模态分解1.1模态分解的概念1.2模态分解的作用1.3常用的模态分解方法1.4模态分解的常用库2时变滤波器经验模态分解TVFEMD2.1TVFEMD的流程2.2加载数据集2.2.1数据重采样2.2.2原始数据可视化2.3代码实现TVFEMD3参考附......
  • 数据分析-39-时间序列分解之经验小波分解EWT
    文章目录1时间序列模态分解1.1模态分解的概念1.2模态分解的作用1.3常用的模态分解方法1.4模态分解的常用库2经验小波分解EWT2.1EWT的流程2.2加载数据集2.2.1数据重采样2.2.2原始数据可视化2.3代码实现EWT3参考附录1时间序列模......
  • 冲一区!双重分解+粒子群优化+深度学习多元时序预测!CEEMDAN-Kmeans-VMD-PSO-Transformer
    目录效果一览基本介绍程序设计参考资料效果一览基本介绍1.Matlab实现CEEMDAN-Kmeans-VMD-PSO-Transformer融合K均值聚类的数据双重分解+粒子群优化+Transformer多元时间序列预测(完整源码和数据)运行环境Matlab2023b及以上。2.CEEMDAN分解,计算样本......
  • 阶乘质因数分解
    \(1\leqn\leq10^6\),唯一分解(质因数分解)\(n!\),输出\(p_i,c_i\)。阶乘分解AcWing197思路前置知识:线性筛(质数判定的算法4)。显然\(n!\)的每个质因子都小于等于\(n\)。因为\(n!=n(n-1)(n-2)(n-3)\cdots3\cdot2\cdot1\),所以质数\(p\)在\(n!\)出现的次数......
  • 【时间序列分析】平稳时间序列分析——Wold分解定理和延迟算子
    Wold分解定理(这个定理是平稳时间序列分析的理论基石。)对于任意一个离散平稳时间序列,它都可以分解为两个不相关的平稳序列之和,其中一个为确定性的(deterministic),另一个为随机性的(stochastic) xₜ=Vₜ+ξₜ,{V₁}为确定性平稳序列,ξ₁为随机性平稳序列式中:确定性......
  • 计量经济学(十五)的理论基础——时间序列分解定理
    时间序列分析是数据科学中的一个重要分支,旨在探索和理解随着时间变化的数据背后的模式和结构。无论是在金融市场预测、经济政策分析、环境监测还是医学研究中,时间序列数据的广泛应用证明了其在预测未来趋势、制定决策和风险管理方面的重要性。然而,时间序列数据的复杂性和多样性使......
  • 如何通过分解问题来提高编程能力?
    通过分解问题来提高编程能力是一种非常有效的方法。分解问题的核心思想是将一个复杂的大问题拆解成更小、更易于管理的子问题,从而更容易解决。这种方法不仅有助于简化问题,还能帮助程序员更好地理解和处理问题。以下是通过分解问题提高编程能力的几个关键步骤:理解问题本质:首先......
  • Neyman因子分解定理
    内容来源数理统计学导论(原书第7版)机械工业出版社因为要计算统计量的pdfpdfpdf,一般情况下,用定义直接验证......