📄 wspm.m
字号:
%基于小波收缩与非线性扩散的混合图像去噪算法
%低频用TV扩散,,高频用软阈值收缩
function A=WSTV(lena)
noised=lena;
H=fspecial('gaussian',3,0.4);
filter=imfilter(noised,H);
[row,col]=size(noised);
nimage=zeros(row,col);
k=100;
t=0.01;
%小波分解
[c,s]=wavedec2(noised,1,'haar');
CA=appcoef2(c,s,'haar',1); %提取低频
%估计噪声方差以计算阈值 Dohono的估计方法
th=(median(abs(c((row/2)*(row/2):row*row)))/0.6745)*sqrt(2*log(65536))/2;
CA=PMdiff(CA,2); %对低频信号进行扩散
%figure,imshow(uint8(CA))
%对高频进行收缩
for i=1:row/2
for j=1:row/2
c(j+(i-1)*row/2)=CA(j,i);
ch=c((row/2)*(row/2)+j+(i-1)*row/2);
if abs(ch)>th
c((row/2)*(row/2)+j+(i-1)*row/2)=ch-th*sign(ch);
else
c((row/2)*(row/2)+j+(i-1)*row/2)=0;
end
cv=c(2*(row/2)*(row/2)+j+(i-1)*row/2);
if abs(cv)>th
c(2*(row/2)*(row/2)+j+(i-1)*row/2)=cv-th*sign(cv);
else
c(2*(row/2)*(row/2)+j+(i-1)*row/2)=0;
end
cd=c(3*(row/2)*(row/2)+j+(i-1)*row/2);
if abs(cd)>th
c(3*(row/2)*(row/2)+j+(i-1)*row/2)=cd-th*sign(cd);
else
c(3*(row/2)*(row/2)+j+(i-1)*row/2)=0;
end
end
end
noised=waverec2(c,s,'haar');
A=uint8(noised);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -