그림 에 중간 값 필 터 를 사용 하 는 몇 가지 쓰기 및 정렬 한도 값 을 기반 으로 하 는 스위치 중간 값 필터 링 알고리즘

자신 이 작성 한 중간 값 필터 링 알고리즘 은 라 이브 러 리 함수 가 호출 한 중간 값 필터 링 알고리즘 psnr 값 과 같 기 때문에 걱정 하지 말고 안심 하고 호출 하 십시오.
다음 파일: 1: 자신 이 작성 한 중간 값 필터
2: 라 이브 러 리 함수 중간 값 필터
3: 극치 중간 값 알고리즘: 중심 픽 셀 은 창의 최대 값 이나 최소 값 과 같 습 니 다. 즉, 이 점 은 소음 점 일 가능성 이 높 고 중심 점 은 중간 값 으로 대체 합 니 다.
4: 정렬 한도 값 을 기반 으로 하 는 스위치 중간 값 필터 방법 (진 붕 등): 먼저 창 안의 모든 픽 셀 을 세 가지 유형 으로 나 눕 니 다. 1) 소음 점 2) 평탄 한 구역 3) 가장자리 디 테 일
5: 최대 중간 값 필터: 수평, 수직, 45 도, 135 도 방향 에서 각각 중간 값 을 취하 고 4 개 값 에 대해 최대 값 을 취한 다.
6: med (수평 중간 값, 90 ° 중간 값, 중심 점), 중심 점, med (수직, 135 °, 중심 점), 그리고 3 개 에 대해 중간 값 을 취한 다.
%commonfilt2_1.m
%         
function [y]=commonfilt2_1(x,N)
y=x;
k=floor(N/2);%           
k0=floor( (N*N)/2 )+1;
[m,n]=size(x);

for i=k+1:m-k
    for j=k+1:n-k
        z=x(i-k:i+k,j-k:j+k);
        z1=z(1:end);%  z      z1
        %a*a       
        for i1=1:1:(N^2-1)
            for j1=1:1:(N^2-i1)
                if z1(1,j1) > z1(1,j1+1)
                    z0=z1(1,j1);
                    z1(1,j1)=z1(1,j1+1);
                    z1(1,j1+1)=z0;
                end
            end
        end
        y(i,j)=z1(1,k0);%z1    
    end
end
%commonfilt2_2.m
%       
function [y]=commonfilt2_2(x,N)
y=x;
k=floor(N/2);%           
[m,n]=size(x);
for i=k+1:m-k
    for j=k+1:n-k
        z=x(i-k:i+k,j-k:j+k);
        y(i,j)=median(z(:));
    end
end
%commonfilt2_3.m
%      :                ,             ,          
function [y]=commonfilt2_3(x,N)
y=x;
k=floor(N/2);%           
[m,n]=size(x);
for i=k+1:m-k
    for j=k+1:n-k
        z=x(i-k:i+k,j-k:j+k);
        zmin=min(z(:));
        zmax=max(z(:));
        zmed=median(z(:));
        if  x(i,j) == zmin | x(i,j) == zmax
           y(i,j) = zmed;
        end
        %               ,   
    end
end
%commonfilt2_4.m
%               :             :1     2      3    
%                
function [y]=commonfilt2_4(x,N)
[m,n]=size(x);
y=x;
k=floor(N/2);%           
%       
a=5;b=7;
TA=20;TB=4;

for i=k+1:m-k
    for j=k+1:n-k
        z=x(i-k:i+k,j-k:j+k);
        z1=z(1:end);%   z      
        z1=sort(z1);%    z1  ,    ,1:N^2
        zmin=min(z(:));
        zmax=max(z(:));
        zmed=median(z(:));
        %               ,      
        %         ,      
        if x(i,j) == zmin
            if z1(1,1+a)-x(i,j) >= TA
               y(i,j) = zmed;
            else
               if abs( z1(1,1+b)-z1(1,N^2-b) )<= TB %   
                  y(i,j) = zmed;
                %           ,     
               end
            end
        end
       %         ,      
       if x(i,j) == zmax
            if x(i,j)-z1(1,N^2-a) >= TA
               y(i,j) = zmed;
            else
               if abs( z1(1,1+b)-z1(1,N^2-b) )<= TB %   
                  y(i,j) = zmed;
                %           ,     
               end
           end
       end
    end
end
%commonfilt2_5.m
%      :  、  、45°、135°       ,  4      
function [y]=commonfilt2_5(x,N)
y=x;
k=floor(N/2);%           
[m,n]=size(x);
for i=k+1:m-k
    for j=k+1:n-k
        %z=x(i-k:i+k,j-k:j+k);
        %y(i,j)=median(z(:));
        z1=zeros(1,2*k+1);
        z2=zeros(1,2*k+1);
        z3=zeros(1,2*k+1);
        z4=zeros(1,2*k+1);
        k1=1;k2=1;k3=1;k4=1;
        %     
          for i1=i;
            for j1=j-k:j+k
                z1(1,k1) = x(i1,j1);
                k1=k1+1;
            end
          end
        %     
        for j1=j;
            for i1=i-k:i+k
                z2(1,k2) = x(i1,j1);
                k2=k2+1;
            end
        end
        %45°  
        for i1=-k:k
            z3(1,k3) = x(i+i1,j+i1);
            k3=k3+1;
        end
        %135°  
        for i1=-k:k
            z3(1,k4) = x(i+i1,j-i1);
            k4=k4+1;
        end
        %        
        zmed1=median(z1);%    
        zmed2=median(z2);%    
        zmed3=median(z3);%45°  
        zmed4=median(z4);%135°  
        y(i,j)=max([zmed1,zmed2,zmed3,zmed4]);
    end
 end
%commonfilt2_6.m
%      
%med(    ,90°  ,   ) ,    ,med(  ,135°,   ),  3    
function [y]=commonfilt2_6(x,N)
y=x;
k=floor(N/2);%           
[m,n]=size(x);
for i=k+1:m-k
    for j=k+1:n-k
        %z=x(i-k:i+k,j-k:j+k);
        %y(i,j)=median(z(:));
        z1=zeros(1,2*k+1);
        z2=zeros(1,2*k+1);
        z3=zeros(1,2*k+1);
        z4=zeros(1,2*k+1);
        k1=1;k2=1;k3=1;k4=1;
        %     
        for i1=i;
            for j1=j-k:j+k
                z1(1,k1) = x(i1,j1);
                k1=k1+1;
            end
        end
        %     
        for j1=j;
            for i1=i-k:i+k
                z2(1,k2) = x(i1,j1);
                k2=k2+1;
            end
        end
        %45°  
        for i1=-k:k
            z3(1,k3) = x(i+i1,j+i1);
            k3=k3+1;
        end
        %135°  
        for i1=-k:k
            z3(1,k4) = x(i+i1,j-i1);
            k4=k4+1;
        end
        %        
        zmed1=median(z1);%    
        zmed2=median(z2);%    
        zmed3=median(z3);%45°  
        zmed4=median(z4);%135°  
        y(i,j)=median( [median( [x(i,j),zmed2,zmed1 ]),median( [x(i,j),zmed3,zmed4 ]),x(i,j) ]);
    end
end
I=imread('couple.png');
%I=rgb2gray(I);
J=imnoise(I,'salt & pepper',0.2);

k1=commonfilt2_1(J,5);%           
k2=commonfilt2_2(J,5);%         
k3=commonfilt2_3(J,5);%        
k4=commonfilt2_4(J,5);%        
%           ,            
%k4=commonfilt2_4(k4,5);%        
%k4=commonfilt2_4(k4,5);%        
%k4=commonfilt2_4(k4,5);%        
k5=commonfilt2_5(J,5);%       
k6=commonfilt2_6(J,5);%       

subplot(231),imshow( uint8(k1) ),title('         ');
subplot(232),imshow( uint8(k2)),title('       ');
subplot(233),imshow( uint8(k3)),title('        ');
subplot(234),imshow( uint8(k4)),title('             ');
subplot(235),imshow( uint8(k5)),title('       ');
subplot(236),imshow( uint8(k6)),title('       ');

%             
[e f]=size(I);
B=8;                %             
MAX=2^B-1;          %        

I=double(I);
k1=double(k1);
k2=double(k2);
k3=double(k3);
k4=double(k4);
k5=double(k5);
k6=double(k6);

%%%%%% psnr1=
MES1=sum(sum((I-k1).^2))/(e*f);     
PSNR1=20*log10(MAX/sqrt(MES1));          

%%%%%% psnr2=
MES2=sum(sum((I-k2).^2))/(e*f);    
PSNR2=20*log10(MAX/sqrt(MES2));

%%%%%% psnr3=
MES3=sum(sum((I-k3).^2))/(e*f);    
PSNR3=20*log10(MAX/sqrt(MES3));

%%%%%% psnr4=
MES4=sum(sum((I-k4).^2))/(e*f);    
PSNR4=20*log10(MAX/sqrt(MES4));

%%%%%% psnr5=
MES5=sum(sum((I-k5).^2))/(e*f);    
PSNR5=20*log10(MAX/sqrt(MES5));

%%%%%% psnr6=
MES6=sum(sum((I-k6).^2))/(e*f);    
PSNR6=20*log10(MAX/sqrt(MES6));

좋은 웹페이지 즐겨찾기