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);