그림 에 중간 값 필 터 를 사용 하 는 몇 가지 쓰기 및 정렬 한도 값 을 기반 으로 하 는 스위치 중간 값 필터 링 알고리즘
6734 단어 이미지 처리 문헌 및 코드
다음 파일: 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));