基于MATLAB的小波变换图像压缩技术详解
创作时间:
作者:
@小白创作中心
基于MATLAB的小波变换图像压缩技术详解
引用
CSDN
1.
https://m.blog.csdn.net/2501_90314346/article/details/145959151
小波变换是一种在信号处理和图像压缩领域广泛应用的数学工具。它能够将信号或图像分解为不同频率的子带,从而实现高效的压缩和处理。本文将通过MATLAB代码示例,详细介绍基于小波变换的图像压缩技术,包括如何提取和显示图像的近似系数、水平细节、垂直细节和对角线细节,以及如何进行图像重构。
基于小波变换的图像压缩技术是一种利用小波变换将图像分解为不同频率子带的方法,这些子带包括近似系数(低频信息)和细节系数(高频信息),如垂直细节、水平细节和对角线细节。下面是一个MATLAB示例程序,演示如何使用小波变换进行图像压缩,并展示上述提到的各种细节。
MATLAB代码示例
% 清空工作区并关闭所有图形窗口
clear; clc; close all;
% 读取原始图像
img = imread('your_image_file.jpg'); % 替换为你的图片文件名
img = rgb2gray(img); % 如果图像是彩色的,先转换为灰度图像
% 设置小波变换的层数
level = 2; % 可以根据需要调整层数
% 选择小波基函数
waveletName = 'haar'; % 可以选择其他的小波基函数,如'db4', 'sym4'等
% 执行小波分解
[C, S] = wavedec2(img, level, waveletName);
% 提取各个细节层次的系数
% Approximation coefficients (low frequency)
A2 = appcoef2(C, S, waveletName, level);
% Horizontal details
[H1, V1, D1] = detcoef2('all', C, S, 1);
% Vertical details
[~, V2, ~] = detcoef2('all', C, S, 2);
% Diagonal details
[~, ~, D2] = detcoef2('all', C, S, 2);
% 显示原始图像及其小波分解结果
figure;
subplot(2,3,1), imshow(img, []), title('Original Image');
subplot(2,3,2), imshow(uint8(A2), []), title('Approximation Coefficients');
subplot(2,3,3), imshow(uint8(V1), []), title('Vertical Details Level 1');
subplot(2,3,4), imshow(uint8(H1), []), title('Horizontal Details Level 1');
subplot(2,3,5), imshow(uint8(D1), []), title('Diagonal Details Level 1');
subplot(2,3,6), imagesc(log(abs(C))), colormap(jet), colorbar, title('Wavelet Coefficients');
% 小波重构
reconstructedImg = waverec2(C, S, waveletName);
figure;
imshow(reconstructedImg, []), title('Reconstructed Image');
说明
- 图像读取:首先,我们读入一张图像,并将其转换为灰度图像(如果需要的话)。
- 小波变换:使用
wavedec2函数执行二维小波变换,指定变换的层数和所使用的小波基函数。 - 系数提取:通过
appcoef2和detcoef2函数分别提取近似系数和细节系数。 - 显示结果:最后,使用
imshow和imagesc函数展示原始图像、近似系数、各层细节系数以及小波系数的塔式图。 - 重构图像:使用
waverec2函数从小波系数中重构图像,以验证压缩效果。
请确保在运行此代码之前,你已经安装了MATLAB的小波工具箱。此外,记得替换 your_image_file.jpg 为你实际使用的图像文件路径。希望这个示例能帮助你理解如何在MATLAB中使用小波变换进行图像压缩。
下面是一个完整的MATLAB代码示例,用于基于小波变换的图像压缩技术,并展示垂直细节、水平细节、对角线细节以及小波系数塔式图。
MATLAB代码示例
% 清空工作区并关闭所有图形窗口
clear; clc; close all;
% 读取原始图像

img = imread('cameraman.tif'); % 使用你的图像文件名替换
img = im2double(img); % 将图像转换为双精度浮点数
% 设置小波变换的层数
level = 2; % 可以根据需要调整层数
% 选择小波基函数
waveletName = 'haar'; % 可以选择其他的小波基函数,如'db4', 'sym4'等
% 执行小波分解
[C, S] = wavedec2(img, level, waveletName);
% 提取各个细节层次的系数
% Approximation coefficients (low frequency)
A2 = appcoef2(C, S, waveletName, level);
% Horizontal details
[H1, V1, D1] = detcoef2('all', C, S, 1);
% Vertical details
[~, V2, ~] = detcoef2('all', C, S, 2);
% Diagonal details
[~, ~, D2] = detcoef2('all', C, S, 2);
% 显示原始图像及其小波分解结果
figure;
subplot(2,3,1), imshow(img, []), title('Original Image');
subplot(2,3,2), imshow(A2, []), title('Approximation Coefficients');
subplot(2,3,3), imshow(H1, []), title('Horizontal Details Level 1');
subplot(2,3,4), imshow(V1, []), title('Vertical Details Level 1');
subplot(2,3,5), imshow(D1, []), title('Diagonal Details Level 1');
% 显示小波系数塔式图
figure;
imagesc(log(abs(C)));
colormap(jet);
colorbar;
title('Wavelet Coefficients Tower');
% 小波重构
reconstructedImg = waverec2(C, S, waveletName);
figure;
imshow(reconstructedImg, []), title('Reconstructed Image');
说明
- 图像读取:
- 使用
imread函数读取图像。 - 使用
im2double将图像转换为双精度浮点数,以便后续处理。
- 小波变换:
- 使用
wavedec2函数执行二维小波变换,指定变换的层数和所使用的小波基函数。
- 系数提取:
- 使用
appcoef2和detcoef2函数分别提取近似系数和细节系数。
- 显示结果:
- 使用
imshow函数展示原始图像、近似系数、各层细节系数。 - 使用
imagesc函数展示小波系数的塔式图。
- 重构图像:
- 使用
waverec2函数从小波系数中重构图像,以验证压缩效果。
请确保在运行此代码之前,你已经安装了MATLAB的小波工具箱。此外,记得将 'cameraman.tif' 替换为你实际使用的图像文件路径。希望这个示例能帮助你理解如何在MATLAB中使用小波变换进行图像压缩。
下面是一个完整的MATLAB代码示例,用于基于小波变换的图像压缩技术,并展示垂直细节、水平细节、对角线细节以及近似分量。我们将使用你提供的图像进行处理。
MATLAB代码示例
% 清空工作区并关闭所有图形窗口
clear; clc; close all;
% 读取原始图像
img = imread('cameraman.tif'); % 使用你的图像文件名替换
img = im2double(img); % 将图像转换为双精度浮点数
% 设置小波变换的层数
level = 2; % 可以根据需要调整层数
% 选择小波基函数
waveletName = 'haar'; % 可以选择其他的小波基函数,如'db4', 'sym4'等
% 执行小波分解
[C, S] = wavedec2(img, level, waveletName);
% 提取各个细节层次的系数
% Approximation coefficients (low frequency)
A2 = appcoef2(C, S, waveletName, level);
% Horizontal details
[H1, V1, D1] = detcoef2('all', C, S, 1);
[H2, V2, D2] = detcoef2('all', C, S, 2);
% 显示原始图像及其小波分解结果
figure;
subplot(3,3,1), imshow(img, []), title('Original Image');
subplot(3,3,2), imshow(A2, []), title('Approximation Coefficients A_2');
subplot(3,3,3), imshow(H2, []), title('Horizontal Details H_2');
subplot(3,3,4), imshow(V2, []), title('Vertical Details V_2');
subplot(3,3,5), imshow(D2, []), title('Diagonal Details D_2');
subplot(3,3,6), imshow(H1, []), title('Horizontal Details H_1');
subplot(3,3,7), imshow(V1, []), title('Vertical Details V_1');
subplot(3,3,8), imshow(D1, []), title('Diagonal Details D_1');
% 小波重构
reconstructedImg = waverec2(C, S, waveletName);
figure;
imshow(reconstructedImg, []), title('Reconstructed Image');
说明
- 图像读取:
- 使用
imread函数读取图像。 - 使用
im2double将图像转换为双精度浮点数,以便后续处理。
- 小波变换:
- 使用
wavedec2函数执行二维小波变换,指定变换的层数和所使用的小波基函数。
- 系数提取:
- 使用
appcoef2和detcoef2函数分别提取近似系数和细节系数。
- 显示结果:
- 使用
imshow函数展示原始图像、近似系数、各层细节系数。
- 重构图像:
- 使用
waverec2函数从小波系数中重构图像,以验证压缩效果。
请确保在运行此代码之前,你已经安装了MATLAB的小波工具箱。此外,记得将 'cameraman.tif' 替换为你实际使用的图像文件路径。希望这个示例能帮助你理解如何在MATLAB中使用小波变换进行图像压缩。
热门推荐
淮安大理六日游:穿越千年的文化之旅
双十一购车必看:如何准确核实车辆真实生产日期?
春兰、蕙兰、建兰、寒兰、墨兰:深入解析五种兰花的独特魅力
春季放风筝攻略:让孩子秒变高手!
放风筝小心“隐形刀”,这些技巧要牢记!
春天放风筝,护眼又护颈!
ABO血型:身体中的隐秘密码与多元影响
借贷记账法超简单解析:从入门到精通
千亿级科幻市场凸显四条新赛道
肩关节弹响?这些锻炼帮你告别疼痛!
秋冬季节肩关节炎高发,这些预防措施请收好
肩膀弹响?《基础肌动学》教你科学应对!
肩膀弹响,你真的了解吗?
Windows 10完美运行《侠盗飞车:罪恶都市》攻略
Steam《罪恶都市》超简单优化教程!
科普 | 抗衰的重要物质——AKG
重返月球:阿尔忒弥斯计划开启人类探索新篇章
阿姆斯特朗登月50周年:那些你不知道的事
嫦娥六号:开启月球背面采样新篇章
秋冬季节唇炎高发,广西皮肤病医院专家教你这样预防和治疗
联想小新笔记本键盘失灵?三招轻松搞定!
联想笔记本键盘罢工?这些妙招帮你轻松应对!
联想笔记本键盘切换难题,一文教你轻松解决!
石油化工行业的职业病隐患,你了解多少?
工业4.0浪潮下,制造业如何筑牢职业病防治屏障?
职业卫生学:揭秘职业病危害
胫骨平台骨折术后如何做好护理?这份指南请收好
Science重磅:长出头发和皮肤修复,都离不开这种常见的维生素!
维生素A对眼睛真的有效吗?医生专业解答
挑选机箱风扇的终极指南:从尺寸到静音效果