1. Trang chủ >
  2. Luận Văn - Báo Cáo >
  3. Công nghệ thông tin >

3 Phân tích, thiết kế

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.87 MB, 67 trang )


Thuật toán

Ta sử dụng mẫu học dựa trên kỹ thuật Haar + Adaboost cho 6 đối

tƣợng sau: mặt thẳng, đôi mắt, mắt trái, mắt phải, mũi, miệng.



Hình 3.2: Nhận dạng khuôn mặt dựa trên thành phần

Bƣớc 1: Phát hiện thô khuôn mặt trên ảnh bằng mẫu mặt thẳng. Sau

bƣớc này ta sẽ đƣợc một tập các vùng ảnh có khả năng là khuôn mặt.

Bƣớc 2: Phát hiện đôi mắt ở vùng từ 1/6 đến 1/2 ảnh khuôn mặt tính

từ trên xuống. Nếu tìm thấy chuyển qua bƣớc 3.

Bƣớc 3: Phát hiện mắt trái trong vùng từ 1/6 đến 1/2 chiều cao và từ

giữa đôi mắt sang trái. Nếu thấy chuyển bƣớc 4.

Bƣớc 4: Phát hiện mắt phải trong vùng từ 1/6 đến 1/2 chiều cao và từ

giữa đôi mắt sang phải. Nếu thấy chuyển bƣớc 5.

Bƣớc 5: Phát hiện mũi trong vùng từ 1/4 đến 3/4 chiều rộng và từ

giữa đôi mắt đến khoảng 1/8 cận dƣới. Nếu thấy chuyển bƣớc 6.

Bƣớc 6: Phát hiện miệng trong vùng từ 1/8 đến 7/8 chiều rộng và từ

giữa mũi đến khoảng 1/8 cận dƣới. Nếu thấy thì thông báo tìm thấy

khuôn mặt.

52



// Hàm dò các mặt trong ảnh và vẽ khung vào các bộ phận mặt, mắt,

mũi, miệng

void detectAnDraw(const IplImage* src, IplImage* dst, FaceFinder* detector) {

vector faces;

IplImage* face;

int i, j;



// khai báo các hình vuông cho các bộ phận

CvRect ep, le, re, no, mo;

CvMemStorage *stor;

stor = cvCreateMemStorage(0);

detector->detect(src, faces, 0);

// Duyệt tất cả các khuôn mặt có trong ảnh

for (i=0; i
face = getSubImage(src, faces[i]);

detector->calcFCs(face, ep, le, re, no, mo, stor);

drawRect(dst, 0, 0, faces[i].x, faces[i].y, faces[i].width,

faces[i].height, 0, 255, 0);

drawRect(dst, faces[i].x, faces[i].y, ep.x, ep.y, ep.width, ep.height,

255, 255, 255);



//Vẽ hình vuông vào mắt trái

drawRect(dst, faces[i].x, faces[i].y, le.x, le.y, le.width, le.height, 0,

0, 255);



//Vẽ hình vuông vào mắt phải

drawRect(dst, faces[i].x, faces[i].y, re.x, re.y, re.width, re.height, 0,

255, 255);



//Vẽ hình vuông vào mũi

drawRect(dst, faces[i].x, faces[i].y, no.x, no.y, no.width, no.height,

255, 0, 0);

53



//Vẽ hình vuông vào miệng

drawRect(dst, faces[i].x, faces[i].y, mo.x, mo.y, mo.width,

mo.height, 255, 255, 0);

cvReleaseImage(&face);

}



3.4 Giao diện và cách sử dụng

* Khởi động chƣơng trình



Kích nút Open image



- Chọn ảnh

- Kích nút open



Chƣơng trình tự phát hiện khuôn mặt, hiện kết quả



54



3.5 Kết quả thử nghiệm

3.5.1 Góc chụp so với hƣớng ống kính

Các kết quả này đƣợc thực hiện trên các ảnh màu, mỗi ảnh chỉ có

duy nhất một khuôn mặt. Khuôn mặt đƣợc lần lƣợt đƣợc chụp theo các góc

độ khác nhau từ chính diện, xoay dần đến góc 900. Các kết quả cho khả

năng phát hiện khuôn mặt sẽ khó khăn dần khi khuôn mặt chếch nhiều so

với hƣớng ống kính.

Đặc điểm, góc chụp khuôn mặt



Kết quả thực nghiệm



Khuôn mặt chính diện



55



Xem Thêm
Tải bản đầy đủ (.pdf) (67 trang)

×