matlab中使用小波变换进行图像去噪
2017-12-17 16:04
302 查看
小波图像去噪的方法大概分为3类
1:基于小波变换摸极大值原理
2:基于小波变换系数的相关性
3:基于小波阈值的去噪。
基于小波阈值的去噪方法3个步骤:
1: 计算含噪声图像的小波变换。选择合适的小波基和小波分解层数J,运用Matlab 分解算法将含有噪声图像进行J层小波分解,得到相应的小波分解系数。
2:对分解后的高频系数进行阈值量化,对于从1 到J的每一层,选择一个适当的阈值和合适的阈值函数,将分解得到的高频系数进行阈值量化,得到估计小波系数。
3:进行小波逆变化,根据图像小波分解后的第J层,低频 系数(尺度系数)和经过阈值量化处理的各层高频系数(小波系数),运用Matlab重构算法进行小波重构,得到去噪后的图像。
相关函数:
Talk is simple,Show me the code!
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clear;
[X,map]=imread('lena.BMP');
%X=rgb2gray(X);
figure(1);
set(gcf,'Position',[0,0,512,512])
set(gca,'position',[0 0 1 1])
imshow(X);
%title('原始图像');
% 生成含噪图像并图示
init=2055615866;
randn('seed',init);
X=double(X);
% 添加随机噪声
XX=X+8*randn(size(X));
figure(2) ;
set(gcf,'Position',[0,0,512,512]);
set(gca,'position',[0 0 1 1]) ;
imshow(uint8(XX));
%title(' 含噪图像 ');
%用小波函数coif2对图像XX进行2层
% 分解
[c,l]=wavedec2(XX,2,'coif2');
a2 = wrcoef2('a',c,l,'coif2',2); % 重构第2层图像的近似系数
n=[1,2]; % 设置尺度向量
p=[10.28,24.08];% 设置阈值向量
nc=wthcoef2('h',c,l,n,p,'s'); %对高频小波系数进行阈值处理
% 图像的二维小波重构
X1=waverec2(nc,l,'coif2'); %图像的二维小波重构
figure(3) ; % 显示图像处理之后的结果
set(gcf,'Position',[0,0,512,512]);
set(gca,'position',[0 0 1 1]);
imshow(uint8(X1));
%title(' 第一次消噪后的图像 ');
mc=wthcoef2('v',nc,l,n,p,'s'); %再次对高频小波系数进行阈值处理
% 图像的二维小波重构
X2=waverec2(mc,l,'coif2');
figure(4);
set(gcf,'Position',[0,0,512,512]);
set(gca,'position',[0 0 1 1]);
imshow(uint8(X2));
%title(' 第二次消噪后的图像 ');
figure(5);
colormap(map);
set(gcf,'Position',[0,0,512,512]);
set(gca,'position',[0 0 1 1]);
image(uint8(a2));
%title('原图经过两次低通滤波后的结果')
%信噪比
Ps =sum(sum((X-mean(mean(X))).^2));
Pn =sum(sum((X2-X).^2));
SNR1 = 10*log10(Ps/Pn);
Pn1 = sum(sum(a2-X).^2);
SNR2 = 10*log10(Ps/Pn1);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
上面提供了两种方法,一种是基于小波分解,即先利用函数wavedec2()对图像进行2层小波分解,再利用函数wrcoef()直接提取第二层的近似系数a2,根据小波分解的滤波器特性,a2即 是原图像经过两次低通滤波后的结果。
第二种是基于小波阈值去噪,利用wthcoef2()对图像进行两次高频系数进行阈值去噪,再通过waverec2()实现图像的重构。
根据SNR结果,和图片去噪画面可知道小波阈值去噪的结果会更好点。
此外使用不同的母小波进行小波阈值去噪,也能得到不同的去噪效果。
1:基于小波变换摸极大值原理
2:基于小波变换系数的相关性
3:基于小波阈值的去噪。
基于小波阈值的去噪方法3个步骤:
1: 计算含噪声图像的小波变换。选择合适的小波基和小波分解层数J,运用Matlab 分解算法将含有噪声图像进行J层小波分解,得到相应的小波分解系数。
2:对分解后的高频系数进行阈值量化,对于从1 到J的每一层,选择一个适当的阈值和合适的阈值函数,将分解得到的高频系数进行阈值量化,得到估计小波系数。
3:进行小波逆变化,根据图像小波分解后的第J层,低频 系数(尺度系数)和经过阈值量化处理的各层高频系数(小波系数),运用Matlab重构算法进行小波重构,得到去噪后的图像。
相关函数:
wavedec-----就是小波分解,将一个信号分解成指定层数n,并返回各层的小波系数。 waverec——它的作用与wavedec相反,即将给定的小波系数一次性完全重建出信号。 wrcoef——这个也是输入小波系数,重建信号,但是它与上面有些区别,区别在于它重建的是原信号在指定层次的,高频或者低频分量。 也就是说,这个信号不是原本的信号,而且某个层次上的逼近。
Talk is simple,Show me the code!
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clear;
[X,map]=imread('lena.BMP');
%X=rgb2gray(X);
figure(1);
set(gcf,'Position',[0,0,512,512])
set(gca,'position',[0 0 1 1])
imshow(X);
%title('原始图像');
% 生成含噪图像并图示
init=2055615866;
randn('seed',init);
X=double(X);
% 添加随机噪声
XX=X+8*randn(size(X));
figure(2) ;
set(gcf,'Position',[0,0,512,512]);
set(gca,'position',[0 0 1 1]) ;
imshow(uint8(XX));
%title(' 含噪图像 ');
%用小波函数coif2对图像XX进行2层
% 分解
[c,l]=wavedec2(XX,2,'coif2');
a2 = wrcoef2('a',c,l,'coif2',2); % 重构第2层图像的近似系数
n=[1,2]; % 设置尺度向量
p=[10.28,24.08];% 设置阈值向量
nc=wthcoef2('h',c,l,n,p,'s'); %对高频小波系数进行阈值处理
% 图像的二维小波重构
X1=waverec2(nc,l,'coif2'); %图像的二维小波重构
figure(3) ; % 显示图像处理之后的结果
set(gcf,'Position',[0,0,512,512]);
set(gca,'position',[0 0 1 1]);
imshow(uint8(X1));
%title(' 第一次消噪后的图像 ');
mc=wthcoef2('v',nc,l,n,p,'s'); %再次对高频小波系数进行阈值处理
% 图像的二维小波重构
X2=waverec2(mc,l,'coif2');
figure(4);
set(gcf,'Position',[0,0,512,512]);
set(gca,'position',[0 0 1 1]);
imshow(uint8(X2));
%title(' 第二次消噪后的图像 ');
figure(5);
colormap(map);
set(gcf,'Position',[0,0,512,512]);
set(gca,'position',[0 0 1 1]);
image(uint8(a2));
%title('原图经过两次低通滤波后的结果')
%信噪比
Ps =sum(sum((X-mean(mean(X))).^2));
Pn =sum(sum((X2-X).^2));
SNR1 = 10*log10(Ps/Pn);
Pn1 = sum(sum(a2-X).^2);
SNR2 = 10*log10(Ps/Pn1);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
上面提供了两种方法,一种是基于小波分解,即先利用函数wavedec2()对图像进行2层小波分解,再利用函数wrcoef()直接提取第二层的近似系数a2,根据小波分解的滤波器特性,a2即 是原图像经过两次低通滤波后的结果。
第二种是基于小波阈值去噪,利用wthcoef2()对图像进行两次高频系数进行阈值去噪,再通过waverec2()实现图像的重构。
根据SNR结果,和图片去噪画面可知道小波阈值去噪的结果会更好点。
此外使用不同的母小波进行小波阈值去噪,也能得到不同的去噪效果。
相关文章推荐
- matlab使用小波变换进行图像融合
- 使用matlab对图像进行二值化和灰度化处理
- 简述:MATLAB中使用Laplace算子对彩色图像进行边缘检测的方法
- 使用Matlab进行图像处理
- 如何使用MATLAB对图像进行批量的修改名称的处理
- 使用Matlab进行图像处理
- 使用matlab对图像进行缩放
- 使用Matlab进行图像的读写、显示和缩放(最近临插值和双线性内插值法)
- 使用matlab对图像进行傅里叶变换
- 使用python进行图像处理-调整图片大小
- matlab2012b 小波变换工具箱的使用(一)工具箱打开及一维小波的显示与系数提取
- matlab 对一个文件夹里的所有图像进行批量旋转90度并保存
- 使用matlab中的powergui对采集的数据进行谐波分析#实验日记#
- Mac 10.11.6 让Matlab2014b 使用Xcode8.1进行mex编译的方法
- 使用roberts Prewitt Sobel 三种算子对raw格式图像进行边缘检测
- 使用CloudSight API进行图像识别的Python脚本
- 使用Matlab显示OV5642输入的Raw Bayer图像
- C++builder 使用cximage对图像文件进行操作
- MATLAB bulider for JAVA 使用TOMCAT 进行远程部署
- matlab 关于利用深度学习进行图像识别