小波變換去噪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自帶的函數可以實現多級分解,級數由編程者自己確定。
是的,是一樣的。