Результат применения медиального фильтра Листинги разработанной программы
Основная тестирующая программа
Программа для виртуальной базы
DB = 'D:\TEMP\BIO_ME\';
K = 10;
N = 4;
figure:clf;
for i=1:K
for j=1:N
IM = imread([DB,num2str(i),'/',num2str(j),'.bmp']);
im = imresize(IM,[35,35]);
Mhsv = alx_filter(alx_hsv(im,35,35));
Mycbcr = alx_filter(alx_ycbcr(im,35,35));
Mi1i2i3 = alx_filter(alx_i1i2i3(im,35,35));
Mneg = alx_filter(alx_neg(im));
subplot(2,3,1);
imshow(im);
title('Origin compressed image');
subplot(2,3,2);
imshow(Mhsv);
title('HSV mask');
subplot(2,3,3);
imshow(Mycbcr);
title('YCbCr mask');
subplot(2,3,5);
imshow(Mi1i2i3);
title('I1I2I3 mask');
subplot(2,3,6);
imshow(Mneg);
title('Negative mask');
pause();
end
end
Программа для реальной базы
DB = 'D:\TEMP\ME\';
N = 40;
figure:clf;
for j=1:N
IM = imread([DB,num2str(j),'.JPG']);
im = imresize(IM,[48,64]);
Mhsv = alx_filter(alx_hsv(im,64,48));
Mycbcr = alx_filter(alx_ycbcr(im,64,48));
Mi1i2i3 = alx_filter(alx_i1i2i3(im,64,48));
Mneg = alx_filter(alx_neg(im));
subplot(2,3,1);
imshow(im);
title('Origin compressed image');
subplot(2,3,2);
imshow(Mhsv);
title('HSV mask');
subplot(2,3,3);
imshow(Mycbcr);
title('YCbCr mask');
subplot(2,3,5);
imshow(Mi1i2i3);
title('I1I2I3 mask');
subplot(2,3,6);
imshow(Mneg );
title('Negative mask');
pause();
end
Функция фильтра
% ALX | Alexander Volkov
% author : Alexander Volkov
% creation date : 21.10.07
% last code update : 12.11.07
% last documentation update : 21.10.07
% FACE DETACTION
% course work : negative VS world
%
% -= FILTER =-
function MASK = alx_filter(M)
%----------Parameters-----------
%--------------------------------
MASK = medfilt2(M);
% -=/FILTER =-
Функция HSV маски
% ALX | Alexander Volkov
% author : Alexander Volkov
% creation date : 09.10.07
% last code update : 11.11.07
% last documentation update : 09.10.07
% FACE DETACTION
% course work : negative VS world
%
% -= HSV =-
function MASK = alx_hsv(im,m,n)
%----------Parameters-----------
hmin=0.10; hmax=0.90; % less than | more than
smin=0.23; smax=0.68; % from | to
vmin=0.60; vmax=1.00; % from | to
%--------------------------------
IM_HSV = rgb2hsv(im); % IM_HSV is im image in HSV
%---- H ----%
H=IM_HSV(:,:,1);
ZH=zeros(n,m);
dd=find(H<=hmin | H>=hmax);
ZH(dd)=ones(size(dd));
%---- /H ----%
%---- S ----%
S=IM_HSV(:,:,2);
ZS=zeros(n,m);
dd=find(S>=smin & S<=smax);
ZS(dd)=ones(size(dd));
%---- /S ----%
%---- V ----%
V=IM_HSV(:,:,3);
ZV=zeros(n,m);
dd=find(V>=vmin & V<=vmax);
ZV(dd)=ones(size(dd));
%---- /V ----%
MASK=ZH.*ZS.*ZV; % HSV mask
% -=/HSV =-
Функция YCbCr маски
% ALX | Alexander Volkov
% author : Alexander Volkov
% creation date : 09.10.07
% last code update : 11.11.07
% last documentation update : 09.10.07
% FACE DETACTION
% course work : negative VS world
%
% -= YCbCr =-
function MASK = alx_ycbcr(im,m,n)
%----------Parameters-----------
crmin=138;crmax=178; % from | to
crbmin=199;crbmax=215; % from | to
%--------------------------------
IM_YCbCr = rgb2ycbcr(im); % IM_YCbCr is im image in YCbCr
%---- Cr ----%
Cr=IM_YCbCr(:,:,3);
ZCr=zeros(n,m);
dd=find(Cr<=crmax & Cr>=crmin);
ZCr(dd)=ones(size(dd));
%---- /Cr ----%
%---- Cb ----%
Cb=IM_YCbCr(:,:,2);
ZCb=zeros(n,m);
Cb = Cb+0.6*Cr;
dd=find(Cb<=crbmax & Cb>=crbmin);
ZCb(dd)=ones(size(dd));
%---- /Cb ----%
MASK = ZCb.*ZCr; % CbCr mask
% -=/YCbCr =-
Функция I1 I2 I3 маски
% ALX | Alexander Volkov
% author : Alexander Volkov
% creation date : 09.10.07
% last code update : 11.11.07
% last documentation update : 09.10.07
% FACE DETACTION
% course work : negative VS world
%
% -= I1I2I3 =-
function MASK = alx_i1i2i3(im,m,n)
%----------Parameters-----------
i2min=45;i2max=75; % from | to
%--------------------------------
%---- r g b to i1 i2 i3
r = im(:,:,1);
g = im(:,:,2);
b = im(:,:,3);
i1 = (r+b+g)/3;
i2 = (r-b);
i3 = (2*g-r-b)/2;
%---- end rgb->i1i2i3
IM_I1I2I3(:,:,1) = i1 ; %
IM_I1I2I3(:,:,2) = i2 ; % IM_I1I2I3 is im image in I1I2I3
IM_I1I2I3(:,:,3) = i3 ; %
%---- I2 ----%
ZI2 = zeros(n,m);
dd=find(i2<=75 & i2>=45);
ZI2(dd)=ones(size(dd));
%---- /I2 ----%
MASK = ZI2; % I2 mask
% -=/I1I2I3 =-
Пример функции выравнивания цвета (перевод цвета к одинаковому затемнению) [3]
% ALX | Alexander Volkov
% author : Alexander Volkov
% creation date : 02.12.07
% last code update : 11.12.07
% last documentation update : 02.12.07
% FACE DETACTION
% course work : negative VS world
%
% -= LIGHT =-
function G = alx_light(M)
%----------Parameters-----------
%--------------------------------
m = mean(M(:));
if(m>50 & m<100)
M=M-50;
end;
if(m>100 & m<150)
M=M-100;
end;
if(m>150 & m<200)
M=M-150;
end;
if(m>200 & m<250)
M=M-200;
end;
G = M;
% -=/LIGHT =-
Функция инверсной маски
% ALX | Alexander Volkov
% author : Alexander Volkov
% creation date : 09.10.07
% last code update : 11.11.07
% last documentation update : 09.10.07
% FACE DETACTION
% course work : negative VS world
%
% -= NEGATIVE =-
function MASK = alx_neg(im)
%----------Parameters-----------
%--------------------------------
%---- r g b to negative r g b
R=im(:,:,1);
G=im(:,:,2);
B=im(:,:,3);
R1 = 255-R;
G1 = 255-G;
B1 = 255-B;
%----
IM_NEGATIVE(:,:,1) = R1; %
IM_NEGATIVE(:,:,2) = G1; % IM_NEGATIVE is im image in negative
IM_NEGATIVE(:,:,3) = B1; %
MASK1 = zeros(size(R1));
dd = find(R1>0);
MASK1(dd)=ones(size(dd));
MASK2 = zeros(size(R1));
dd = find(G1>160 &G1<230);
MASK2(dd)=ones(size(dd));
MASK3 = zeros(size(R1));
dd = find(B1>160);
MASK3(dd)=ones(size(dd));
MASK = MASK1.*MASK2.*MASK3; % NEGATIVE mask
% -=/NEGATIVE =-