Hướng phát triển đề tài

Một phần của tài liệu DÒ TÌM VÀ CẮT ẢNH MẶT NGƯỜI DÙNG PCA (Trang 96 - 115)

- Nhận diện mặt người qua tập dữ liệu có sẵn từ camera. - Nhận diện danh tính của người phạm tội qua ảnh chụp.

- Có thể kết hợp với nhiều thuật toán khác như: ICA, Neural,… để xử lý một cách chính xác hơn.

- Dò tìm và nhận dạng đối tượng vi phạm kỷ luật từ xa qua một thiết bị quan sát.

- Bảo mật hệ thống bằng cách nhận dạng khuôn mặt khi một hay nhiều đối tượng muốn ra vào một công ty, xí nghiệp, hay một cơ quan nào đó.

- Quản lý thời gian làm việc của các nhân viên của một xí nghiệp mà chỉ cần một camera quan sát.

Tài Liu Tham Kho

[1]. Ngô Hoàng Khắc Tiến, Trần Xuân Bách, Đồ án tốt nghiệp Dò tìm ảnh mặt người dùng PCA, Khoa Công nghệ điện tử, trường Đại học Công Nghiệp TP HCM, 2009.

[2]. Lương Mạnh Bá, Nguyễn Thanh Thủy, Nhập Môn Xử lý ảnh số, Nxb Khoa học và Kỹ thuật, 2002.

[3]. Võ Đức Khánh, Hoàng Văn Kiếm. Giáo trình xử lý ảnh số, Nhà xuất bản Đại học Quốc gia Thành phố Hồ Chi Minh, 2003.

[4]. Phạm Thế Bảo, Tổng quan các phương pháp xác định khuôn mặt người, Tạp chí bưu chính viễn thông.

[5]. Ngô Quốc Tạo, Ngô Phương Đông, Nguyễn Thanh Hòa, Phạm Việt Bình (2003), Báo cáo “Nhận dạng mặt người trong môi trường độ sáng không đồng nhất”, Hội thảo Công nghệ thông tin quốc gia lần thứ VIII, Thái Nguyên, 29- 31/8/2003.

[6]. Nguyễn Hoài Sơn, Giáo trình Matlab căn bản, Khoa Xây dựng và Cơ học ứng dụng, trường ĐHSPKT.

[7]. Burce A. Draper, Kyungim Baek, Marian Stewart Bartlett, J. Ross Beveridge,

“Recognizing Faces with PCA and ICA”.

[8]. Stan Z. Li , Anil K. Jain, “Handbook of Face Recognition”, 2006.

[9]. IEEE Computer Society, “Automatic face and gesture recognition”, 2004 [10]. Các Wedsite:

http://www.mathworks.com/matlabcentral/fileexchange/?term=Variable http://www.picvietnam.com/forum//showthread.php?t=387

www. diendandientu. com www. dientuvienthong. net

GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu

PHỤ LỤC

************ Chương trình chính***************

function varargout = luanvantotnghiep(varargin)

% LUANVANTOTNGHIEP M-file for luanvantotnghiep.fig

gui_Singleton = 1;

gui_State = struct('gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ...

'gui_OpeningFcn', @luanvantotnghiep_OpeningFcn, ... 'gui_OutputFcn', @luanvantotnghiep_OutputFcn, ... 'gui_LayoutFcn', [] , ...

'gui_Callback', []); if nargin && ischar(varargin{1})

gui_State.gui_Callback = str2func(varargin{1}); end

if nargout

[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); else

gui_mainfcn(gui_State, varargin{:}); end

% End initialization code - DO NOT EDIT

% Executes just before luanvantotnghiep is made visible.

function luanvantotnghiep_OpeningFcn(hObject, eventdata, handles, varargin) handles.output = hObject;

% Update handles structure

guidata(hObject, handles);

function varargout = luanvantotnghiep_OutputFcn(hObject, eventdata, handles) varargout{1} = handles.output;

function THOAT_Callback(hObject, eventdata, handles) close1;

% --- Executes on button press in pushbutton6.

function pushbutton6_Callback(hObject, eventdata, handles) chuongtrinh1;

delete(handles.figure1);

% --- Executes during object creation, after setting all properties.

function axes1_CreateFcn(hObject, eventdata, handles) imshow('anhnen.jpg');

% --- Executes during object creation, after setting all properties.

function axes3_CreateFcn(hObject, eventdata, handles) imshow('vo.jpg');

% --- Executes during object creation, after setting all properties.

GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu

imshow('logo.bmp');

****************************************************

**************Chương trình cắt ảnh tĩnh*********

function varargout = chuongtrinh1(varargin) gui_Singleton = 1;

gui_State = struct('gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ...

'gui_OpeningFcn', @chuongtrinh1_OpeningFcn, ... 'gui_OutputFcn', @chuongtrinh1_OutputFcn, ... 'gui_LayoutFcn', [] , ...

'gui_Callback', []); if nargin && ischar(varargin{1})

gui_State.gui_Callback = str2func(varargin{1}); end

if nargout

[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); else

gui_mainfcn(gui_State, varargin{:}); end

% --- Executes just before chuongtrinh1 is made visible.

function chuongtrinh1_OpeningFcn(hObject, eventdata, handles, varargin) handles.output = hObject;

% Update handles structure

guidata(hObject, handles);

% --- Outputs from this function are returned to the command line.

function varargout = chuongtrinh1_OutputFcn(hObject, eventdata, handles) varargout{1} = handles.output;

% --- Executes on button press in CHONANH.

function CHONANH_Callback(hObject, eventdata, handles) xoaanh;

chonanh;

% --- Executes on button press in TACHMAT.

function TACHMAT_Callback(hObject, eventdata, handles) axes(handles.axes4); imshow('anhluu/anh1.jpg'); axes(handles.axes5); imshow('anhluu/anh2.jpg'); axes(handles.axes6); imshow('anhluu/anh3.jpg'); axes(handles.axes7); imshow('anhluu/anh4.jpg');

% --- Executes on button press in Timmat.

function Timmat_Callback(hObject, eventdata, handles)

tic % tic là hàm đếm thời gian bắt đầu đếm

thuchien; % gọi hàm thuchien.m

axes(handles.axes2);

imshow('anhluu/anh_kq.jpg'); %hiện ảnh kết quả

GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu

% --- Executes on button press in NHANDANG.

function NHANDANG_Callback(hObject, eventdata, handles) tic

nhandang;

set(handles.times,'string',toc);

% --- Executes on button press in save1.

function save1_Callback(hObject, eventdata, handles) s=imread('anhluu/anh1.jpg');

save1;

% --- Executes on button press in save2.

function save2_Callback(hObject, eventdata, handles) s=imread('anhluu/anh2.jpg');

save1;

% --- Executes on button press in save3.

function save3_Callback(hObject, eventdata, handles) s=imread('anhluu/anh3.jpg');

save1;

% --- Executes on button press in save4.

function save4_Callback(hObject, eventdata, handles) s=imread('anhluu/anh4.jpg');

save1;

% --- Executes on button press in chon1.

function chon1_Callback(hObject, eventdata, handles) if (get(hObject,'Value') == get(hObject,'Max')) photo=imread('anhluu\anh1.jpg'); a = strcat('anhluu/anhtest.jpg'); imwrite(photo,a); set(handles.ten,'string',' '); set(handles.ns,'string',' '); set(handles.mssv,'string',' '); set(handles.lop,'string',' '); set(handles.quequan,'string',' '); end

% --- Executes on button press in chon2.

function chon2_Callback(hObject, eventdata, handles) if (get(hObject,'Value') == get(hObject,'Max')) photo=imread('anhluu\anh2.jpg'); a = strcat('anhluu/anhtest.jpg'); imwrite(photo,a); set(handles.ten,'string',' '); set(handles.ns,'string',' '); set(handles.mssv,'string',' '); set(handles.lop,'string',' '); set(handles.quequan,'string',' '); end

% --- Executes on button press in chon3.

function chon3_Callback(hObject, eventdata, handles) if (get(hObject,'Value') == get(hObject,'Max')) photo=imread('anhluu\anh3.jpg');

GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu imwrite(photo,a); set(handles.ten,'string',' '); set(handles.ns,'string',' '); set(handles.mssv,'string',' '); set(handles.lop,'string',' '); set(handles.quequan,'string',' '); end

% --- Executes on button press in chon4.

function chon4_Callback(hObject, eventdata, handles) if (get(hObject,'Value') == get(hObject,'Max')) photo=imread('anhluu\anh4.jpg'); a = strcat('anhluu/anhtest.jpg'); imwrite(photo,a); set(handles.ten,'string',' '); set(handles.ns,'string',' '); set(handles.mssv,'string',' '); set(handles.lop,'string',' '); set(handles.quequan,'string',' '); end

% --- Executes on button press in back.

function back_Callback(hObject, eventdata, handles) xoaanh;

luanvantotnghiep; delete(handles.figure1);

% --- Executes on button press in close.

function close_Callback(hObject, eventdata, handles) xoaanh;

luanvantotnghiep; delete(handles.figure1);

% --- Executes on button press in next.

function next_Callback(hObject, eventdata, handles) xoaanh; chuongtrinh2; delete(handles.figure1); **************************************************** **********Chương trình cắt ảnh động****************

function varargout = chuongtrinh2(varargin) gui_Singleton = 1;

gui_State = struct('gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ...

'gui_OpeningFcn', @chuongtrinh2_OpeningFcn, ... 'gui_OutputFcn', @chuongtrinh2_OutputFcn, ... 'gui_LayoutFcn', [] , ...

'gui_Callback', []); if nargin && ischar(varargin{1})

gui_State.gui_Callback = str2func(varargin{1}); end

if nargout

[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); else

GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu

end

% End initialization code - DO NOT EDIT

% --- Executes just before chuongtrinh2 is made visible.

function chuongtrinh2_OpeningFcn(hObject, eventdata, handles, varargin) handles.output = hObject;

% Update handles structure

guidata(hObject, handles);

% --- Outputs from this function are returned to the command line.

function varargout = chuongtrinh2_OutputFcn(hObject, eventdata, handles) varargout{1} = handles.output;

% --- Executes on button press in chupanh.

function chupanh_Callback(hObject, eventdata, handles) xoaanh;

global vid photo a photo = getsnapshot(vid);

selection = questdlg(['Ban muon chup anh gan hay xa?'],... ['Chuong trinh chup anh!'],...

'Gan','Xa','Yes'); if strcmp(selection,'Gan') axes(handles.axes1); photo=imresize(photo,0.5); imshow(photo); a = strcat('anhluu/anh_goc.jpg'); imwrite(photo,a);

elseif strcmp(selection,'Xa') axes(handles.axes1); imshow(photo); a = strcat('anhluu/anh_goc.jpg'); imwrite(photo,a); end

% --- Executes on button press in CAMERA.

function CAMERA_Callback(hObject, eventdata, handles) global vid

info = imaqhwinfo;

info = imaqhwinfo('winvideo'); info.DeviceInfo;

info.DeviceInfo.SupportedFormats;

vid = videoinput('winvideo',1,'YUY2_640x480'); set(vid,'ReturnedColorSpace','RGB');

preview(vid);

% --- Executes on button press in TACHMAT.

function TACHMAT_Callback(hObject, eventdata, handles) axes(handles.axes4); imshow('anhluu/anh1.jpg'); axes(handles.axes5); imshow('anhluu/anh2.jpg'); axes(handles.axes6); imshow('anhluu/anh3.jpg'); axes(handles.axes7); imshow('anhluu/anh4.jpg');

GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu

function Timmat_Callback(hObject, eventdata, handles) tic

thuchien;

axes(handles.axes2);

imshow('anhluu/anh_kq.jpg'); set(handles.times,'string',toc);

% --- Executes on button press in NHANDANG.

function NHANDANG_Callback(hObject, eventdata, handles) tic

nhandang;

set(handles.times,'string',toc);

% --- Executes on button press in save1.

function save1_Callback(hObject, eventdata, handles) s=imread('anhluu/anh1.jpg');

save1; %thực hiện chương trình để lưu ảnh chọn % --- Executes on button press in save2.

function save2_Callback(hObject, eventdata, handles) s=imread('anhluu/anh2.jpg');

save1; %thực hiện chương trình để lưu ảnh chọn % --- Executes on button press in save3.

function save3_Callback(hObject, eventdata, handles) s=imread('anhluu/anh3.jpg');

save1; %thực hiện chương trình để lưu ảnh chọn % --- Executes on button press in save4.

function save4_Callback(hObject, eventdata, handles) s=imread('anhluu/anh4.jpg');

save1; %thực hiện chương trình để lưu ảnh chọn % --- Executes on button press in chon1.

function chon1_Callback(hObject, eventdata, handles)

if (get(hObject,'Value') == get(hObject,'Max')) % nếu đánh dấu nó mang “Max”

photo=imread('anhluu\anh1.jpg'); % chọn ảnh thực hiện cho chương trình nhận dạng

a = strcat('anhluu/anhtest.jpg'); % con nếu không thì thôi không là gì hết

imwrite(photo,a);

set(handles.ten,'string',' '); set(handles.ns,'string',' '); set(handles.mssv,'string',' '); set(handles.lop,'string',' '); set(handles.quequan,'string',' ');

end

% --- Executes on button press in chon2.

function chon2_Callback(hObject, eventdata, handles)

if (get(hObject,'Value') == get(hObject,'Max')) % nếu đánh dấu nó mang “Max”

photo=imread('anhluu\anh2.jpg'); % chọn ảnh thực hiện cho chương trình nhận dạng

a = strcat('anhluu/anhtest.jpg'); % còn nếu không thì thôi không là gì hết

imwrite(photo,a);

set(handles.ten,'string',' '); set(handles.ns,'string',' '); set(handles.mssv,'string',' '); set(handles.lop,'string',' '); set(handles.quequan,'string',' ');

end

% --- Executes on button press in chon3.

function chon3_Callback(hObject, eventdata, handles)

GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu

photo=imread('anhluu\anh3.jpg'); % chọn ảnh thực hiện cho chương trình nhận dạng

a = strcat('anhluu/anhtest.jpg'); % con nếu không thì thôi không là gì hết

imwrite(photo,a);

set(handles.ten,'string',' '); set(handles.ns,'string',' '); set(handles.mssv,'string',' '); set(handles.lop,'string',' '); set(handles.quequan,'string',' ');

end

% --- Executes on button press in chon4.

function chon4_Callback(hObject, eventdata, handles)

if (get(hObject,'Value') == get(hObject,'Max')) % nếu đánh dấu nó mang “Max”

photo=imread('anhluu\anh4.jpg'); % chọn ảnh thực hiện cho chương trình nhận dạng

a = strcat('anhluu/anhtest.jpg'); % còn nếu không thì thôi không là gì hết

imwrite(photo,a);

set(handles.ten,'string',' '); set(handles.ns,'string',' '); set(handles.mssv,'string',' '); set(handles.lop,'string',' '); set(handles.quequan,'string',' ');

end

% --- Executes on button press in back.

function back_Callback(hObject, eventdata, handles)

xoaanh; % thực hiện xóa những tấm ảnh cũ trước khi thực

chuongtrinh1; %hiện chương trình xử lý ảnh mới

delete(handles.figure1);

% --- Executes on button press in close.

function close_Callback(hObject, eventdata, handles)

xoaanh; % thực hiện xóa những tấm ảnh cũ trước khi thực

luanvantotnghiep; %hiện chương trình xử lý ảnh mới

delete(handles.figure1); ********* Đoạn code thực hiện chương trình dò tìm và cắt ảnh************* face='face'; nface='nface'; %********************** TAO MATRAN CSDL************ [T1,T2] = taoCSDL(face,nface); %******************* TAO EF ************ [m1,m2,E1,E2] = taoEF(T1,T2);

%******************LOAD ANH DE XU LY**********

im1=imread('anhluu/anh_goc.jpg');

im= imresize(im1,0.2); % nén ảnh lại chỉ còn 20%

im =rgb2gray(im); % chuyển vềảnh xám chỉ mang giá trị 0 và 1 %***************** XAC DINH **************

[dong cot] = size(im);

anh1=im*255; % nhận toàn bộảnh với gí trị 255

anh2=im*255; for i=1:1:dong for j=1:1:cot tam=subim(im,i,j);

tam1=tam-m1; % m1 là giá trị trung bình của ảnh face

tam2=tam-m2; % m2 là giá trị trung bình của ảnh nace

sochieu1=size(E1,2); sochieu2=size(E2,2);

GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu hinhchieu1=tam*0; hinhchieu2=hinhchieu1; for k=1:sochieu1 toado=(E1(:,k))'*tam1; hinhchieu1=hinhchieu1+toado*E1(:,k); end for k=1:sochieu2 toado=(E2(:,k))'*tam2; hinhchieu2=hinhchieu2+toado*E2(:,k); end kc1=norm(tam1-hinhchieu1)/20; kc2=norm(tam2-hinhchieu2)/20; anh1(i,j)=kc1; anh2(i,j)=kc2; end end b=strcat('anhluu/anh_face.jpg'); imwrite(anh1,b);

%******************* DANH DAU ANH ***********

%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ xacdinh(im1,im1,anh1,anh2); anh1=im1; anh=im1; face=anh1; nface=anh2;

******* Đoạn code tạo cơ sở dữ liệu cho chương trình dò tìm ảnh mặt**********

function [T1,T2] = taoCSDL(face,nface) csdl1 = dir(face);

csdl2=dir(nface); soanh1 = 0; soanh2=0;

% đếm tất cả các file ảnh có trong thư mục face và nface

for i = 1:size(csdl1,1)

if not(strcmp(csdl1(i).name,'.')|strcmp(csdl1(i).name,'..')|strcmp(csdl1(i).name,'Thumbs.db')) soanh1 = soanh1 + 1;

end end

for i = 1:size(csdl2,1)

if not(strcmp(csdl2(i).name,'.')|strcmp(csdl2(i).name,'..')|strcmp(csdl2(i).name,'Thumbs.db')) soanh2 = soanh2 + 1 ;

end end

T1 = []; % Tạo ma trận ảnh T1 chứa tập ảnh face

for i = 1 : soanh1

str = int2str(i); % hàm strcat nhằm liên kết các giá trị thành chuỗi

str = strcat('\',str,'.png'); % tiện cho quá trình truy xuất hay lưu lại giá trị mới

str = strcat(face,str); img = imread(str); try

img = rgb2gray(img); % chuyển tất cả vềảnh xám 0 1

GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu

end

[dong cot] = size(img); % mỗi tấm ảnh huấn luyện có kích thước 18*27 tam = reshape(img',dong*cot,1); % biến 1 ảnh thành 1 vecto có 1cột và 18*27 hàng

T1 = [T1 tam]; % tăng dần kích thước ma trận T1

End

% kết thúc ma trận T1 có kích thước 18*27x P với P là số cột của ma trận củng chính là sốảnh trong thư mục ảnh %huấn luyện face 18*27=486 chính là số dòng của ma trận ảnh T1 và tương tự ma trận T2 cũng vậy

T2 = []; % Bước này làm tương tự như tạo ma trận T1

for i = 1 : soanh2 % nhưng đối với ma trận ảnh nface

str = int2str(i); str = strcat('\',str,'.png'); str = strcat(nface,str); img = imread(str); try img = rgb2gray(img); catch end

[dong cot] = size(img); %dong 27 cot 18

tam = reshape(img',dong*cot,1); T2 = [T2 tam];

end

*********Đoạn code tạo enginface **************

function [m1,m2,E1,E2] = taoEF(T1,T2)

m1 = mean(T1,2); % Tính toán giá trịảnh trung bình

soanh1 = size(T1,2); m2 = mean(T2,2); soanh2=size(T2,2);

%Tính độ lệch giửa các bước ảnh huấn luyện với giá trịảnh trung bình sau đó trừđi giá trị trung bình của

ảnh trung bình và lưu các sai khác đó lại làm một ma trận ảnh mới ma trận đó là ma trận vecto riêng của ảnh huấn luyện, nhân ma trận vector riêng với ma trận nghịch đảo của nó và dùng hàm “eig” để tìm các vector riêng cho tập ảnh huấn luyện

A1 = []; for i = 1 : soanh1

temp = double(T1(:,i)) - m1; % T(:,i): vector cột thứ i chính là một bức ảnh

A1 = [A1 temp]; end A2 = []; for i = 1 : soanh2 temp = double(T2(:,i)) - m2; A2 = [A2 temp]; end L1 = A1'*A1;

[V1 D1] = eig(L1); %tìm vector riêng và trị riêng

L2 = A2'*A2; [V2 D2] = eig(L2);

%V chứa ma trận những vecto riêng, còn D chứa những trị riêng của các vector riêng đó, vector riêng V(:,i)

ứng với trị riêng là D(i,i)

D=diag(D1);

D=sort(D); % sắp sếp theo chiều tăng dần

s=size(D); s=s(1);

D=D(s-20); % chỉ giữ lại 20 trị riêng lớn nhất

LeigV1 = []; % và 20 vector riêng lớn nhất của tập ảnh huấn luyện

for i = 1 : size(V1,2) if( D1(i,i)>D )

LeigV1 = [LeigV1 V1(:,i)]; % tạo một ma trận mới chỉ gồm 20 vecto riêng

GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu

End %đều cho giá trị bằng 0

D=diag(D2); D=sort(D); s=size(D);s=s(1); D=D(s-30); LeigV2 = []; for i = 1 : size(V2,2) if( D2(i,i)>D )

LeigV2 = [LeigV2 V2(:,i)]; end end E1 = A1 * LeigV1; E2 = A2 * LeigV2; sovector=size(E1,2); for i=1:sovector dodai=norm(E1(:,i)); E1(:,i)=E1(:,i)/dodai; end sovector=size(E2,2); % sovector chính là số cột của ma trận for i=1:sovector

dodai=norm(E2(:,i)); % “norm” la tính giá trị bình phương trung bình

E2(:,i)=E2(:,i)/dodai; End

****** doan code xac dinh va cat anh khuon mat********

function xacdinh(anh1,anh,face,nface)

[dong,cot]=size(face); % vì phương pháp PCA là phương pháp xử lý ảnh theo khối

for i=15:1:dong-13; % do vậy khi xử lý ảnh ta thường cắt ảnh lớn ra thành từng

for j=8:1:cot-8; % tấm ảnh con để xử lý mà tấm ảnh xử lý phải có kích thước

s1=0.001; % bằng kích thước tấm ảnh trong tập ảnh huấn luyện

s2=0.001; % do vậy khi xử lý ta phải tính giá trị từ tâm của tấm ảnh

for i1=i-13:i+13 % để quét cho nên khi truy xuất ra hình Eigenface thường

for j1=j-7:j+7 % mất đi các đường viền xung quanh là vậy

if abs(i1-i)<3 && abs(j1-j)<2 s1=s1+double(face(i1,j1)); else s2=s2+double(face(i1,j1)); end end end

if s2/s1>21.8 && (nface(i,j)+nface(i-1,j)+nface(i+1,j))>89 && face(i,j)<31 && face(i-1,j)<31 && face(i+1,j)<31 && face(i-2,j)<31 && face(i+2,j)<31

kq(i,j)=255; % gán tại điểm ảnh phù hợp với các thông số

else % của khuôn mặt là 255 và các vị trí khác

kq(i,j)=0; % mang giá trị bằng 0

end end end %--- d=strcat('anhluu/anh_danhdau.jpg'); imwrite(kq,d); I=kq; anhkq=anh; anhkq1=anh1; [d,c]=size(I); % d là số dòng còn c là số cột của ma trận ảnh I

i1=1; i2=1; i3=1; i4=1; j1=1; j2=1; j3=1; j4=1; % khi tính toán ở hàm này thì i là cột và j là dòng

GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu

d1=d*2/3; else d1=d-5; end

for i=1:c-5 % trong thuật toán này ta dùng vòng lặp for để

for j=1:d1 % tìm giá trị tại đó là 255 sau đó lưu nó lại

if I(j,i)>200 && i>10 % để tiện bề cho tính toán tách mặt sau này

i1=i; % vòng lặp for có một khuyết điểm là nó

j1=j; % chỉ dừng lại tại điểm cuối cho nên vấn đề

end % tìm kiếm được nhiều khuôn mặt gặp nhiều

end % khó khăn vòng lệnh lặp lại nhiều lẩn

end % tốn kém thời gian khi chạy chương trình

if i1-30>0 for i=1:i1-30 for j=1:d*2/3

if I(j,i)==255 && i>10 i2=i; j2=j; end end end end if i2-30>0 for i=1:i2-30 for j=1:d/2

if I(j,i)==255 && i>10 i3=i; j3=j; end end end end if i3-30>0 for i=1:i3-20 for j=1:d/2

if I(j,i)==255 && i>10 i4=i; j4=j; end end end end [d,c]=size(anhkq); if j1>1 &&i1>1

[j12,i12]=do(I,j1,i1); % gọi đến chương trình dò tìm tâm ảnh khuôn mặt

i1=i12-16; j1=j12-20;

if i1<1 % điều kiện này nhằm tránh lỗi khi cắt ảnh

i1=1; % mà cắt ảnh lấn ra ngoài khung ảnh

end if j1<1 j1=1; end i1=i1*5; j1=j1*5; i11=i1+149; j11=j1+199; if i11>c

GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu i11=c; end if j11>d j11=d; end anh1=imcrop(anhkq1,[i1 j1 i11-i1 j11-j1]); a1=strcat('anhluu/anh1.jpg'); imwrite(anh1,a1); for c1=i1:i11

anhkq(j1,c1)=255; anhkq(j11,c1)=255; anhkq(j1-1,c1)=255; anhkq(j11-1,c1)=255; anhkq(j1-2,c1)=255; anhkq(j11-2,c1)=255; anhkq(j1-3,c1)=255; anhkq(j11-3,c1)=255; end

for d1=j1:j11

anhkq(d1,i1)=255; anhkq(d1,i11)=255; anhkq(d1,i1-1)=255; anhkq(d1,i11-1)=255; anhkq(d1,i1-2)=255; anhkq(d1,i11-2)=255; anhkq(d1,i1-3)=255; anhkq(d1,i11-3)=255; end end if j2>1 &&i2>1 [j22,i22]=do(I,j2,i2); i2=i22-16; j2=j22-20; if i2<1 i2=1; end if j2<1 j2=1; end i2=i2*5; j2=j2*5; i21=i2+149; j21=j2+199; if i21>c i21=c; end if j21>d j21=d; end anh1=imcrop(anhkq1,[i2 j2 i21-i2 j21-j2]); a1=strcat('anhluu/anh2.jpg'); imwrite(anh1,a1); for c1=i2:i21

anhkq(j2,c1)=255; anhkq(j21,c1)=255; anhkq(j2-1,c1)=255; anhkq(j21-1,c1)=255; anhkq(j2-2,c1)=255; anhkq(j21-2,c1)=255; anhkq(j2-3,c1)=255; anhkq(j21-3,c1)=255; end

for d1=j2:j21

anhkq(d1,i2)=255; anhkq(d1,i21)=255; anhkq(d1,i2-1)=255; anhkq(d1,i21-1)=255; anhkq(d1,i2-2)=255; anhkq(d1,i21-2)=255; anhkq(d1,i2-3)=255; anhkq(d1,i21-3)=255; end end if j3>1 &&i3>1 [j32,i32]=do(I,j3,i3); i3=i32-16; j3=j32-20; if i3<1 i3=1; end if j3<1 j3=1; end i3=i3*5; j3=j3*5; i31=i3+149; j31=j3+199; if i31>c i31=c; end if j31>d j31=d; end

GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu

Một phần của tài liệu DÒ TÌM VÀ CẮT ẢNH MẶT NGƯỜI DÙNG PCA (Trang 96 - 115)

Tải bản đầy đủ (PDF)

(115 trang)