Các lân cận của điểm ảnh( Image Neighbors)

Một phần của tài liệu (LUẬN văn THẠC sĩ) nghiên cứu trích chọn đặc trưng ứng dụng cho tìm kiếm từ trong ảnh tài liệu (Trang 45 - 52)

2.3 .Trích chọn đặc trưng ứng dụng cho tìm kiếm từ trong ảnh tài liệu

2.3.3 .Một số thao tác trên ảnh nhị phân

2.3.3.1. Các lân cận của điểm ảnh( Image Neighbors)

Ta ký hiệu B[x,y] là điểm ảnh ở vị trí hàng x và cột y của ảnh. Ta có một ảnh kích thước MxN có M dòng bắt đầu từ 0 đến M-1 và N cột bắt đầu từ 0 đến N-1. Điểm ảnh ở bên trên cùng phía bên tay trái của ảnh sẽ là B[0,0] và điểm ảnh ở tận cùng phía bên tay phải của ảnh là B[M-1,N-1].

Có hai định nghĩa về các điểm lân cận là 4 điểm lân cận và 8 điểm lân cận. Điểm ảnh P có 4 điểm lân cận gần nhất theo chiều đứng và ngang (có thể coi như lân cận 4 hướng chính: Đông, Tây, Nam, Bắc). Một điểm ảnh p tại tọa độ (x, y) có: -Tập 4-lân-cận-ngang-dọc: N4(p) = {(x + 1, y), (x – 1, y), (x, y +1), (x, y – 1)}

-Tập 4-lân-cận-chéo: Nd(p) = {(x+1, y+1),(x+1,y–1),(x – 1, y+1),(x – 1,y – 1)}

Hình 2.14 Lân cận các điểm ảnh của tọa độ (x, y)

2.3.3.2.Gán nhãn các thành phần liên thông (CCL-Connected Components Labeling )

Giả sử rằng B là một ảnh nhị phân và hai điểm ảnh có tọa độ B(r,c) = B(r',c') = v. Trong đó, v có giá bằng 0 hoặc bằng 1. Điểm ảnh (r,c) được liên thông với điểm ảnh (r',c') theo giá trị v nếu có một dãy các điểm ảnh (r,c) = (r0,c0), (r1,c1), ..., (rn,cn)=(r',c') trong đó B(ri,ci) = v, i = 0,...,n và (ri ,ci) là láng riềng với (ri-1,ci-1) với mỗi i=1,...n. Dãy điểm ảnh (r0,c0)...(rn,cn) tạo nên một đường liên kết từ (r,c) đến (r',c'). Một thành phần liên thông của giá trị v là một tập các điểm ảnh C, mỗi điểm ảnh có giá trị v, sao cho mỗi cặp của điểm ảnh trong tập là được liên thông có cùng giá trị v. Để xác định thành phần liên thông trên một ảnh, ta nhóm các điểm ảnh vào các thành phần dựa vào tính kết nối của các điểm ảnh. Tất cả các điểm ảnh trong một thành phần liên thông cùng chia sẻ các giá trị điểm ảnh tương tự nhau và có đường đi giữa hai điểm bất kỳ. Khả năng liên thông có thể được sử dụng: liên thông 4 hoặc liên thông 8.

Hình 2.15 Các khả năng liên thông được sử dụng

Nhãn chỉ là một ký hiệu mà đặt tên duy nhất cho một thành phần. Cũng có thể dùng cách chữ cái để làm ký hiệu nhưng thông thường để thuận tiện người ta hay dùng các số nguyên dương lớn hơn không.

Hình 2.16 Ảnh nhị phân và gán nhãn cho các thành phần liên kết

Giả sử rằng B là một ảnh nhị phân với MaxRow+1 hàng và MaxCol+1 cột. Chúng ta muốn tìm những thành phần liên kết trên 1 điểm ảnh và một ảnh đầu ra có đã gán nhãn. Có nhiều thuật toán khác nhau để thao tác với thành phần liên thông. Nhưng trong luận văn này được dùng là thuật toán đánh nhãn theo từng dòng (Row- by-row Labeling Algorithm ) sử dụng cấu trúc Union-Find. Mục đích sử dụng cấu trúc Union – Find là lưu một tập các tập rời rạc và thực hiện các thao tác Union ( gộp hai tập thành một ) và thủ tục Find ( xác định một thành phần nào đó có thuộc bên trong một tập hay không).

Nhìn một cách tổng quan, giải pháp có sử dụng Union-Find này cũng trải qua 2 lần duyệt ảnh nên nó thuộc nhóm các thuật giải CCL(Connected Component Labeling) 2 pass. Tuy nhiên việc ứng dụng Union Find đã giải quyết vấn đề tối ưu cấu trúc dữ liệu, giúp làm tăng đáng kể tốc độ xử lí, thoát ra khỏi những hướng đi cũ. Không giống như phương pháp đã trình bày, thuật toán này không tiến hành đánh nhãn ngay trong bước 1 mà chỉ thực hiện việc xây dựng cây để kết nối các nốt (mỗi điểm ảnh của từ (Foreground pixel ) là một nốt với một nhãn được khởi tạo tăng dần ban đầu). Kết quả cuối cùng thu được của lần duyệt hình đầu tiên (Union) là một cây duy nhất thể hiện mối liên kết giữa các nhãn, các cặp nhãn tương thích như đã đề cập ở bài viết trước sẽ có quan hệ nốt cha và con. Bước 2 (Find) sẽ tiến hành việc đánh nhãn dựa trên kết quả thu về từ bước 1. Do điểm đặc biệt làm nên hiệu quả của Union-Find chính là ở cấu trúc dữ liệu nó sử dụng nên đôi khi người ta còn đánh đồng giải thuật này là cấu trúc Union-Find (Union-Find structures). Trong thực hành, cấu trúc này thường được biểu diễn dựa trên một mảng 1 chiều kí hiệu là

PARENT, trong đó chỉ mục (index) của mảng lần lượt đại diện cho các nốt có nhãn tương ứng, giá trị của phần tử tại từng chỉ mục thể hiện nhãn nốt cha của nốt có nhãn là chỉ mục đó. Trong trường hợp giá trị bằng chỉ mục (hay 0), có nghĩa là nốt được đại diện bởi giá trị chỉ mục đó là nốt gốc (root: không có cha). Để làm chi tiết thêm những gì đã trình bày chúng ta sẽ cùng nhau từng bước xử lý một ví dụ như sau. Cho hình nhị phân và ma trận nhãn của điểm ảnh của từ (Foreground pixel ) đã được khởi tạo tăng dần như là minh họa dưới đây (bên trái là ảnh nhị phân, bên phải là ma trận nhãn đã được khởi tạo)

Hình 2.17 Nhị phân và ma trận nhãn của điểm ảnh nổi (Foreground pixel ) được khởi tạo tăng dần

Ma trận nhãn sẽ được duyệt theo chiều từ trên xuống và trái sang phải. Với những cặp nhãn tương thích, nhãn nhỏ hơn sẽ là cha và nhãn lớn hơn sẽ là node con. Chúng ta sẽ có cấu trúc Union-Find thể hiện qua mảng PARENT như sau:

Hình 2.18 Cấu trúc Union-Find thể hiện qua mảng PARENT

Như vậy về mặt thực hành mảng PARENT ở trên chính là kết quả của quá trình duyệt ảnh (mảng label) lần thứ nhất với tiến trình Union. 1-2, 1-3, 1-4, 1-5, 5- 7, 5-6 là những cặp nhãn tương thích được tìm thấy trong quá trình duyệt. Trước khi tiến hành lần duyệt thứ hai để đánh nhãn chính xác cho từng điểm ảnh, tiến trình Find cho từng nhãn cần được thực hiện để xác định đâu là cha thực sự của các nốt

là cha của 7 chứ không phải 5. Quá trình này bắt đầu từ xét giá trị PARENT[7], ta thấy PARENT[7] = 5 có nghĩa là nốt cha của 7 có nhãn là 5, ta xét tiếp PARENT[5], ta thấy PARENT[5] = 1 có nghĩa là nốt cha của 5 có nhãn là 1, ta xét tiếp PARENT[1], ta thấy PARENT[1] = 1 có nghĩa là 1 là nốt gốc, quá trình xét ngưng vì đã tìm ra 1 mới chính là cha thực sự cần tìm của 7. Sau khi áp dụng Find cho toàn bộ nốt ta có PARENT như sau:

Hình 2.19 Áp dụng Find cho toàn bộ nốt ta có PARENT

Lúc này tiến trình quét ảnh lần hai chỉ làm một nhiệm vụ hết sức đơn giản là đánh nhãn lại cho từng điểm ảnh bằng cách gán giá trị nhãn củ L = PARENT[L].

Lưu ý thành phần 0 trong mảng PARENT không được sử dụng vì giá trị 0 là nhã biểu diễn cho điểm ảnh nền ( Background Pixel ).

Thủ tục Find là một nhã X và mảng PARENT, thủ tục này duyệt ngược từ nhãn X trong cây để tìm xem nhãn gốc của cây mà X nằm trong đó.

*Giải thuật Find:

Tính nhãn cha của một tập

X là một nhãn bất kỳ trong một tập

PARENT là mảng chứa cấu trúc Union-Find

procedure find(X,PARENT) { j:= X; while PARENT[j]!= 0 j:= PARENT[j]; return j; }

Thủ tục Union là hai nhãn X,Y và mảng PARENT. Thủ tục này sẽ gộp tập chứa X vào trong tập chứa Y nếu cần thiết. Nó duyệt ngược bắt đầu từ nhãn X, Y đến các nhãn cha của nó, rồi đến nhãn gốc. Nếu nhãn gốc là giống nhau, nhãn gốc nãy sẽ là nhãn con của nhãn gốc kia. Thủ tục này cũng đánh dấu theo kích thước của tập để gán tập nhỏ hơn vào tập lớn hơn.

*Giải thuật Union

Xây dựng thủ tục Union giữa hai tập

X là nhãn của tập thứ nhất

Y là nhãn của tập thứ hai

PARENT là mảng chứa cấu trúc Union-Find

procedure union(X,Y,PARENT) { j:= X; k:= Y; while PARENT[j]!= 0 j:= PARENT[j]; while PARENT[k]!= 0 k:= PARENT[k]; if j!=k then PARENT[k]:=j; }

Thuật toán gán nhãn cho các thành phần liên thông gồm hai bước:

Bước thứ nhất thực hiện công việc lan truyền nhãn của một điểm ảnh đến các điểm ảnh lân cận của nó theo hướng bên phải và bên trái so với nó. Bất cứ khi nào hai nhãn khác nhau mà lan truyền đến một điểm ảnh, nhãn nhỏ hơn được lan truyền và hai sự bằng nhau giữa hai nhãn lan truyền được đẩy vào cấu trúc Union-Find. Sau bước này các nhãn bằng nhau hoàn toàn được xác định và có nhãn duy nhất.

Bước thứ hai duyệt ảnh và gán lại nhãn cho điểm ảnh từ mảng cấu trúc Union-Find.

ảnh lân cận có giá trị 1 ở phía bên trên và bên trái của một điểm ảnh trung tâm. Còn hàm labels trả về một tập các nhãn hiện thời gán cho một tập điểm ảnh nào đó.

*Thuật toán tìm và gán nhãn cho các thành liên thông

Tìm các thành phần liên thông trong ảnh nhị phân

B là ảnh nhị phân gốc

LB là ảnh nhị phân đã được đánh nhãn cho các thành phần liên thông

procedure connected_components_labeling(B,LB) {

“Khởi tạo mảng PARENT” label:=0;

for i:=0 to MaxLab PARENT[i] :=0;

“Bước 1: Gán nhãn ban đầu đến mỗi dòng L của ảnh”

for L:=0 to MaxRow {

“Khởi tạo tất cả nhãn trên dòn L bằng 0”

for P:=0 to MaxCol LB[L,B]:=0; “Xử lý trên dòng L” for P:=0 to MaxCol { if B[L,B]==1then { A:=prior_neighbors(L,P); if isempty(A) then{ M:=label;label+=1;}; else M:=min(labels(A)); LB[L,P]:=M;

for X in labels(A) and X != M union(M,X,PARENT);

} }

}

“Bước 2: Gán lại nhãn ở bước 1”

for L:= 0 to MaxRow

for P:=0 to MaxCol

if B[L,P]==1

then LB[L,P]:=find(LB[L,P],PARENT); }

Hình 2.20 Ứng dụng thuật toán gán nhãn cho các thành phần liên thông

Nhìn trên hình 2.20 giải thích ứng dụng thuật toán tìm nhãn các thành

phần liên thông với cấu trúc Union-Find cho ảnh nhị phân hình 2.20 a) đưa ra nhãn cho mỗi điểm ảnh sau bước một và hình 2.20 b) đưa ra cấu trúc Union-Find chỉ ra những tập tương đương trong bước một là {{1,2},{3,7},4,5,6}}. hình 2.20 c) chỉ ra ảnh đã được gán nhãn lại qua bước hai. Lúc này các thành phần liên thông sẽ biểu diễn là các vùng trong ảnh và khi đó các đặc trưng về hình dạng hoặc mật độ của vùng sẽ được tính toán phục vụ cho công việc trích chọn đặc trưng.

Một phần của tài liệu (LUẬN văn THẠC sĩ) nghiên cứu trích chọn đặc trưng ứng dụng cho tìm kiếm từ trong ảnh tài liệu (Trang 45 - 52)

Tải bản đầy đủ (PDF)

(82 trang)