You are on page 1of 14

Báo cáo bài tập lớn

Truyền thông đa phương tiện


Giảng viên hướng dẫn : Vũ Hữu Tiến
Đề tài:
Thuật toán phát hiện khuôn mặt
Danh sách sinh viên:

 Đào Duy Khánh - B18DCDT108


 Phạm Phú Phúc - B18DCDT187
 Trần Long Thành - B18DCDT236
Lý do chọn đề tài:

Bài toán nhận dạng khuôn mặt đóng vai


trò quan trọng trong nhiều lĩnh vực đời
sống hằng ngày của con người như các
hệ thống giám sát, quản lý vào ra, tìm
kiếm thông tin một người nổi
tiếng,...đặc biệt là an ninh, bảo mật.
1. Chức năng app

 Vẽ ra đồ thị điểm ảnh


 Phát hiện khuôn mặt
 Lưu ảnh
 Nhận diện khuôn mặt (đang cập nhật bổ sung)
2. Sơ đồ thuật toán
Nguyên lý hoạt động

 Bộ phân loại Haar Cascade của OpenCV hoạt động trên phương pháp tiếp cận cửa sổ
trượt . Trong phương pháp này, một cửa sổ (kích thước mặc định 20 x 20 pixel) được
trượt trên hình ảnh (từng hàng) để tìm các đặc điểm trên khuôn mặt. Sau mỗi lần lặp,
hình ảnh được thu nhỏ (thay đổi kích thước) theo một yếu tố nhất định (được xác định
bởi tham số ' scaleFactor '). Kết quả đầu ra của mỗi lần lặp được lưu trữ và thao tác
trượt được lặp lại trên hình ảnh nhỏ hơn, đã thay đổi kích thước. Quá trình thu nhỏ và
mở rộng cửa sổ này tiếp tục cho đến khi hình ảnh quá nhỏ so với cửa sổ trượt. Giá trị
của scaleFactor càng nhỏ thì độ chính xác càng lớn và chi phí tính toán càng cao.
Dò biên (Phương pháp canny)

 Giảm nhiễu: Làm mờ ảnh, giảm nhiễu dùng bộ lọc Gaussian kích thước 5x5. Kích
thước 5x5 thường hoạt động tốt cho giải thuật Canny. Dĩ nhiên bạn cũng có thể thay đổi
kích thước của bộ lọc làm mờ cho phù hợp.
 Tính Gradient và hướng gradient: ta dùng bộ lọc Sobel X và Sobel Y (3x3) để tính
được ảnh đạo hàm Gx và Gy. Sau đó, ta tiếp tục tính ảnh Gradient và góc của Gradient
theo công thức. Ảnh đạo hàm Gx và Gy là ma trận (ví dụ: 640x640), thì kết quả tính
ảnh đạo hàm Edge Gradient cũng là một ma trận (640x640), mỗi pixel trên ma trận này
thể hiện độ lớn của biến đổi mức sáng ở vị trí tương ứng trên ảnh gốc
Dò biên (Phương pháp canny)

 Tương tự, ma trận Angle cũng có cùng kích thước (640x640), mỗi pixel trên Angle thể
hiện góc, hay nói cách khác là hướng của cạnh. Ví dụ dễ hiểu, nếu góc gradient là 0 độ,
thì cạnh của ta trên ảnh sẽ là một đường thẳng đứng (tức tạo góc 90 độ so với trục
hoành) (vuông góc hướng gradient). Khi tính toán, giá trị hướng gradient sẽ nằm
trong đoạn [-180, 180] độ, ta không giữ nguyên các góc này mà gom các giá trị này về
4 bin đại diện cho 4 hướng: hướng ngang (0 độ), hướng chéo bên phải (45 độ), hướng
dọc (90 độ) và hướng chéo trái (135 độ).
Dò biên (Phương pháp canny)

 Non-maximum Suppression (viết tắt NMS): loại bỏ các pixel ở vị trí không phải cực
đại toàn cục. Ở bước này, ta dùng một filter 3x3 lần lượt chạy qua các pixel trên ảnh
gradient. Trong quá trình lọc, ta xem xét xem độ lớn gradient của pixel trung tâm có
phải là cực đại (lớn nhất trong cục bộ - local maximum) so với các gradient ở các pixel
xung quanh. Nếu là cực đại, ta sẽ ghi nhận sẽ giữ pixel đó lại. Còn nếu pixel tại đó
không phải là cực đại lân cận, ta sẽ set độ lớn gradient của nó về zero. Ta chỉ so sánh
pixel trung tâm với 2 pixel lân cận theo hướng gradient.
Dò biên (Phương pháp canny)

 Lọc ngưỡng: ta sẽ xét các pixel dương trên mặt nạ nhị phân kết quả của bước trước.
Nếu giá trị gradient vượt ngưỡng max_val thì pixel đó chắc chắn là cạnh. Các pixel
có độ lớn gradient nhỏ hơn ngưỡng min_val sẽ bị loại bỏ. Còn các pixel nằm trong
khoảng 2 ngưỡng trên sẽ được xem xét rằng nó có nằm liền kề với những pixel được
cho là "chắc chắn là cạnh" hay không. Nếu liền kề thì ta giữ, còn không liền kề bất cứ
pixel cạnh nào thì ta loại. Sau bước này ta có thể áp dụng thêm bước hậu xử lý loại bỏ
nhiễu (tức những pixel cạnh rời rạc hay cạnh ngắn) nếu muốn. 
Làm mịn ảnh (Bộ lọc Bilateral)

 cv.bilateralFilter() : Là bộ lọc hiệu quả cao trong công việc loại bỏ nhiễu mà vẫn giữ
lại được các đường viền (cạnh) trong ảnh.
 Bộ lọc Gauss quyết định giá trị một điểm ảnh bằng cách lấy trung bình thap hàm Gauss
các giá trị điểm ảnh xung quanh điểm đó. Hàm trọng số Gauss chỉ phụ thuộc vào
khoảng cách trong không gian so với trung tâm điểm ảnh, không quan tâm đến sự
tương quan giữa mức xám của điểm trung tâm với các điểm xung quanh đó. Nó cũng
không quan tâm rằng điểm ảnh trung tâm có nằm tại một đường biên trong ảnh không,
vì thế làm nhòe đi các đường biên trong ảnh.
Làm mịn ảnh (Bộ lọc Bilateral)

 Bộ lọc Bilater cũng sử dụng một bộ lọc Gauss với khoảng cách đến điểm trung tâm,
đảm bảo chỉ có các điểm ở gần vào giá trị điểm trung tâm. Tuy vậy nó sử dụng thêm
một hàm Gauss cho mức xám , đảm bảo chỉ các điểm ảnh có mức xám tương đồng với
điểm ảnh trung tâm tham gia vào quá trình làm mịn. Vì thế bộ lọc mức xám rất rõ ràng
hơn. Hơn nữa, thay vì hoạt động trên các kênh màu một cách riêng lẻ như bộ lọc trung
bình hay bộ lọc Gauss, bộ lọc Bilater có thể thi hành việc đo đạc màu sắc có chủ đích
trong không gian màu CIE – Lab, làm mượt màu và bảo toàn các biên theo hướng phù
hợp hơn với nhận thức con người.
Kết quả chạy demo

You might also like