Hình 3.6: Ma trận chứa giá trị giao nhau của các đường thẳng Hình 3.7: Thứ tự duyệt ma trận giao điểm để xác định cấu trúc chữ nhật

Một phần của tài liệu Phân tích cấu trúc và nhận dạng biểu mẫu (Trang 47 - 49)

Giải thuật trích cấu trúc chữ nhật:

Đầu vào: Danh sách các đường thẳng ngang/dọc và ma trận giao điểm

(HLList, VLList, R).

Đầu ra: Danh sách các ô nhập dạng chữ nhật (cellList). Giải thuật:

rectList = rỗng; // danh sách chứa các hình chữ nhật liền nhau.

cellList = rỗng;

for(i = 0; i < HLList.length()-1; i++){ // duyệt từng dòng ma trận

j = top_left(i,R); // tìm cột chứa nút bắt đầu của ô dạng chữ nhật (Rij = 1)

if(j != 0){ // nếu xuất hiện

rectList.clear();// xóa rỗng danh sách hình chữ nhật

k = bottom_left(j,R); //tìm dòng trong cột j có chứa nút giá trị khác không (Rkj = 7).

if(k != 0) {// nếu có

// tạo danh sách các hình chữ nhật kề nhau

rectList = createRectList(i, j, HLList, VLList);

// bổ sung danh sách các hình chữ nhật vào danh sách ô nhập.

cellList.add(rectList);

// đánh dấu đã xét các đường thẳng tạo nên cấu trúc

markSelectedHL(i,k,HLList); } } } return cellList; 3.2.3.2. Dạng răng cưa

Đây là cấu trúc mở, không giới hạn phía trên và chỉ có một đường thẳng ngang dưới đáy nên chỉ cần xét mỗi lần một đường thẳng ngang (một dòng) trong

ma trận giao điểm. Thứ tự duyệt ma trận giao điểm là từ trên xuống dưới và từ trái qua phải.

Với quy ước là sau khi tất cả ô nhập dạng chữ nhật đã được trích và xem các ô nhập này như một dạng đặc biệt của ô nhập dạng chữ nhật (thiếu một cạnh phía trên), giải thuật trích cấu trúc “răng cưa” như sau:

Đầu vào: Danh sách các đường thẳng ngang/dọc và ma trận giao điểm

(HLList, VLList, R).

Đầu ra: Danh sách các ô nhập dạng “răng cưa” (cellList).

Giải thuật:

rectList = rỗng; // danh sách chứa các hình chữ nhật liền nhau.

cellList = rỗng;

for(i = 0; i < HLList.length(); i++){ // duyệt từng dòng ma trận

// Bỏ qua các đường thẳng ngang đã là thành phần cấu trúc khác

if(checkSelectedHL(i,R) == true) continue;

j = left(i,R); // tìm cột chứa nút bắt đầu của ô dạng “răng cưa” (Rij = 7)

if(j != 0){ // nếu xuất hiện

rectList.clear();// xóa rỗng danh sách hình chữ nhật

// tạo danh sách các hình chữ nhật kề nhau

rectList = createRectList(i, j, HLList, VLList);

// bổ sung danh sách các hình chữ nhật vào danh sách ô nhập.

cellList.add(rectList);

Một phần của tài liệu Phân tích cấu trúc và nhận dạng biểu mẫu (Trang 47 - 49)

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

(95 trang)