KỸ THUẬT MÃ HÓA HISTOGRAM TỪ KHUNG XƯƠNG, GIẢ

Một phần của tài liệu Phương pháp trích chọn đặc trưng cho bài toán nhận dạng chữ Nôm (Trang 51)

1) Tiền xử lý

4.5KỸ THUẬT MÃ HÓA HISTOGRAM TỪ KHUNG XƯƠNG, GIẢ

KHUNG

Với khung xương, từ ảnh đầu vào đã chuẩn hóa của chữ Nom, mạng nơ-ron PCNN được sử dụng để lấy khung xương dọc và khung xương ngang

a. Ảnh gốc b. Khung xương ảnh (convert điểm ảnh và

điểm nền)

c. Khung xương ngang d. Khung xương đứng

Hình 4.17. Mô tả khung xương, khung xương dọc, khung xương ngang

của chữ Nôm

Với giả khung, từ ảnh đầu vào đã chuẩn hóa của chữ Nom, lần lượt áp dụng các phép toán logic “Dịch chuyển điểm ảnh”, “Và hai ảnh”, “Hoặc loại trừ hai ảnh” như trình bày ở trên ta thu được giả khung ngang và giả khung dọc. Sau khi có khung xương ngang và khung xương dọc (giả khung ngang và giả khung dọc) ta tiến hành lấy biểu đồ histogram.

a. Khung xương ngang

b. Histogram của khung xương ngang

c. Khung xương dọc

d. Histogram của khung xương dọc

a. Giả khung ngang

b. Histogram của giả khung ngang

c. Giả khung dọc d. Histogram của giả khung dọc

Hình 4.19. Mô tả lấy histogram của giả khung dọc và giả khung ngang

Để mã hóa một Histogram ta chia histogram đó ra các đoạn (G1, G2…), được mô tả một cách hình tượng như hình sau.

Hình 4.20. Mô tả phân đoạn histogram

Mỗi đoạn phân ra phải gán nhãn cho chúng bằng tập nhãn { L, M, S, U}. Qua thực nghiệm nhóm nghiên cứu Ming-Gang Wen, Kuo-Chin Fan và Chin-Chuan Han [16] đã đưa ra giá trị ngưỡng cho từng loại phân đoạn như sau:

Phân đoạn S có ngưỡng là Phân đoạn M có ngưỡng là Phân đoạn L có ngưỡng là

Phân đoạn U có ngưỡng nhỏ hơn

) 8 / ( * * 3 , 0 H Sin ) 8 / ( * * 5 , 0 H Sin  ) 8 / ( * * 85 , 0 H Sin  ) 8 / ( * * 3 , 0 H Sin  (4.7) (4.8) (4.9) (4.10)

(H là tổng số bin có trong Hitogram)

Quá trình phân đoạn là quá trình tính tổng số pixel trên các bin lớn nhất, liền kề và chưa được xét để so sánh với giá trị ngưỡng trong các phân đoạn. Ưu tiên so sánh đoạn có ngưỡng lớn trước, ngưỡng bé sau. Nếu độ lớn nằm trong ngưỡng nào thì phân đoạn đang xét thuộc loại tương ứng với ngưỡng đó. Kết thúc quá trình phân đoạn ta thu được chuỗi mã của histogram gồm các ký tự L, M, S, U tùy vào Histogram. Với chuỗi mã thu được, tính hệ số cho chúng như sau

• Phân đoạn loại S: 1 • Phân đoạn loại M: 2 • Phân đoạn loại L: 4 • Phân đoạn loại U: 0

Sau đó trọng số của chuỗi mã được tính như sau

4*|Số lượng mã L| + 2*|Số lượng mã M|+1*|Số lượng mã S|

Áp dụng phương pháp trên cho các khung xương lấy theo chiều ngang và chiều dọc của chữ Nôm ta được chuỗi mã, bổ sung các Điểm ảnh tương đối của khung xương ta thu được chuỗi mã hoàn chỉnh. Cách tính điểm ảnh tương đối của khung xương như sau:

- Iw là chiều rộng ảnh tính theo pixel;

- Ih là chiều cao ảnh tính theo pixel;

- Hh là tập các bin có trong Histogram lấy trên các điểm ảnh thuộc (adsbygoogle = window.adsbygoogle || []).push({});

cạnh ngang của khung xương (H-Histogram);

- Hv là tập các bin có trong Histogram lấy trên các điểm ảnh thuộc

cạnh đứng của khung xương (V-Histogram).

Thuật toán tạo chuỗi mã

      v h i H h i H i w i I H I H f1 / / (4.11) (4.12)

Thuật toán được nhóm tác giả Ming-Gang Wen, Kuo-Chin Fan và Chin-Chuan [16] đề xuất như sau:

Bước 1:

Tìm vị trí  có giá trị lớn nhất H và chưa được đánh dấu trong biểu đồ Hh hoặc Hv Gán giá trị của  cho biến Total_Pixel và đánh dấu nó trở thành một phần của G

Bước 2:

Nếu không tìm thấy  thì quay về bước 9

Bước 3:

Chọn gía trị lớn hơn từ láng giềng của G, đánh dấu nó và thêm nó vào G. Cộng thêm giá trị của nó trên Hh (hoặc Hv) vào biến Total_Pixel

Bước 4:

Nếu độ lớn của G nhỏ hơn khoảng L (length(G) < rangL) thì chuyển về bước 3. Hoặc nếu Total_Pixel lớn hơn hoặc bằng ngưỡng của L (Total_Pixel >=ThresholdL) thì Code[]=’L’, sau đó quay lại bước 1

Ngược lại nếu không rơi vào một trong hai trường hợp trên thì khởi tạo lại G bằng cách bỏ đánh dấu, sau đó gán Total_Pixel =H

Bước 5:

Chọn gía trị lớn hơn từ láng giềng chưa đánh dấu của G, đánh dấu nó và thêm nó vào G.

Cộng thêm giá trị của nó trên Hh (hoặc Hv) vào biến Total_Pixel Bước 6:

Nếu độ lớn của G nhỏ hơn khoảng M (length(G) < rangM) thì chuyển về bước 5 Hoặc nếu Total_Pixel lớn hơn hoặc bằng ngưỡng của M (Total_Pixel >=ThresholdM) thì Code[]=’M’, sau đó Quay lại bước 1

Ngược lại nếu không rơi vào một trong hai trường hợp trên thì khởi tạo lại G bằng cách bỏ đánh dấu, sau đó gán Total_Pixel =H

Bước 7:

Chọn gía trị lớn hơn từ láng giềng của G, đánh dấu nó và thêm nó vào G. Cộng thêm giá trị của nó trên Hh (hoặc Hv) vào biến Total_Pixel

Bước 8:

Nếu độ lớn của G nhỏ hơn khoảng S (length(G) < rangS) thì chuyển về bước 5 Hoặc nếu Total_Pixel lớn hơn hoặc bằng ngưỡng của S (Total_Pixel >=ThresholdS) thì Code[]=’S’, sau đó Quay lại bước 1

Ngược lại nếu không rơi vào một trong hai trường hợp trên thì khởi tạo lại G bằng cách bỏ đánh dấu, sau đó gán Total_Pixel =H

Bước 9:

Gán Hcode[] hoặc Vcode[] bằng Code[], trả về giá trị

Ví dụ:

với chữ lấy ra H-histogram và V- histogram

Sau khi phân đoạn H-histogram ta thu được chuỗi LML Trọng số LML được tính 2*4 + 1*2 = 10 (adsbygoogle = window.adsbygoogle || []).push({});

Sau khi phân đoạn V-histogram ta thu được chuỗi M Trọng số M được tính 1*2=2

Số điểm ảnh tương đối được tính ra 3.55

Vậy chuỗi mã hoàn chỉnh thu được là: 3.55 10 2 LML M

Bổ sung chỉ số phân bố nét vào chuỗi mã

Một đặc điểm quan trọng của histogram là nó có thể thể hiện các nét chữ ngang và các nét chữ dọc. Tuy nhiên qua quá trình mã hóa trên, sự thể hiện này đã không còn được duy trì, dẫn tới việc nhận dạng thiếu chính xác. Bảng dưới đây là một ví dụ về sự không thể hiện được các nét ngang và nét dọc trong chuỗi mã. Các chữ 1_0_HanNomA_0_0, 491hann60b_0_1, 475HanNomA_0_0, 490NomNaTong_0_1 trong bảng có phân bố nét dọc rất khác nhau, nhưng kết quả mã hóa vẫn cho ra chuỗi mã giống nhau là “LLMU”.

Bảng 4.1. Sự tương quan giữa chuỗi mã và histogram Font chữ Ảnh chữ Giả khung Giả khung ngang Histogr am giả khung ngang Giả khung dọc Histogra m giả khung dọc ngang dọc 1_0_HanNomA_0_0 LMSU LLMU

491hann60b_0_1 LLSU LLMU

475HanNomA_0

_0 LLMU LLMU

490NomNaTong

_0_1 LLMU LLMU

Ở bảng trên ta thấy chuỗi mã dọc của các font chữ trong bảng đều là LLMU nhưng histogram lấy từ giả khung dọc trên mỗi chữ khác nhau khá nhiều. Tương tự vậy, hai chữ 475HanNomA_0_0 490NomNaTong_0_1 có mã ngang là LLMU nhưng histogram ngàng lấy từ giả khung của chúng lại khác nhau rất nhiều. Điều này cho thấy nếu chỉ dựa vào chuỗi mã để nhận dạng thì độ chính xác chưa cao. Với cách nhận dạng theo String Edit-distance [8], kết quả thực nghiệm theo K-fold cross validation trên 3 bộ font Hán nôm A, Hán nôm B và Nôm na tông, mỗi bộ lấy hai kiểu chữ (chữ thường và chữ đậm), tổng số mẫu thử là 2970 chữ chia thành 6

tập sau: HanNomA_0_0; HanNomA_0_1; HanNomB_0_0;

HanNomB_0_1; NomNaTong_0_0; NomNaTong_0_1. Qua 6 lần thử nghiệm với cách thử lấy 5 bộ font huấn luyện, 1 bộ font còn lại để nhận dạng, kết quả nhận dạng đúng trung bình đạt 66%, độ nhiễu nhạn dạng khá lớn (có chữ đưa vào nhận dạng, kết quả đưa ra là một tập 12 chữ khác nhau, trong đó có 1 chữ đúng).

Từ thực trạng đó tác giả luận văn đưa ra sáng kiến lấy thêm một đặc trưng nữa bằng cách chia histogram ra thành lưới 10x10. Với histogram dọc, trên mỗi cột từ 1 đến 10 của ô lưới tìm bin có chiều cao cao nhất, chiếu theo chiều ngang của dòng từ 1 đến 10 trên ô lưới, nếu nó cao đến dòng nào thì gán giá trị cho nó bằng chỉ số của dòng đó, kết thúc ta có thêm chuỗi mã thể hiện 10 nét viết chính theo chiều dọc của chữ.

Hình 4.21. Mô tả chia lưới trên histogram dọc

Tương tự trên ta cũng chia lưới 10x10 cho histogram ngang. Tìm các bin dài nhất trên mỗi hàng (từ 1 đến 10) của lưới, chiếu theo các cột từ 1 đến 10 của lưới để tìm độ dài và gán nhãn dài cho bin dài nhất trên mỗi dàng lưới đó, kết thúc ta thu được thêm một đặc trưng thể hiện 10 nét viết chính theo chiều ngang của chữ.

Hình 4.22. Mô tả chia lưới trên histogram ngang

Qua thực nghiệm với cùng cách nhận dạng theo String Edit- distance [8], cùng mô hình k-fold cross validation với K=6 trên cùng bộ dữ liêu thử nghiệm mô tả trên, kết quả nhận dạng cải tiến rõ rệt, xác suất nhận đúng trung bình tăng từ 66% lên 76%, độ nhiễu giảm đáng kể.

Ví dụ 1: Lấy đặc chưng của chữ theo giả khung:

Lấy H-histogram và V- histogram của giả khung. Sau khi phân đoạn H-histogram cảu giả khung ta thu được chuỗi LU

Trọng số LU được tính 1*4 + 1*0 = 4

Sau khi phân đoạn V-histogram của giả khung ta thu được chuỗi LLMU

Số điểm ảnh tương đối được tính ra 3.658536 Chuỗi mã phần bố nét ngang là 5000320008 Chuỗi mã phần bố nét dọc là 0000800000 Vậy chuỗi mã hoàn chỉnh thu được là:

3.658536 4 10 LU LLMU 0000800000 5000320008

Ví dụ 2: Lấy đặc chưng của chữ theo khung xương:

Lấy H-histogram và V- histogram của khung xương. Sau khi phân đoạn H-histogram của khung xương ta thu được chuỗi M

Trọng số M được tính 1*2 = 2

Sau khi phân đoạn V-histogram của giả khung ta thu được chuỗi MLM

Trọng số MLM được tính 1*4 + 2*2 = 8 Số điểm ảnh tương đối được tính ra 3.390244 Chuỗi mã phần bố nét ngang là 6000400008 Chuỗi mã phần bố nét dọc là 0000080000 Vậy chuỗi mã hoàn chỉnh thu được là: 3.3902442 8 M MLM 0000080000 6000400008 (adsbygoogle = window.adsbygoogle || []).push({});

Quy trình lấy đặc trưng của chữ trên giả khung

- Xử lý theo khung xương

Bảng 4.2. Lấy histogram từ khung xương Ảnh gốc Giả khung Giả khung

ngang Histogram giả khung ngang Giả khung dọc Histogram giả khung dọc - Tạo chuỗi mã

Bảng 4.3. Lấy chuỗi mã từ khung xương Pixel tương đối Trọng số dọc Trọng số ngang gọc ngang Mã phân bố nét dọc Mã phân bố nét dọc 3.658536 4 10 LU LLMU 0000800000 5000320008

Quy trình lấy đặc trưng của chữ trên khung xương

- Xử lý theo khung xương

Bảng 4.4. Lấy histogram từ giả khung Ảnh gốc Khung xương Khung xương ngang Histogram khung xương ngang Khung xương dọc Histogram khung xương dọc - Chuỗi mã

Bảng 4.5. Lấy chuỗi mã từ giả khung Pixel tương đối Trọng số dọc Trọng số ngang dọc ngang Mã phân bố nét dọc Mã phân bố nét dọc 3.390244 2 8 M MLM 0000080000 6000400008

Một phần của tài liệu Phương pháp trích chọn đặc trưng cho bài toán nhận dạng chữ Nôm (Trang 51)