MỤC LỤC
Còn ở HSV khi V=1 thì nếu S≠0 thì sẽ thể hiện màu sắc với màu chân thực nhất. • Hai thành phần S ở 2 mô hình, mặc dù có tên giống nhau, nhưng công thức tính khác nhau.
Rừ ràng từ 2 dòng dưới, ta tính lại được B và R, sau đó thay vào dòng đầu tính ra được G. Dạng số của hệ màu, tức là YCrCb được tính bằng cách lượng tử hóa dải giá trị của YPrPb.
Sau đó, dựa vào histogram thu được xác định xem cột ứng với giá trị H,S này có giá trị bằng bao nhiêu, nếu nhỏ hơn 1 ngưỡng cho trứơc thì đó không phải là màu da, ngược lại thì là màu da. Các tác giả thấy rằng nếu chỉ dùng thông tin này thì kết quả không tốt bằng việc dựa thêm thông tin về biên nữa để xác định 1 điểm có phải là màu da hay không.
Sau quá trình học, Histogram thu được sẽ được chuẩn hóa, tức là chia tỉ lệ, để có được các giá trị trong khoảng (0,1), chứ không còn là số điểm ảnh nữa. Đó là cách làm của tác giả, với cách làm này ta thấy ngay một điều, các giá trị được tính trung bình, điều đó có nghĩa là khung hình chữ nhật đó sẽ không bao hết các điểm nằm trong vùng, và quá trình duyệt đòi hỏi phải lưu lại tất cả tọa độ các điểm trong vùng để phục vụ cho tính chiều rộng, chiều cao sau này.
Tôi đề xuất 1 phương pháp đơn giản hơn giải quyết được 2 vấn đề trên là: lấy x max, x min, y max, y min của tất cả các điểm trong vùng. Tuy nhiên có thể làm vậy lại ảnh hưởng đến chuẩn đoán vùng mặt sau này.
Ví dụ khi bạn chồng tay vào cằm hoặc tay đặt ngang cổ, khi đó vùng được phát hiện sẽ không có tỉ lệ phù hợp và không được xem xét là mặt. Không phát hiện được trong trường hợp đeo kính hoặc dùng khăn che mặt (nói chung là không để lộ làn da).
Đây là 1 phương pháp mới cho phát hiện mặt người trong ảnh màu, không phụ thuộc vào hướng, kích thước, vị trí, số lượng các khuôn mặt trong ảnh; cũng không phụ thuộc vào nền và điều kiện ánh sáng trong ảnh, tức là cho phép phát hiện được các khuôn mặt trong ảnh có nền ảnh phức tạp hoặc điều kiện ánh sáng đa dạng, không biết trước. Sau đó, các tác giả tiến hành xây dựng lên các mô hình khuôn mặt như sau: với mỗi con mắt phát hiện được, các tác giả sẽ coi đó là con mắt trái của khuôn mặt (theo hướng nhìn vào ảnh), khi đó, yêu cầu phía bên phải cũng phải có 1 con mắt (mắt phải) với 1 khoảng cách và 1 góc độ xác định (có góc vì có thể mặt người nghiêng).
Do đó, tọa độ của vùng trắng là tọa độ của hình chữ nhật bao nó, bao gồm: tọa độ góc trái trên (x,y) và chiều rộng, chiều cao. Trong bước cuối cùng này, ta sẽ phải phân loại các vùng trắng đó dựa trên một số tiêu chí để xác định xem vùng trắng nào là mặt. Đầu vào của bước này là danh sách các vùng trắng, đầu ra là danh sách các tọa độ vùng mặt (nếu 1 vùng trắng được xác định là vùng mặt, thì trong đầu ra, ta chỉ giữ lại tọa độ của vùng trắng đó (hình chữ nhật bao vùng trắng), còn tham số “số điểm trắng” sẽ không cần phải giữ lại trong đầu ra).
Vì qua thực nghiệm thấy rằng: khi áp dụng công thức màu da cũng như histogram thì đều có những phát hiện nhầm (điểm không phải là màu da lại bị phát hiện là màu da), nhưng sự nhầm lẫn này không giống nhau, tức là những điểm mà dùng công thức phát hiện nhầm thì dùng histogram lại không phát hiện nhầm và ngược lại những điểm mà dùng histogram phát hiện nhầm thì dùng công thức lại không phát hiện nhầm. Do đó ta cần loại bỏ các nhiễu điểm này, sẽ tốt cho bước sau: xác định vùng trắng, vì nếu không loại bỏ các điểm này thì mỗi nhiễu điểm sẽ bị phát hiện là 1 vùng trắng và như vậy sẽ làm tăng số lượng vùng trắng lên rất nhiều gây, tốn kém trong lưu trữ và xử lý. Sự khác nhau của thuật toán này với thuật toán trên là ở chỗ: trong thuật toán này ta có cài đặt để loại bỏ các liên kết yếu giữa 2 vùng, tức là trong thuật toán trước, 2 vùng liên kết yếu sẽ được phát hiện là 1 vùng, còn trong thuật toán này chúng sẽ được coi là 2 vùng.
Như vậy, nếu tại 1 điểm trắng đang xét, ta xét theo phương thẳng đứng, nếu dãy điểm trắng theo phương đó có số lượng điểm nhỏ hơn 1 giá trị định trước thì ta sẽ coi đó là điểm nằm trên liên kết yếu, và sẽ gán nó bằng 0. Hai là khi lấy 1 điểm ra khỏi hàng đợi, khi xét 4 điểm hàng xóm của nó, tại mỗi điểm hàng xóm nếu là điểm trắng và chưa gán nhãn thì ta cũng không gán nhãn, đưa vào hàng đợi và vùng trắng ngay mà ta cũng phải kiểm tra xem có nằm trên đường liên kết yếu không.
Ta có thể nghĩ đến giải pháp như ghi lại tên các file đã duyệt rồi, nhưng như vậy danh sách có thể dài, ghi rất mệt và mỗi lần nghi ngờ 1 file nào đú, lại phải đối chiếu lại danh sỏch dài đú. Để thực hiện chức năng này, sau khi lấy hết các khuôn mặt trong ảnh rồi, chỉ việc nhấn nút “Cất ảnh” (hoặc nhấn phím Delete trên bàn phím), file ảnh đang làm việc sẽ tự động được chuyển đến 1 thư mục xác định. Công việc được tiếp tục vào ngày hôm sau, nếu chỉ có các mũi tên, ta sẽ phải nhấn nhiều lần để di chuyển đến frame kết thúc của ngày hôm qua, vì vậy chức năng này được xây dựng để thuận tiện trong tình huống này (ta có thể nhập chỉ số frame dừng của ngày hôm qua, và nhấn nút “Đi”, lập tức sẽ nhảy ngay đến vị trí đã dừng của ngày hôm qua).
Để lưu các khuôn mặt, ta cũng thực hiện như đối với file ảnh, cũng dùng chuột khoanh vùng khuôn mặt, rồi nhấn nút “Lưu khuôn mặt” hoặc nhấn phím Enter trên bàn phím để thực hiện lưu nó. Do đó, histogram hiện tại tốt cho phát hiện màu da, nhưng sau khi tổng hợp thêm một số ảnh màu da nữa, histogram thu được có thể lại phát hiện màu da kém đi. Histogram được sử dụng trong phát hiện màu da không phải là histogram với các cột là các số nguyên, mà là histogram được chuẩn hóa, tức là chia số điểm trong mỗi cột cho tổng số điểm ảnh đã duyệt.
• Cũng như file phim, nó cũng cho phép vừa phát camera vừa tìm mặt, hoặc tìm mặt trên 1 frame khi camera đang dừng. Vì vậy, chương trình có chức năng cho phép thiết lập các tham số đó, để linh hoạt trong các trường hợp khác nhau. Các tham số cần thiết lập như: file histogram, các tham số trong tiêu chuẩn màu da, tỉ lệ khuôn mặt, thư mục lưu trữ các khuôn mặt tìm được,.
Mặt tìm được có thể được lưu tự động vào một nơi xác định hoặc không lưu, tùy theo ta thiết lập. Camera được chọn, hình ảnh thu được của nó sẽ được phát lên form và được tìm mặt. Do đó, trong các trường hợp khác nhau cần thay đổi tham số để đạt kết quả tốt nhất có thể.
Nếu ta thực hiện đồng bộ thì khi form đang xử lý tìm mặt, mọi sự kiện nhấn nút đến nó đều sẽ không phản ứng, mà phim hay camera phát liên tục, tức là hết tìm mặt trên frame này sẽ tìm mặt trong frame khác, do đó không có kẽ hở nào để nhảy vào dừng tìm mặt hay dừng phim, camera. Nó khác ở chỗ, chuẩn chuyển đổi là ngầm định (khác với hàm tạo trên, chuẩn chuyển đổi phải nhập vào qua các giá trị kr, kb). Tại sao dùng chuẩn này vì trong công thức màu da ta dùng chuẩn này, nên xây dựng hàm này cho thuận tiện. out double _pb, out double _pr). • 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.
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ả. Nếu ta lấy giá trị ngưỡng thấp thì phát hiện được nhiều khuôn mặt hơn nhưng hậu quả là phát hiện nhầm (những cái không phải là mặt nhưng lại bị phát hiện là mặt) cũng tăng lên. Những trường hợp không phát hiện được là do nhiễu màu da ở xung quanh làm mở rộng vùng trắng của khuôn mặt (sự dính líu) làm cho tính chất của vùng trắng không còn thỏa mãn khuôn mặt nữa, hoặc do các khuôn mặt dính vào nhau, hoặc tay dính vào mặt, hoặc do cởi trần,.