Bộ phát hiện mặt 1 Mục đích

Một phần của tài liệu XÂY DỰNG ỨNG DỤNG PHÁT HIỆN MẶT NGƯỜI DỰA TRÊN MÀU DA (Trang 83 - 84)

CHƯƠNG 4: XÂY DỰNG CHƯƠNG TRÌNH VÀ MỘT SỐ KẾT QUẢ MINH HỌA

4.5.5. Bộ phát hiện mặt 1 Mục đích

4.5.5.1. Mục đích

Lớp này được xây dựng để cung cấp các phương thức cho tìm ra các khuôn mặt trong ảnh. Việc xác định các khuôn mặt trong ảnh được thực hiện theo thuật toán đã trình bày trong chương 2. Xây dựng thành 1 lớp riêng để dễ quản lý và có thể sử dụng lại. Để tìm ra các khuôn mặt với 1 ảnh đưa vào, đầu tiên ta phải tạo ra 1 thể hiện của lớp, sau đó khởi gán các thuộc tính phục vụ quá trình phát hiện mặt là: Histogram và các tham số trong xác định màu da và tính chất khuôn mặt. Sau khi mọi thứ thiết lập xong, ta gọi phương thức TimMat, phương thức sẽ trả về danh sách các tọa độ các khuôn mặt tìm kiếm được.

4.5.5.2. Các thuộc tính

Lớp có 2 thuộc tính là:

• double[,] Histogram: đây là mảng chứa histogram chuẩn hóa được dùng trong phát hiện màu da. Thuộc tính này là thuộc tính chỉ ghi, dùng thiết lập mảng histogram.

• TS_FD ThamSo_FD: đây là 1 cấu trúc chứa các tham số phục vụ trong phát hiện mặt như: ngưỡng màu da, sai số tỉ lệ vàng,... TS_FD là 1 kiểu cấu trúc được định nghĩa như sau:

publicstructTS_FD //tham so cua bo phat hien khuon mat {

publicstring fileHis;//duong dan den file histogram

publicdouble nguongMauDa;//nguong mau da trong histogram publicdouble tlTrangMin;//ti le so diem trang nho nhat publicdouble tlTrangMax;//ti le so diem trang lon nhat publicdouble saiSoTLV;//+-delta trong ti le vang

}

Thuộc tính này cũng là thuộc tính chỉ ghi.

4.5.5.3. Các phương thức

* BoPhatHienMat()

• Hàm tạo không đối.

• Chỉ đơn giản thực hiện gán NULL cho mảng Histogram. Vì vậy, ta cần nhớ rằng, sau khi tạo ra đối tượng của lớp thì vẫn chưa đủ, mà phải gán giá trị cụ thể cho các thuộc tính, trước khi gọi phương thức thực hiện tìm mặt, nếu không sẽ không tìm thấy khuôn mặt nào cả.

* Rectangle[] TimMat(Bitmap anh)

• Phương thức thực hiện duyệt qua ảnh vào để tìm ra các khuôn mặt.

• Phương thức trả về một mảng các hình chữ nhật bao các khuôn mặt tìm được.

• Phương thức thực hiện theo các bước trong thuật toán đã được trình bày trong chương 2: phát hiện màu da --> lọc nhiễu --> phân vùng --> phân loại vùng trắng.

* Rectangle[] TimMat_BDB(Bitmap anh, BackgroundWorker bgwk, DoWorkEventArgs e)

• Cũng là phương thức thực hiện tìm mặt, nhưng có thêm chữ BDB có nghĩa là bất đồng bộ. Trong phương thức trên, là thực hiện đồng bộ, có nghĩa là phải tìm xong khuôn mặt rồi mới làm tiếp công việc khác. Còn trong phương thức này, nó được sử dụng để chạy ngầm.

• bgwk là đối tượng phục vụ cho quá trình chạy ngầm, còn e là tham số trong quá trình chạy ngầm.

• Trong phương thức tìm mặt đồng bộ, các bước trong thuật toán tìm mặt được thực hiện liên tiếp, còn trong phương thức bất đồng bộ này, sau mỗi bước ta phải kiểm tra xem tiến trình ngầm này có bị yêu cầu dừng không, nếu có thì ta dừng ngay công việc lại.

* staticbool LaMauDaYCrCb(int y, int cr, int cb)

• Phương thức xác định xem 1 màu trong hệ màu YCrCb có phải là màu da hay không theo công thức màu da trên hệ màu YCrCb được trình bày trong chương 2.

• Đây là phương thức tĩnh của lớp.

4.5.5.4. Vị trí

* NameSpace: PhatHienMatNguoi

* DLL: không nằm trong dll nào cả vì đây là lớp được xây dựng trong chương trình.

Một phần của tài liệu XÂY DỰNG ỨNG DỤNG PHÁT HIỆN MẶT NGƯỜI DỰA TRÊN MÀU DA (Trang 83 - 84)