Thuật toán phân vùng nâng cao

Một phần của tài liệu Đồ án tốt nghiệp: Xử lý ảnh phát hiện khuôn mặt người (Trang 51)

CHƯƠNG 2: PHÁT HIỆN MẶT NGƯỜI DỰA TRÊN MÀU DA

2.2.3.2. Thuật toán phân vùng nâng cao

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.

Mục tiêu của ta là xóa bỏ khỏi ảnh nhị phân các liên kết yếu giữa các vùng (xóa bỏ tức là gán cho nó giá trị 0 (đen)). Làm sao để phát hiện các liên kết yếu. Ta hãy xét hình liên kết yếu trên (hình có 1 đường nối 2 hình elip), nếu ta dùng 1 đường thẳng cắt nó thì ta sẽ thu được 1 tiết diện là 1 dãy điểm trắng ngắn. 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. Tương tự, ta có thể xét theo các phương ngang và phương chéo nữa.

Cách xác định dãy điểm trắng theo 1 phương như sau: ví dụ ta xét theo phương thẳng đứng, khi đó, ta duyệt lên phía trên, đến khi gặp điểm đen thì dừng, đánh dấu vị trí dừng đó. Sau đó, lại duyệt từ điểm đang xét xuống phía dưới, cũng gặp điểm đen thì dừng. Cũng đánh dấu lại vị trí này. Từ đó, ta xác định được số điểm trắng theo phương đó. Tuy nhiên, nếu điểm trắng đang xét mà nằm sâu trong vùng thì sao? Khi đó, việc duyệt lên trên hoặc xuống dưới sẽ phải chạy qua rất nhiều điểm, rất tốn kém. Do đó, ta phải có điều kiện kiểm tra số lượng điểm trong khi duyệt. Nếu số lượng điểm đã lớn hơn giá trị ngưỡng định trước kia thì dừng luôn, và kết luận ngay nó không phải là điểm nằm trên liên kết yếu. Cụ thể như sau: với điểm trắng đang xét:

• Gán biến đếm số lượng sl = 0.

o Nếu gặp điểm đen thì dừng. o Nếu gặp điểm trắng thì:

 Tăng sl lên 1.

 Kiểm tra giá trị của sl. Nếu lớn hơn giá trị ngưỡng thì dừng.

• Kiểm tra giá trị sl. Nếu lớn hơn giá trị ngưỡng thì kết luận nó không nằm trên liên kết yếu.

• Nếu nhỏ hơn, ta duyệt xuống bên dưới. Thao tác tương tự như duyệt lên trên.

• Khi dừng cũng kiểm tra giá trị của sl để quyết định. Nếu vẫn nhỏ hơn ngưỡng thì nó là điểm nằm trên liên kết yếu và gán nó bằng 0 (đen).

Khi duyệt lên trên hoặc xuống dưới ta có thể lao ra khỏi ảnh. Khi đó ta cũng phải dừng quá trình duyệt lại ngay. Vì vậy ta sẽ coi điểm nằm ngoài ảnh là điểm đen.

Hình 2.17: Lưu đồ thuật toán phát hiện liên kết yếu theo chiều dọc Đ S Begin End sl  0

Điểm trắng and sl <= Nguong?

sl <= Nguong? Là điểm trắng và sl <= Nguong? sl  sl + 1,

Nhảy lên điểm tiếp theo

sl  sl + 1,

Nhảy xuống điểm tiếp theo Đưa con trỏ về vị trí điểm

ngay dưới điểm đang xét

sl <= Nguong? Gán điểm đang xét thành đen Đ S S Đ Đ S

Tương tự ta cũng có thể xét theo các phương khác như phương ngang hoặc chéo 45 độ. Trong cài đặt ta kiểm tra theo cả 2 chiều: thẳng và ngang.

Đưa khâu này vào thuật toán phân vùng cơ bản như sau: ta đưa vào 2 chỗ. Một là khi kiểm tra 1 điểm thấy nó là điểm trắng và chưa gán nhãn thì ta sẽ không tạo 1 vùng trắng để chứa ngay, mà ta sẽ kiểm tra xem nó có nằm trên đường liên kết yếu không? Nếu có thì ta sẽ xóa nó (gán thành đen) và chuyển sang xét điểm tiếp theo, không tạo vùng mới. Nếu không thì lúc đó mới tạo vùng trắng mới để lưu trữ và tiếp tục thực hiện như trước. 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. Nếu nằm trên đường liên kết yếu thì ta sẽ xóa nó và chuyển sang kiểm tra hàng xóm tiếp theo mà không làm gì hơn. Nếu không nằm trên đường liên kết yếu thì lúc đó mới gán nhãn, đưa vào vùng trắng và hàng đợi. Tóm lại chỉ sửa trong 2 vị trí đó thôi.

Sau đây là một kết quả minh họa (lấy lại ví dụ dính nhau trên):

Hình 2.18: Kết quả minh họa phân vùng nâng cao

Ta thấy ngay, 2 khuôn mặt đã được nhận ra tách rời, mặc dù có 1 đường liên kết yếu giữa chúng. Việc làm này cũng giúp loại bỏ các vùng có kích thước nhỏ (nhỏ hơn giá trị ngưỡng xác định điều kiện liên kết yếu), giúp đỡ tốn lưu trữ và xét duyệt. Để ý các hình chữ nhật khung thấy rằng nó không bao trọn vẹn vùng đó mà cắt vào trong một chút. Đó là hiệu ứng phụ trong thuật toán của ta. Nó không chỉ cắt đứt các cầu liên kết yếu giữa 2 vùng mà còn bào mòn các cạnh nhọn đâm ra của vùng. Việc này sẽ làm tỉ lệ số điểm trắng trong vùng giảm xuống.

Một phần của tài liệu Đồ án tốt nghiệp: Xử lý ảnh phát hiện khuôn mặt người (Trang 51)