wspm.m

来自「信号处理波处理的小程序」· M 代码 · 共 62 行

M
62
字号
%基于小波收缩与非线性扩散的混合图像去噪算法
%低频用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 + =
减小字号Ctrl + -
显示快捷键?