小波变换去噪matlab程序
① 求小波变换图像降噪的matlab代码
%源代码来自于在《MATLAB环境下基于小波变换的图像去噪》刘智clear;clc % 清理工作空间
load wbarb; % 装载原始图像
subplot(221); % 新建窗口
image(X); % 显示图像
colormap(map); % 设置色彩索引图
title('原始图像'); % 设置图像标题
axis square; % 设置显示比例,生成含噪图像并图示
init=2055615866; % 初始值
randn('seed',init); % 随机值
XX=X+8*randn(size(X)); % 添加随机噪声
subplot(222); % 新建窗口
image(XX); % 显示图像
colormap(map); % 设置色彩索引图
title('含噪图像'); % 设置图像标题
axis square; %用小波函数coif2 对图像XX 进行2 层分解
[c,l]=wavedec2(XX,2,'coif2'); % 分解
n=[1,2]; % 设置尺度向量
p=[10.28,24.08]; % 设置阈值向量,对高频小波系数进行阈值处理
%nc=wthcoef2('h',c,l,n,p,'s');
%nc=wthcoef2('v',c,l,n,p,'s');
nc=wthcoef2('d',c,l,n,p,'s');
X1=waverec2(nc,l,'coif2'); % 图像的二维小波重构
subplot(223); % 新建窗口
image(X1); % 显示图像
colormap(map); %设置色彩索引图
title('第一次消噪后的图像'); % 设置图像标题
axis square; % 设置显示比例,再次对高频小波系数进行阈值处理
%mc=wthcoef2('h',nc,l,n,p,'s');mc=wthcoef2('v',nc,l,n,p,'s');
mc=wthcoef2('d',nc,l,n,p,'s');
X2=waverec2(mc,l,'coif2'); % 图像的二维小波重构
subplot(224); % 新建窗口
image(X2); % 显示图像
colormap(map); % 设置色彩索引图
title('第二次消噪后的图像'); % 设置图像标题
axis square; % 设置显示比例
② matlab怎么用小波包进行图像去噪
小波图像去噪的方法大概分为3类
1:基于小波变换摸极大值原理
2:基于小波变换系数的相关性
3:基于小波阈值的去噪。
基于小波阈值的去噪方法3个步骤:
1: 计算含噪声图像的小波变换。选择合适的小波基和小波分解层数J,运用Matlab 分解算法将含有噪声图像进行J层小波分解,得到相应的小波分解系数。
2:对分解后的高频系数进行阈值量化,对于从1 到J的每一层,选择一个适当的阈值和合适的阈值函数,将分解得到的高频系数进行阈值量化,得到估计小波系数。
3:进行小波逆变化,根据图像小波分解后的第J层,低频 系数(尺度系数)和经过阈值量化处理的各层高频系数(小波系数),运用Matlab重构算法进行小波重构,得到去噪后的图像。
③ 有小波变换图像去噪的Matlab代码吗,大神
matlab官方社区有这类共享的常用算法代码
④ 怎样用matlab对一幅图像利用小波变换降噪和边缘检测
就用matlab就可以了
⑤ 小波变换法图像去除高斯噪声椒盐噪声的matlab代码
I=imread('**.bmp');
I=rgb2gray(I);
J=imnoise(I,'salt&pepper',0.02);
subplot(231),imshow(I);title('原图像');
subplot(232),imshow(J);title('添加椒盐噪声图像');
k3=medfilt2(J,[7,7]); %进行7*7模板中值滤波
subplot(235),imshow(k3);title('7*7模板中值滤波');
⑥ 二维小波变换去噪的matlab程序
程序是下面这样,但只能处理长宽一样的方形图像,灰度和彩色图像都可,要用其他图像只需把Lena.bmp改为其他图像,但图像要保存在m文件所在路径下。下面还有一个运行后的图像(之一),希望能对你有所帮助。
clear;clc;
%%%%%%%%%%测试图像只能是方形图像,长宽像素一样。
f=imread('Lena.bmp');%%读取图像数据,图像只能保存在m文件所在的路径下
d=size(f);
if length(d)>2
f=rgb2gray((f));%%%%%%%%如果是彩色图像则转化为灰度图
end
T=d(1);
SUB_T=T/2;
% 2.进行二维小波分解
l=wfilters('db10','l'); % db10(消失矩为10)低通分解滤波器冲击响应(长度为20)
L=T-length(l);
l_zeros=[l,zeros(1,L)]; % 矩阵行数与输入图像一致,为2的整数幂
h=wfilters('db10','h'); % db10(消失矩为10)高通分解滤波器冲击响应(长度为20)
h_zeros=[h,zeros(1,L)]; % 矩阵行数与输入图像一致,为2的整数幂
for i=1:T; % 列变换
row(1:SUB_T,i)=dyaddown( ifft( fft(l_zeros).*fft(f(:,i)') ) ).'; % 圆周卷积<->FFT
row(SUB_T+1:T,i)=dyaddown( ifft( fft(h_zeros).*fft(f(:,i)') ) ).'; % 圆周卷积<->FFT
end;
for j=1:T; % 行变换
line(j,1:SUB_T)=dyaddown( ifft( fft(l_zeros).*fft(row(j,:)) ) ); % 圆周卷积<->FFT
line(j,SUB_T+1:T)=dyaddown( ifft( fft(h_zeros).*fft(row(j,:)) ) ); % 圆周卷积<->FFT
end;
decompose_pic=line; % 分解矩阵
% 图像分为四块
lt_pic=decompose_pic(1:SUB_T,1:SUB_T); % 在矩阵左上方为低频分量--fi(x)*fi(y)
rt_pic=decompose_pic(1:SUB_T,SUB_T+1:T); % 矩阵右上为--fi(x)*psi(y)
lb_pic=decompose_pic(SUB_T+1:T,1:SUB_T); % 矩阵左下为--psi(x)*fi(y)
rb_pic=decompose_pic(SUB_T+1:T,SUB_T+1:T); % 右下方为高频分量--psi(x)*psi(y)
% 3.分解结果显示
figure(1);
subplot(2,1,1);
imshow(f,[]); % 原始图像
title('original pic');
subplot(2,1,2);
image(abs(decompose_pic)); % 分解后图像
title('decomposed pic');
figure(2);
% colormap(map);
subplot(2,2,1);
imshow(abs(lt_pic),[]); % 左上方为低频分量--fi(x)*fi(y)
title('\Phi(x)*\Phi(y)');
subplot(2,2,2);
imshow(abs(rt_pic),[]); % 矩阵右上为--fi(x)*psi(y)
title('\Phi(x)*\Psi(y)');
subplot(2,2,3);
imshow(abs(lb_pic),[]); % 矩阵左下为--psi(x)*fi(y)
title('\Psi(x)*\Phi(y)');
subplot(2,2,4);
imshow(abs(rb_pic),[]); % 右下方为高频分量--psi(x)*psi(y)
title('\Psi(x)*\Psi(y)');
% 5.重构源图像及结果显示
% construct_pic=decompose_matrix'*decompose_pic*decompose_matrix;
l_re=l_zeros(end:-1:1); % 重构低通滤波
l_r=circshift(l_re',1)'; % 位置调整
h_re=h_zeros(end:-1:1); % 重构高通滤波
h_r=circshift(h_re',1)'; % 位置调整
top_pic=[lt_pic,rt_pic]; % 图像上半部分
t=0;
for i=1:T; % 行插值低频
if (mod(i,2)==0)
topll(i,:)=top_pic(t,:); % 偶数行保持
else
t=t+1;
topll(i,:)=zeros(1,T); % 奇数行为零
end
end;
for i=1:T; % 列变换
topcl_re(:,i)=ifft( fft(l_r).*fft(topll(:,i)') )'; % 圆周卷积<->FFT
end;
bottom_pic=[lb_pic,rb_pic]; % 图像下半部分
t=0;
for i=1:T; % 行插值高频
if (mod(i,2)==0)
bottomlh(i,:)=bottom_pic(t,:); % 偶数行保持
else
bottomlh(i,:)=zeros(1,T); % 奇数行为零
t=t+1;
end
end
这个只是一级分解,matlab自带的函数可以实现多级分解,级数由编程者自己确定。
是的,是一样的。