图像处理之小波变换的应用

1. 部分常用的小波变换函数

  • dwt2实现一级二维离散小波变换
[ca,ch,cv,cd] = dwt2(Image, 'wavename');
% Image: 待分解图像
% wavename: 小波函数,如'db4''sym5'
% ca: 分解得到的低频分量
% ch: 分解得到的水平高频分量
% cv: 分解得到的垂直高频分量
% cd: 分解得到的对角高频分量
  • idwt2实现一级二维离散小波逆变换
Image = dwt2(ca,ch,cv,cd, 'wavename');
% Image: 小波重构得到的图像
% wavename: 小波函数,如'db4''sym5'
% ca: 小波变换得到的低频系数
% ch: 小波变换得到的水平高频系数
% cv: 小波变换得到的垂直高频系数
% cd: 小波变换得到的对角高频系数
  • wavedec2多级二维离散小波分解
[c, s] = wavedec2(Image, Num, 'wavename');
% Image: 待分解图像
% Num: 分解级数
% wavename: 小波函数,如'db4''sym5'
% c: 低频系数、水平高频系数、垂直高频系数、对角高频系数组成的向量
% s: 低频系数、水平高频系数、垂直高频系数、对角高频系数的长度
  • waverec2多级二维离散小波重构
Image = waverec2(c, s, 'wavename');
% Image: 小波重构得到的图像
% wavename: 小波函数,如'db4''sym5'
% c: 低频系数、水平高频系数、垂直高频系数、对角高频系数组成的向量
% s: 低频系数、水平高频系数、垂直高频系数、对角高频系数的长度
  • appcoef2提取小波分解的低频系数
A = appcoef2(c, s, 'wavename', N);
% A: 低频系数
% wavename: 小波函数,如'db4''sym5'
% N: 级数
% c: 低频系数、水平高频系数、垂直高频系数、对角高频系数组成的向量
% s: 低频系数、水平高频系数、垂直高频系数、对角高频系数的长度
  • detcoef2提取小波分解的高频系数
[H,V,D] = detcoef2('all', c, s, N);
% A: 低频系数
% N: 级数
% H: 水平高频系数
% V: 垂直高频系数
% D: 对角高频系数

2. 基于小波变换的图像降噪(阈值法)

     基干阈值的降噪方法是 按一定的规则(或阈值化)将小波系数划分成两类∶重要
的、规则的小波系数和不重要的或受噪声干扰的小波系数,并舍弃不重要的小波系数然后重构去噪后的图像。
     常用的阈值函数有硬阈值和软阈值函数:

  • 硬阈值方法指的是设定阈值,小波系数绝对值大干阈值的保留,小干阈值的置零,这样可以很好地保留边缘等局部特征,但会出现失真现象;
  • 软阈值方法将较小的小波系数置零,较大的小波系数按一定的函数计算,向零收缩,其处理结果比硬阈值方法的结果平滑,但因绝对值较大的小波系数减小,会损失部分高频信息,造成图像边缘的失真模糊。

2.1 带有高斯噪声的图像去噪

%%
%小波去噪
clc, clear, close all;
Image = imread('peppers.jpg');
subplot(231),imshow(Image), title('原图');
noiseImageg = imnoise(Image, 'gaussian');    %添加高斯噪声
subplot(232),imshow(noiseImageg), title('添加高斯噪声的图像');
noiseImages = imnoise(Image, 'salt');   	 %添加椒盐噪声
subplot(233),imshow(noiseImages), title('添加椒盐噪声的图像');
[c, s] = wavedec2(noiseImageg,2,'sym5'); 	%2层小波分解
%函数自动生成小波消噪或压缩的阈值选取方案
%'den': 信号消噪; 'wv': 小波分解
%'cmp': 信号压缩; 'wp': 小波包分解
%thr: 函数选择的阈值,sorh: 阈值使用方式,Sorh=s为软阈值;Sorh=h为硬阈值
%keepapp: 是否对近似分量进行阈值处理。可选为01
[thr, sorh, keepapp] = ddencmp('den', 'wv', noiseImageg);
%函数wdencmp用于一维或二维信号的消噪或压缩
%'gbl': 表示每层采用同一个阈值进行处理
%'lvd': 表示每层采用不同的阈值进行处理
[denoiseI, cxc, lxc, perf0,perf12] = wdencmp('gbl',c,s,'sym5',2,thr, sorh, keepapp);    
subplot(234),imshow(denoiseI/255), title('降噪后的图像');
sigma = std(c);
thresh = 2*sigma;
csize = size(c);
c(find(abs(c)<thresh))=0;               %小波系数小于阈值则置零
noiseImage1 = uint8(waverec2(c,s,'sym5'));
subplot(235),imshow(noiseImage1), title('硬阈值降噪后的图像');
pos1 = find(c>thresh); c(pos1) = (pos1) - thresh;   %大系数向零收缩
pos2 = find(c<-thresh); c(pos2) = c(pos2) + thresh;
noiseImage2 = uint8(waverec2(c,s,'sym5'));
subplot(236),imshow(noiseImage2), title('软阈值降噪后的图像');

在这里插入图片描述

2.2 带有椒盐噪声的图像去噪

%%
%小波去噪
clc, clear, close all;
Image = imread('peppers.jpg');
subplot(231),imshow(Image), title('原图');
noiseImageg = imnoise(Image, 'gaussian');    %添加椒盐或高斯噪声
subplot(232),imshow(noiseImageg), title('添加高斯噪声的图像');
noiseImages = imnoise(Image, 'salt');    %添加椒盐或高斯噪声
subplot(233),imshow(noiseImages), title('添加椒盐噪声的图像');
[c, s] = wavedec2(noiseImages,2,'sym5'); %2层小波分解
%函数自动生成小波消噪或压缩的阈值选取方案
[thr, sorh, keepapp] = ddencmp('den', 'wv', noiseImages);
%函数wdencmp用于一维或二维信号的消噪或压缩
[denoiseI, cxc, lxc, perf0,perf12] = wdencmp('gbl',c,s,'sym5',2,thr, sorh, keepapp);    
subplot(234),imshow(denoiseI/255), title('降噪后的图像');
sigma = std(c);
thresh = 2*sigma;
csize = size(c);
c(find(abs(c)<thresh))=0;               %小波系数小于阈值则置零
noiseImage1 = uint8(waverec2(c,s,'sym5'));
subplot(235),imshow(noiseImage1), title('硬阈值降噪后的图像');
pos1 = find(c>thresh); c(pos1) = (pos1) - thresh;   %大系数向零收缩
pos2 = find(c<-thresh); c(pos2) = c(pos2) + thresh;
noiseImage2 = uint8(waverec2(c,s,'sym5'));
subplot(236),imshow(noiseImage2), title('软阈值降噪后的图像');

在这里插入图片描述

3. 基于小波变换的图像边缘检测

    图像边缘是指在图像平面中灰度值发生跳变的点连接所成的曲线段,包含了图像的重要信息。找出图像的边缘称为边缘检测,是图像处理中的重要内容。二维小波变换能检测二维函数 f ( x , y ) f(x, y) f(x,y)的局部突变,因此是检测图像边缘的有力工具。
    由于边缘突变对应高频信息,则对图像进行小波分解后,通过将低频系数置零并保留高频系数可以实现边缘检测。

clc,clear,close all;
Image = imread('peppers.jpg');
subplot(131),imshow(Image),title('原图');
[ca,ch,cv,cd] = dwt2(Image,'db4');
Image1 = idwt2(ca,ch*0,cv*0,cd*0,'db4')/256;	%高频置零
subplot(132),imshow(Image1),title('图像边缘检测—高频置零');
Image2 = idwt2(ca*0,ch,cv,cd,'db4')/256;		%低频置零
subplot(133),imshow(Image2),title('图像边缘检测—低频置零');

在这里插入图片描述

4. 基于小波变换的图像融合

    图像融合是将同一对象的两个或更多的图像合成在一幅图像中,使其比原来任何一幅图像更容易被人所理解。
    基于小波变换的图像融合是指将原图像进行小波分解;在小波域通过一定的融合算子融合小波系数,再重构生成融合的图像。
    小波变换可以将图像分解到不同的频域,在不同的频域运用不同的融合算法,得到合成图像的多分辨分解,从而在合成图像中保留原图像在不同频域的显著特征。

%%
%小波图像融合
clc,clear,close all;
Image1 = rgb2gray(imread('desert.jpg'));
Image2 = rgb2gray(imread('car.jpg'));
[ca1,ch1,cv1,cd1] = dwt2(Image1,'db4');
[ca2,ch2,cv2,cd2] = dwt2(Image2,'db4');
subplot(221),imshow(Image1),title('背景');
subplot(222),imshow(Image2),title('目标');
ca = (ca1+ca2)/2;		%低频取平均
ch = min(ch1,ch2);cv = min(cv1,cv2);cd = min(cd1,cd2);	%高频取最小
Image3 = idwt2(ca,ch,cv,cd,'db4')/256;
subplot(223),imshow(Image3),title('融合方式1');
ca = ca1+ca2;			%低频直接相加
ch = max(ch1,ch2);cv = max(cv1,cv2);cd = max(cd1,cd2);	%高频取最大
Image4 = idwt2(ca,ch,cv,cd,'db4')/256;
subplot(224),imshow(Image4),title('融合方式2');

在这里插入图片描述

  • 8
    点赞
  • 98
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值