1. Stack Img 2 Do
2.2 Phân đoạn ảnh theo mơ hình ghép vùng 1 Ghép vùng theo phƣơng pháp HAC
2.2.1 Ghép vùng theo phƣơng pháp HAC
Phương pháp phân cụm phân cấp xây dựng một cấu trúc cây phân cấp cho các đối tượng và có hai phương pháp chính là xây dựng cây theo hướng từ trên xuống (top-down) và xây dựng theo hướng từ dưới lên (bottom-up).
cụm phân biệt và sau đó tiến hành ghép lần lượt 2 cụm giống nhau nhiều nhất hay khác nhau ít nhất làm một đến khi tất cả các cụm được ghép vào một cụm duy nhất chứa tất cả các đối tượng. Phân cụm phân cấp bottom-up còn được gọi là phân cụm tích lũy phân cấp (HAC). Trong thực tế phân cụm phân cấp
bottom-up được sử dụng rộng rãi hơn là top-down do các tiêu chí để ghép cụm
trong bottom-up đơn giản và dễ thực hiện hơn việc đánh giá tách cụm trong
top-down.
HAC dựa theo đặc thù của thuật toán phân cụm đệ quy và coi mỗi đối
tượng như một điểm dữ liệu trong khơng gian Euclide. Việc tính tốn độ tương tự giữa các cụm dựa vào cách tính khoảng cách trong không gian Euclide . Bằng cách đi lên từ lớp dưới cùng lên nút trên đầu, sơ đồ cây phân cấp cho chúng ta thấy các bước kết hợp đơi một từng nhóm. Ví dụ nhìn vào sơ đồ Hình 2.8 ta có thể thấy rằng 2 cụm mang nhãn 1 và 2 đầu tiên được nhóm với nhau, sau đó được nhóm với cụm mang nhãn 3 trở thành cụm 123
được đưa ra. Cụm 4 và 5 được nhóm với nhau tạo thành cụm 45, cuối cùng hai cụm 123 và 45 ghép lại thành một cụm tổng thế chứa cả 5 đối tượng là 12345 để tạo thành một cây với gốc 12345 và các lá lần lượt là 1, 2, 3, 4, 5.
Hình 2.8 Biểu diễn phân cụm phân cấp bottom-up của 5 đối tượng
1 2 2 3 4 5 1, 2 4, 5 1, 2, 3 1, 2, 3, 4, 5
Phân cụm phân cấp không yêu cầu cố định số cụm và nếu tất cả các đối tượng đều thuộc một cụm thì việc phân cụm là vơ nghĩa. Vì thế, trong việc phân cụm chúng ta cần bỏ đi một số bước, tức cần dùng một nhát cắt để đưa ra kết quả phân cụm của mình.
Một số phương pháp tính khoảng cách cụm của HAC [4]
Với: r, s: hai cụm
i, j: hai đối tượng bất kỳ thuộc hai cụm
Single link hay single-linkage
Với phương pháp này, khoảng cách giữa các cụm được định nghĩa là khoảng cách giữa những đối tượng giống nhau nhất giữa 2 nhóm:
(2.9) Với 2 cụm, ta tính tất cả các khoảng cách giữa 2 phần tử bất kỳ thuộc 2 cụm đó và khoảng cách nhỏ nhất tìm được chính là khoảng cách giữa 2 cụm đó. Tại mỗi bước, 2 cụm gần nhau nhất sẽ được chọn để ghép lại với nhau.
Complete linkage hay fatherest neighbour (người hàng xóm xa nhất)
Phương pháp phân cụm này ngược với single linkage. Với 2 cụm, ta tính tất cả các khoảng cách giữa 2 phần tử bất kỳ thuộc 2 cụm đó và lấy khoảng cách lớn nhất giữa các tài liệu làm khoảng cách giữa 2 cụm. Khoảng cách giữa các cụm được định nghĩa:
(2.10)
Average-linkage
Phân cụm bằng cách tính khoảng cách giữa các cụm với average-linkage đánh giá ghép cụm dựa vào toàn bộ độ tương tự giữa tất cả các đối tượng trong cụm vì vậy mà nó tránh được những thiếu sót của hai phương pháp
single-linkage và complete-linkage – chỉ đánh giá được một phần các cụm.
Centroid (Trọng tâm)
Khoảng cách giữa các cụm chính là khoảng cách giữa trọng tâm của các cụm.
Stehling đã trình bày thuật tốn ghép vùng được sử dụng cùng với cây bao trùm tối thiểu (MST) gọi là CBC[9]. Thuật tốn có thể được mơ tả như sau: Đầu tiên, toàn bộ ảnh được chuyển thành một đồ thị, các đỉnh của đồ thị là các pixel trong ảnh và các cạnh là các cặp pixel lân cận bốn. Trọng số của mỗi cạnh là khoảng cách Euclide giữa các màu của các pixel lân cận bốn. Các pixel được phân cụm sử dụng hai ngưỡng: màu và cỡ. Tập các pixel liên thơng có độ tương tự màu lớn hơn hoặc bằng với ngưỡng màu tạo nên một vùng. Sau đó, các vùng nhỏ hơn ngưỡng cỡ đã cho được xem như là nhiễu và nhập với vùng lân cận gần nhất có độ tương tự màu lớn nhất.
Thuật tốn phân cụm này khơng chỉ tự động mà cịn tốn ít thời gian. Do đó luận văn đã quyết định sử dụng thuật tốn phân cụm này để nhận được các vùng trong ảnh.
Thuật toán phân cụm Input: Ảnh A Output: Các vùng của ảnh A 1. ConvertGraph(A); 2. Single-Linkage(G(V, E), d0) 3. For mỗi cặp vùng If ( < size){ = getNeighbor( ) Join( , ) }
Trong thuật toán phân cụm ở trên hàm ConvertGraph(A) nhằm xây dựng một đồ thị vơ hướng có trọng số G(V, E), với các pixel của ảnh A là các đỉnh
V của G và mỗi cặp lân cận 4 láng giềng (p,q) trong I xác định một cạnh trong E, các trọng số của cạnh (p,q) là khoảng cách Euclide giữa các thành phần
màu của hai pixel p và q. Hàm Single-Linkage(G(V, E), d0) có tác dụng phân
cụm các pixel sử dụng tham số ngưỡng khoảng cách màu d0 cho ra một phân hoạch đồ thị. Trong phân hoạch đồ thị này, mỗi phần là một cây, các nút của cây tạo thành một vùng các pixel liên thông. Khoảng cách tối thiểu giữa các vùng lớn hơn hoặc bằng d0. Hàm getNeighbor( ) sẽ trả lại vùng là vùng lân cận có độ tương tự nhất so với vùng có số pixel nhỏ hơn s0. Còn hàm
Join( , ) có tác dụng ghép hai vùng và với nhau tạo thành một vùng
có cỡ bằng tổng cỡ của hai vùng đã ghép.
Thuật toán phân cụm ở trên là một biến thể đơn giản và hiệu quả của thuật toán phân cụm phân cấp liên kết đơn single-linkage. Thuật toán single- linkage có thể được mơ tả theo ngơn ngữ và khái niệm của lý thuyết đồ thị. Ta coi các yếu tố dữ liệu mà muốn gom cụm ở đây là các nút của đồ thị. Việc sáp nhập của hai cụm (ban đầu là đơn) và tương ứng với thêm một cạnh giữa các cặp nút gần nhất và . Do các cạnh được thêm vào luôn luôn ở giữa các nút cụm riêng biệt, vì thế đồ thị kết quả khơng bao giờ có mạch kín. Trong thực tế, đồ thị kết quả là một cây. Nếu quá trình này cứ tiếp tục cho đến khi tất cả các cụm được liên kết với nhau, có thể chỉ ra rằng đồ thị kết quả là một cây mở rộng tối thiểu. Dựa trên mối quan hệ giữa các thuật toán single-linkage và MST, để tạo ra một thuật toán tương đương với “thuật toán tham lam Kruskal” để tạo ra một MST. Thuật toán
được sử dụng như là cơ sở để thay thế cho thuật toán single-linkage đã nói ở trên được mơ tả như trong Hình 2.10 dưới đây:
Thuật toán Single-Linkage( ) Input: - đồ thị G(V,E)
- ngưỡng khoảng cách d0
Output: Các vùng của ảnh
1. For mỗi đỉnh do Make-Set( )
2. Sắp xếp các cạnh E theo chiều tăng dần của trọng số 3. For mỗi cạnh đã được sắp xếp do
3.1 If Then 3.1.1 If Then Join( 3.2 Else break;
Hình 2.10 Thuật tốn Single-Linkage
Trong thuật toán Single-Linkage ở trên, hàm Make-Set(v) nhằm khởi tạo ra một cụm với các nút là tham số truyền vào. Còn hàm GetRoot() trả về định danh của các cụm bằng các phần tử thông qua như một tham số truyền vào. Dòng 1 tạo ra các cụm, mỗi cụm là một nút của đồ thị G, các cạnh trong
E được sắp xếp theo trọng số của cạnh trong dòng 2. Vòng lặp for ở 3 kiểm
tra cho mỗi cạnh , nếu khoảng cách giữa các cụm của và mà nhỏ hơn khoảng cách ngưỡng (tiêu chí để dừng) thì chứng tỏ các cụm là khác biệt, chúng được nối kết hợp lại với nhau.