Từ ảnh nhị phân thu được ở bước tiền xử lý, tách lấy các đối tượng (các thành phần liên thông), mỗi đối tượng được biểu diễn bằng hình chữ nhật bao quanh nó, trong đó:
58 wb, hb: Kích thước của đối tượng
Để việc lọc các đối tượng được chính xác, chia các đối tượng làm 3 lớp, dựa trên kích thước của các đối tượng:
+ Nhỏ: Lớp các đối tượng là dấu của ký tự, dấu chấm của đường cơ sở,
nhiễu,… (wb < wmin hoặc hb < hmin).
+ Lớn: Lớp các đối tượng là ảnh chân dung hoặc các đường viền (wb >
wmax hoặc hb > hmax).
+ Vừa: Gồm các đối tượng còn lại, lớp các đối tượng có thể là ký tự.
Từ các đối tượng thuộc lớp vừa, lọc lấy các đối tượng thuộc mặt nạ của mỗi dòng. Một đối tượng được cho là thuộc mặt nạ của một dòng nếu tâm của nó nằm trong hình chữ nhật của mặt nạ dòng đó. Lúc này mỗi dòng sẽ được biểu diễn bằng một danh sách các đối tượng, thuật toán 3.7. Tuy nhiên, trong danh sách này vẫn có các ký tự là tiêu đề của các trường, các nhiễu, hoặc thiếu các ký tự của phần thông tin, do đó cần các bước hậu xử lý tiếp theo.
Thuật toán 3.7. Tách các ký tự thuộc mỗi dòng Input:
1. Mặt nạ dòng: LMask = {bMaskk} 2. Ảnh nhị phân: IBin
Output: Danh sách các ký tự thuộc các dòng: LLine = {LChark
Bước 1. Tách lấy các thành phần liên thông từ IBin: LCCs = {bCCsi}
Bước 2. Chia LCCs là 3 lớp:
a. Nhỏ: LSmall = {bCCsi | wbCCsi < wmin OR hbCCsi < hmin} b. Lớn: LLarge = {bCCsi | wbCCsi > wmax OR hbCCsi > hmax}
c. Vừa: LMean = {bMeani} = {bCCsi | bCCsi LSmall AND bCCsi LLarge}
Bước 3. Lọc lấy các ký tự thuộc mỗi dòng:
LChark = {bMeani | (xMeani, yMeani) bMaskk} Trong đó:
59
yMeani = ybMeani + hbMeani / 2