Thuật toán Hole Filling là thuật toán hỗ trợ cho chúng ta khi làm việc với các mask. Khi thực hiện các bài toán nhận diện, đặc biệt là khi sử dụng nhận diện màu sắc, ta sẽ gặp rất nhiều nhiễu khiến cho các blob bị hổng, không hoàn chỉnh. Thuật toán Hole filling sẽ khắc phục những trường hợp này và tạo ra 1 mask hoàn chỉnh.
Cách thực hiện Hole filling như sau:
+ Bước 1: Đọc ảnh
+ Bước 2: Tạo Binary Edge của ảnh. Lúc này ta sẽ có boundary của object và cần làm cho các pixel phía bên trong boundary trở thành pixel trắng (bit 1)
Bước này được thực hiện bởi thuật toán Canny Edge Detection như đã nói ở phần trước
+ Bước 3: Sử dụng floodfill để thay đổi background từ bit 0 thành bit 1 (biến đổi màu đen thành trắng). Phần bên trong boundary vẫn được giữ nguyên. Floodfll là thuật toán mà khi ta chọn 1 pixel, tất cả các pixel có cùng màu và được kết nối với pixel đó sẽ cùng bị thay đổi màu sắc dựa theo màu được chọn. Ví dụ như trong hình
3., toàn bộ phần viền màu đen được kết nối với nhau đã được chuyển sang màu trắng.
+ Bước 4: Sử dụng logic NOT thay đổi giá trị các bit. Các bit phía bên trong boundary bị đảo giá trị còn phần bên ngoài trở lại giá trị ban đầu (bit 0) + Bước 5: Sử dụng logic OR cho ảnh tạo bởi bước 2 và bước 4. Do các bit phía trong boundary của 2 hình là NOT của nhau nên khi qua cổng OR sẽ đều nhận giá trị 1. Trong đó phần bên ngoài của cả 2 hình đều là bit 0 nên giá trị sẽ vẫn là 0.
30
Hình 2. 19: Các bước thực hiện Hole Filling Chúng ta thực hiện theo các bước sau:
Hình 2. 20: Sơ đồ thuật toán các bước thực hiện Hole Filling
31