小波分解原理与MATLAB实现
创作时间:
作者:
@小白创作中心
小波分解原理与MATLAB实现
引用
1
来源
1.
https://www.cnblogs.com/sweeeper/p/18553236
小波分解是一种重要的信号处理技术,广泛应用于图像处理、数据压缩等领域。本文将详细介绍小波分解的基本原理,并通过haar小波的具体实例,展示如何使用MATLAB实现图像的小波分解。
小波变换使用一系列的不同尺度的小波去分解原函数,变换后得到的是原函数在不同尺度小波下的系数。不同的小波通过平移与尺度变换分解,平移是为了得到原函数的时间特性,尺度变换是为了得到原函数的频率特性。
小波变换步骤:
- 把小波w(t)和原函数f(t)的开始部分进行比较,计算系数C。系数C表示该部分函数与小波的相似程度。
- 把小波向右移k单位,得到小波w(t-k),重复1。重复该部知道函数f结束.
- 扩展小波w(t),得到小波w(t/2),重复步骤1,2.
- 不断扩展小波,重复1,2,3.
这里使用的是haar小波,缩放函数是[1 1],小波函数是[1 -1]。是最简单的小波了。
先看看分解的效果,这次我选用了大图:
尺度为2的全分解小波包:
下面是具体的MATLAB实现代码:
% main.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
热门推荐
健康油的尽头是自炼猪油?
北京到承德:3天2晚自驾游,邂逅金山岭长城、避暑山庄与温泉度假
小米电视上的《流浪地球2》:震撼视觉效果与性价比的完美结合
朱炳仁《灵蛇定乾坤》:蛇年文化的艺术传承
2025蛇年运势大揭秘:灵动与智慧并存
“平安通航”安全风险提示:空中积冰的危害与处置
红枣上火真相大揭秘:搭配食谱与适宜人群
羊蝎子:传统美食的制作工艺与文化魅力
弗洛伊德教你解读上学梦:梦境背后的潜意识密码
婴儿水喝多了会怎样
双十一后,你学会关闭拼多多免密支付了吗?
增肌增重期间应避免食用的五类食物
除夕早上贴春联 传递祝福藏祥瑞 千年习俗迎新春
青海西宁环线自驾游:穿越高原的5天4晚绝美之旅
飞往国际目的地:奶制品携带全攻略
武汉天河机场:带娃乘机奶制品携带全攻略
飞机奶制品携带新规解读:你真的了解吗?
殷桃的冻龄秘诀:不止于外在,更在于内心的年轻
黄山臭鳜鱼在家也能做!
黄山毛豆腐:徽州古韵中的奇味瑰宝
黄山必打卡:徽州美食大揭秘!
蛇年吉祥话大比拼:创意祝福语征集活动
韶关三日游打卡网红景点:南华寺、丹霞山、帽子峰
冬日打卡:韶关丹霞山绝美风光
鹅绒羽绒服更贵?鹅绒比鸭绒更保暖吗?
秋冬养生:这些食物帮你预防酒后不适
诗意新春:国际留学生用古诗词庆贺蛇年
世界心脏联盟:不存在安全的饮酒量
年末聚餐必备:鸡蛋、香蕉、鲑鱼助你防醉
新年到,蛇年吉祥话刷屏朋友圈!