小波变换在图像压缩方面的分析与应用(Matlab代码)

news/2024/7/21 4:52:36 标签: 小波分析, 图像处理, matlab

小波变换在图像压缩方面的实现与应用

  • 一、实验图片的基本信息
  • 二、数据处理过程
    • 2.1小波函数的选择
    • 2.2图像压缩的基本思想
  • 三、不同小波函数压缩程度的对比
  • 四、MATLAB源码

一、实验图片的基本信息

小波变换作为一种新的数学工具,不仅继承了傅立叶变换的优点,同时又克服了它的许多缺点。由于小波变换是将图像分解成不同的频率子带。恰巧人眼对不同的频带的信息具有不同的响应,这一点人的视觉系统与小波很相似。数字图像压缩编码标准JPEG2000采用的就是小波变换技术。
为了验证小波变换技术在图像压缩方面的性能,现取一张手机拍摄的图片,用MATLAB将其转化为灰度图,如下所示(原始彩图和转变完的灰度图)。图片大小为41.1KB,像素为 375 × 500 375 \times 500 375×500。(原图和源代码在我的上传资源“小波变换wavelet代码.rar”中)
原图

在这里插入图片描述

二、数据处理过程

2.1小波函数的选择

小波变换不同于傅里叶变换,根据小波母函数的不同,小波变换的结果也不尽相同。

从小波变换的原理出发,可以总结出一些选择标准:如支撑大小,对称性,正则性(平滑性)等。

支撑性:
大部分应用选择支撑长度为5~9之间的小波,因为支撑长度太长会产生边界问题,支撑长度太短精度太低,不利于信号能量的集中。

对称性:
具有对称性的小波,在图像处理中可以很有效地避免相位畸变。

正则性(平滑性):
在量化或者舍入小波系数时,为了减小重构误差对人眼的影响,必须尽量增大小波的光滑性或者连续可微性。也就是说正则性好的小波,能在信号或图像的重构中获得较好的平滑效果,减小量化或舍入误差的视觉影响。

本实验选用最基础的Haar小波函数、sym和JPEG2000标准中的Daubechies小波函数进行对比分析。它们都具有正交性,紧支撑性,对称性的小波函数。Haar小波函数的支撑长度为1,滤波器长度为2,消失矩阶数为1。Daubechies小波函数的支撑长度为2N-1,滤波器长度为2N,消失矩阶数为N-1。

2.2图像压缩的基本思想

小波变换用于图像压缩的基本思想就是根据二维小波分解算法,将一幅图像做小波分解,可得到一系列不同分辨率的图像。表现一幅图像最主要的部分是低频部分,而水平、垂直和对角线部分表征了原图像的边缘信息,具有明显的方向特性。低频部分可以称为亮度图像,水平、垂直和对角线部分可以称为细节图像。如果去掉图像的高频部分,保留低频部分,再根据人类的视觉生理和心理特点分别作不同策略的量化和编码处理,则可以达到图像压缩的目的。
在MATLAB中,**用wavedec2函数,对小波进行分解;用appcoef2函数,获得图像的近似信息(低频部分);用detcoef2函数,获得图像在水平、垂直和对角方向的细节信息(高频部分)。**各方向信息如下图所示。
在这里插入图片描述

利用wcodemat函数,对尺度1下的低频系数第一次压缩并对第一层信息进行量化编码。对尺度2下的低频系数做同样的操作,对图像进行第二次压缩。压缩后的图像如下图所示。
在这里插入图片描述

三、不同小波函数压缩程度的对比

Haar和Daubechies小波函数压缩图像结果如下表所示。用sym5小波基得到压缩图像效果和Daubechies一样,就不再列出。

表1 两种不同的小波函数压缩图像结果

在这里插入图片描述
从以上数据可以看出,两个方法的第一次压缩是提取原始图像中小波分解第一层的低频信息,此时压缩效果较好,压缩比较小约为1/4。第二次压缩是提取第一层分解低频部分的低频部分,即小波分解第二层的低频部分,其压缩比比较大,约为1/14。压缩效果在视觉上也基本过得去,它不需要经过其他处理即可获得较好的压缩效果。由表格可以看出,Haar小波变换的压缩性能稍微好于Daubechies(N=5)。当Daubechies小波函数中的N=1时为Haar小波。Haar小波在时域上是不连续的,所以作为基本小波性能不是特别好。Daubechies小波的特点是随着阶次(序列N)的增大消失矩阶数越大,其中消失矩越高光滑性就越好,频域的局部化能力就越强,频带的划分效果越好,所以在实际生活中的很多情景下Daubechies小波函数适用性更强。

四、MATLAB源码

% 数据压缩 ——图像压缩
% 2020.12.31 hx
close all;  clc; clear;   
data =imread('merry.jpg');    
data=rgb2gray(data); whos('data');
figure; imshow(data);
title('原始图像');

% 小波分解
[c,s]=wavedec2(data,2,'sym3');
cA1=appcoef2(c,s,'sym3',1);%尺度1的低频系数
cA2=appcoef2(c,s,'sym3',2);%尺度2的低频系数
[cH1,cV1,cD1]=detcoef2('all',c,s,1);%尺度1的所有方向的高频系数H水平,V垂直,D对角
[cH2,cV2,cD2]=detcoef2('all',c,s,2);%尺度2的所有方向的高频系数
% wrcoef2  Reconstruct single branch from 2-D wavelet coefficients.
figure;
subplot(3,3,1); imshow(uint8(cA1));title('尺度1的低频系数图像'); %uint8的范围是0-255,转换
subplot(3,3,2); imshow(uint8(cA2));title('尺度2的低频系数图像');
subplot(3,3,4); imshow(uint8(cH1));title('尺度1水平方向高频系数图');
subplot(3,3,5); imshow(uint8(cV1));title('尺度1垂直方向');
subplot(3,3,6); imshow(uint8(cD1));title('尺度1斜线方向');
subplot(3,3,7); imshow(uint8(cH2));title('尺度2水平方向高频系数图');
subplot(3,3,8); imshow(uint8(cV2));title('尺度2垂直方向');
subplot(3,3,9); imshow(uint8(cD2));title('尺度2斜线方向');

%进行图像压缩
%第一层
cA1=wcodemat(cA1,192,'mat',0); %对矩阵进行量化编码
figure; subplot(121);
imshow(cA1,[]);  %将指定范围的灰度值变换到0-255区间显示
title('第一次压缩图像');
%第二层
cA2=wcodemat(cA2,192,'mat',0);
subplot(122); imshow(cA2,[]);
title('第二次压缩图像');
cA1=uint8(cA1);
cA2=uint8(cA2);
disp('第一次压缩后图像的大小:'); whos('cA1');
disp('第二次压缩后图像的大小:'); whos('cA2');


http://www.niftyadmin.cn/n/755137.html

相关文章

国内主要安全产品及厂商

链接:https://www.zhihu.com/question/20334043/answer/183326406来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。国内哪些公司在做企业版安全产品开发?问题太大了,做企业版安全产品的…

Nakagami-m分布、Gamma分布的无线信道及Python代码

Nakagami-m分布无线信道中产生分布为Nakagami的信道Nakagami-m分布特征1、概率密度函数PDF(Probability Density Function)2、累积密度函数CDF(Cumulation Density Function)4、无线信道参数设计5、综合各函数表Gamma分布代码1、验…

strace命令

转载自:http://man.linuxde.net/strace strace命令是一个集诊断、调试、统计与一体的工具,我们可以使用strace对应用的系统调用和信号传递的跟踪结果来对应用进行分析,以达到解决问题或者是了解应用工作过程的目的。当然strace与专业的调试工…

np.array数组和list列表区别及一些常用操作| python

文章目录np.array数组和list列表区别合并数组1、numpy数组的合并2、list列表的合并筛选数组中不满足条件的元素并修改1、numpy.where2、列表解析np.array数组和list列表区别 list可以存放不同类型的数据,比如int、float和str,甚至布尔型。数据类型保存的…

2018.2.10 dijkstra's shortest path

内容比较少,一个week就讲了一个dijkstra,assignment也不难,就实现dijkstra而已,然而比较难的是用heap来实现O(n*logm)的dijkstra,这个我自然是没做的。。。 主要是急着做完,明晚跟zzg吃完饭回来可以考虑把i…

vimscript-expand函数详解

vim提供很多内置函数,expand就是其中之一 不多说,先上文档介绍 expand({expr} [,{nosuf} [, {list}]]) expand()扩展{expr}里的通配符和下列关键字。wildgnorecase 此处适用。如果给出{list}且为TRUE,返回列表。否则返回的是字符…

Python基础操作

Python基础入门主函数序列、数组等都是从0开始logspace函数——等比数列产生等距的数组主函数 if __name__ __main__:序列、数组等都是从0开始 A [1,2,3] print(A[0])输出 1logspace函数——等比数列 A np.logspace(-4, 1) print("A:", A) print("size:&…

CF898A Rounding

CF898A Rounding 题意翻译 给你一个数字,将其“四舍六入”,末尾为5舍去或进位都可,求最终的数字。 题目描述 Vasya has a non-negative integer nn . He wants to round it to nearest integer, which ends up with 00 . If nn already ends …