Trong phần này sẽ thảo luận phương pháp tìm đường viền của một đối tượng biểu diễn bằng nhị phân, cũng như việc giảm các pixel “nhiễu” bằng phép lọc theo hình thái học (morphological filtering).
2.1.3.a Tìm contour
Hình minh họa 2.1-10 ở dưới đây biểu diễn contour của một hình vuông. Biểu diễn tham số này có được bằng cách chọn một điểm bắt đầu bất kỳ, cứ lần theo đường biên từ điểm này theo hướng cùng chiều kim đồng hồ hay ngược chiều kim đồng hồ cho đến khi gặp lại nó hoặc hết đường.
Hình 2.1-10: Tìm contour bằng cách lần ngược chiều kim đồng hồ.
Kết quả thu được ở hình trên là tập các điểm theo thứ tự:
(4,2), (5,2), (6,2), (7,2), (8,2), (9,2), (9,3), (9,4), (9,5), (9,6), (9,7), (8,7), (7,7), (6,7), (5,7), (4,7), (4,6), (4,5), (4,4), (4,3)
Ta thấy rằng, có thể biểu diễn theo tham số tập điểm trên thành hai chuỗi số nguyên theo tọa độ x, y như sau:
x = {4, 5, 6, 7, 8, 9, 9, 9, 9, 9, 9, 8, 7, 6, 5, 4, 4, 4, 4, 4 } y = { 2, 2, 2, 2, 2, 2, 3, 4, 5, 6, 7, 7, 7, 7, 7, 7, 6, 5, 4, 3 }
Hình 2.1-11 : Các chuỗi tín hiệu rời rạc từ biểu diễn theo tham số của contour ở trên.
Phụ thuộc vào việc các điểm viền có thuộc đối tượng hay không, ta chia chúng thành hai loại: viền nội (internal contour) và viền ngoại (external contour). Hình minh họa dưới đây sẽ cho thấy sự khác biệt của hai loại contour này:
Có rất nhiều thuật toán để tìm contour trong ảnh nhị phân như sử dụng Run-length codes, chain-codes. Thuật toán trình bày dưới đây dùng để tìm external contour, ý tưởng của nó như sau:
Đầu tiên tìm một điểm bắt đầu bằng cách quét lần lượt từng dòng cho đến khi gặp được một điểm mà quanh nó có một điểm màu đen. Sau khi có được điểm bắt đầu, thuật toán sẽ bám theo viền của đối tượng cho đến khi trở vềđiểm xuất phát.
Hình 2.1-13: Thuật toán dò viền
Để tìm ra đâu là điểm thuộc contour tiếp theo, tại mỗi bước ta đặt mặt nạ 8-connected (chain-code directions) sao cho điểm chính giữa (P) của nó trùng với điểm contour hiện tại. Sau đó ta xét trạng thái của ma trận chain-code này để quyết định điểm tiếp theo.
Hình 2.1-15: Biểu diễn contour bằng 8-connected chain-code
Giả sử ta có 3 pixel là P, C, N tương ứng với pixel trước thuộc contour, pixel hiện tại, và pixel kế tiếp như bảng 2.1-1; dpc là hướng từ pixel P đến pixel C, ngược lại dcp = invert(dpc) .
Bảng 2.1-1: Hàm invert(d)
Hình 2.1-16: Thuật toán tìm viền sử dụng 3 pixel P, C, N tương ứng với pixel trước thuộc contour, pixel hiện tại, và pixel kế tiếp tại mỗi bước.
Từ hướng dcp, thuật toán sẽ xét các pixel kế cận theo hướng ngược chiều kim đồng hồ để tìm ra pixel đi tiếp, ta chỉ chấp nhận pixel trước cũng chính là pixel kế tiếp khi không thể tìm ra một ứng viên khác như Hình 2.1-17 dưới đây.
Hình 2.1-17: Trường hợp đặc biệt khi pixel “tiếp theo” chính là pixel “trước” của contour
Thuật toán tìm contour cho 1 đối tượng duy nhất có thểđược tóm tắt lại như sau: Find E[1] in scanline; // tìm pixel khởi đầu bằng phương pháp quét theo hàng n = 2;
Đặt next_pixel là là pixel thứ hai tìm theo cách đã giải thích ở trên (xét 4, 5, 6, 7); Đặt dcn là hướng từ E[1] đến next_pixel
While (next_pixel ≠ E[1]) { E[n] = next_pixel; dpc = dcn; Find_next(E[n], dpc, next_pixel, dcn); n = n+1; }
Find_next(Pc, dpc, &Pn, &dcn) { dcp = invert(dpc); For r = 0 to 6 do { dE = mod(dcp + r, 8); dI = mod(dcp + r + 1, 8); PE = chainpoint(Pc, dE); PI = chainpoint(Pc, dI);
If (isBackground(PE) and isobject(PI)) { Pn = PE; // trả về pixel tiếp theo dcn = dE; } } }
2.1.3.b Morphological Filtering
Hình thái toán học (Mathematical morphology) là một tập các phép toán dùng để phân tích ảnh và xử lý tín hiệu số đa chiều dựa trên các thông tin về mẫu hình dạng (shape) được chọn. Trong đó, tín hiệu đầu vào được so sánh một cách cục bộ với S (thành tố cấu trúc - structuring elements) có dạng bất kì, tại điểm tham chiếu R (thông thường R là tâm của S và ánh xạ tương ứng tới tín hiệu đang xét).
Hình 2.1-18: Các thành tố cấu trúc với nhiều hình dạng và kích thước khác nhau.
Mục tiêu của việc ứng dụng Morphology là để chuyển đổi tín hiệu thành những tín hiệu mới đơn giản hơn bằng việc loại bỏ các thông tin không cần thiết. Hình thái toán học sử dụng các toán tử hình thái (Morphological operators) mà có thểđược ứng dụng với các tín hiệu nhị phân và đa mức xám như là những công cụ cho quá trình xử lý. Toán tử căn bản nhất đồng thời cũng là thành phần cấu thành các toán tử morphology phức tạp hơn đó là erosion và dilation. Trong phần này chỉ định nghĩa các toán tử một cách đơn giản, bỏ qua những diễn giải toán học phức tạp để có thể dễ dàng ứng dụng trong thực hành.
Trong xử lý ảnh, các toán tử Morphological thường nhận một ảnh nhị phân (binary image) hay ảnh đa mức xám (grayscale image) và một phần tử cấu trúc (structuring element) như là dữ liệu đầu vào, sau đó kết hợp chúng bằng cách sử dụng tập phép toán như giao, hợp, bao gồm, bù (intersection, union, inclusion, complement), cho ra một hình ảnh kết quả có cùng kích thước. Chúng xử lý các đối tượng trong ảnh đầu vào dựa trên những đặc tính về hình dạng đã được xác định trong cấu trúc của thành tố cấu trúc. Bằng việc chọn kích thước, hình dạng và pattern của vùng điểm ảnh lân cận điểm ảnh muốn xem xét (thể hiện trên S), ta có thể xây dựng một toán tử Morphology mà nhạy cảm với những hình dạng cụ thể trên ảnh được cho.
Với toán tử erosion, phần tử cấu trúc sẽ ốp lên các pixel (i,j) sao cho (i, j) là điểm trung tâm của phần tử cấu trúc, nếu toàn bộ phần tử cấu trúc thuộc đối tượng thì f[i,j] = 1, ngược lại f[i, j] = 0. Vì vậy phép toán này sẽ làm đối tượng co rút lại, trong khi phép toán dilation với f[i, j] = 1 khi có tối thiểu 1 pixel thuộc đối tượng sẽ giúp làm nở đối tượng ra.
(a) (b)
Hình 2.1-19: Ảnh gốc (a) và Thành tố cấu trúc (SE) (b)
(a) (b)
Hình 2.1-20: Áp dụng toán tử erosion thông qua SE tại các vị trí khác nhau của ảnh