Chƣơng 3 TIỀN XỬ LÝ CHỮ NÔM TRÊN DI ĐỘNG
3.2. Các phƣơng pháp tiền xử lý áp dụng, đề xuất
Nhị phân hóa ảnh
Vì hạn chế về khả năng xử lý của thiết bị di động, cũng như tham khảo từ các tổng hợp về các phương pháp nhị phân hóa ảnh [12], chúng tôi lựa chọn sử dụng thuật toán nhị phân hóa sữ dụng ngưỡng toàn cục, với thuật toát xác định ngưỡng của Otsu.
Thuật toán xác định ngưỡng Otsu
Đầu vào: ảnh xám (grey) Đầu ra: ngưỡng nhị phân
(background), nền (foreground) và giá trị ngưỡng. Sau đó lựa chọn threshold có tổng phương sai giữa nền và nội dung là nhỏ nhất.
Minh họa thuật toán với một ảnh 6x6 như sau [9]:
Hình 17 Minh họa đầu vào của nhị phân hóa Otsu
Với threshold = 3, độ sai lệch của nội dung và nền so với threshold được tính như sau: Hình 18 Histogram nền Tỉ lệ : 𝑊𝑏 = 8+7+2 36 = 0.4722 Độ xám trung bình : µ𝑏 = 0 ×8 + 1 × 7 + (2 × 2) 17 = 0.6471 Phương sai:𝜎𝑏2 = 0−0.6471 2×8 + 1−0.6471 2×7 + (2−0.6471)2×2) 17 = 0.4637
Hình 19 Histogram nội dung Tỉ lệ: 𝑊𝑓 = 6+9+4 36 = 0.5278 Độ xám trung bình: µ𝑓 = 3 ×6 + 4 × 9 + (5 × 4) 19 = 3.8947 Phương sai:𝜎𝑓2 = 3 −3.8947 2× 6 + 4 −3.8947 2×9 + (5 −3.8947)2× 4) 19 = 0.5152
Phương sai trong của nội dung và nền (within class variance):
𝜎𝑊2 = 𝑊𝑏𝜎𝑏2 + 𝑊𝑓𝜎𝑓2 = 0.4772 × 0.4637 + 0.5278 × 0.5152 = 0.4909
Tương tự ta tính giá trị phương sai giữa nội dung và nền với threshold cho các threshold khác như sau:
Thresho ld T=0 T=1 T=2 T=3 T=4 T=5 Tỉ lệ (nội dung) Wb = 0 Wb = 0.222 Wb = 0.4167 Wb = 0.4722 Wb = 0.6389 Wb = 0.8889
bình (nội dung) Phƣơng sai (nội dung) σ2 b = 0 σ2 b = 0 σ2 b = 0.2489 σ2 b = 0.4637 σ2 b = 1.4102 σ2 b = 2.5303 Tỉ lệ (nền) Wf = 1 Wf = 0.7778 Wf = 0.5833 Wf = 0.5278 Wf = 0.3611 Wf = 0.1111 Trung bình (nền) Mf = 2.3611 Mf = 3.0357 Mf = 3.7143 Mf = 3.8947 Mf = 4.3077 Mf = 5.000 Phƣơng sai (nền) σ2 f = 3.1196 σ2 f = 1.9639 σ2 f = 0.7755 σ2 f = 0.5152 σ2 f = 0.2130 σ2 f = 0 Phƣơng sai trong nội dung và nền σ2 W = 3.1196 σ2 W = 1.5268 σ2 W = 0.5561 σ2 W = 0.4909 σ2 W = 0.9779 σ2 W = 2.2491
Bảng 1 Các giá trị phương sai
Từ các kết quả trên, ta kết luận threshold = 3 là giá trị có phương sai giữa nội dung và nền bé nhất, do đó đây là giá trị được chọn. Tất cả điểm ảnh có giá trị mầu < 3 sẽ là nền, phần còn lại là nội dung.
Hình 20 Kết quả nhị phân hóa Otsu Thuật toán
1. Tính toán histogram của ảnh xám
2. Duyệt qua tất cả các giá trị threshold có thể (các mức xám của ảnh) 3. Tính toán phương sai trong nội dung và nền của giá trị threshold được
chọn
4. Threshold của ảnh sẽ là giá trị mà tại đó phương sai trong (within class
variance) của nội dung và nền là lớn nhất. Đánh giá thuật toán
Mức độ chính xác: Kết quả của bước nhị phân hóa ảnh chính xác hay không tùy thuộc vào bài toán được áp dụng. Tuy nhiên, dựa vào những đánh giá được tham khảo từ [12], thì thuật toán Otsu đã được đánh giá là một thuật toán có độ chính xác cao, thời gian xử lý nhanh và được áp dụng rộng rãi.
Độ phức tạp: O(n2
Tính dễ cài đặt: Thuật toán chỉ có 4 bước, các bước thực hiện tính toán không phức tạp. Thuật toán dễ cài đặt.
Phát hiện và xử lý nghiêng, lệch
Như đã được trình bày ở chương 3, phát hiện và xử lý nghiêng là một bước cần thiết, vì thông thường ảnh chụp từ mảy ảnh của thiết bị di động, ít nhiều sẽ không được chụp đúng góc làm ảnh chụp thường bị nghiêng, ảnh hưởng đến độ chính xác của các bước xử lý tiếp theo (phân trang, tách chữ).
Thông thường có hai trường hợp nghiêng như sau:
- Chụp nghiêng: trong trường hợp này, người chụp đặt thiết bị vuông góc (hoặc xấp xỉ vuông góc) với đường trực giao của mặt phẳng chứa chữ, tuy nhiên phương chụp không song song với phương của chữ (lệch một góc α). Dẫn đến ảnh chụp được bị nghiêng.
Hình 21 Chụp nghiêng
- Chụp lệch: trong trường hợp này, người chụp đặt thiết bị không vuông góc
với đường thẳng trực giao với mặt phẳng chữ. Do đó, ảnh chụp bị lệch, méo.
Trong giới hạn của luận văn này, chúng tôi tập trung tìm hiểu đề xuất phương pháp để phát hiện và xử lý nghiêng cho trường hợp thứ nhất. Cho trường hợp thứ hai, do tính phức tạp cao hơn cũng như ít gặp hơn, trong thời gian nghiên cứu có giới hạn, chúng tôi chưa tiến hành nghiên cứu.
Để tiến hành xử lý nghiêng cho chữ Nôm, chúng tôi tiến hành tìm hiểu và tham khảo các thuật toán đã được áp dụng. Dựa trên thuật toán xử lý nghiêng cho văn bản chụp từ sách chữ latin của Wojciech Bieniechki [11], chúng tôi đề xuất phương pháp phát hiện và xử lý nghiêng cho chữ Nôm.
Phương pháp xử lý nghiêng của Wojciech Bieniechki được trình bày như sau: Ý tưởng là tìm một đường thẳng bên trái của vùng chữ. Độ dốc của đường này chính là góc xoay của vùng chữ.
Bước 1: Xác định các điểm đen trái nhất
Đầu tiên, ảnh sẻ được chuyển thành ảnh nhị phân, nhằm tăng tốc độ xử lý. Sau đó mỗi hàng ngang thứ k được quét từ trái sang phải, và điểm đen xuất hiện đầu tiên trong mỗi hàng sẽ được chứa trong mảng Tab.
Tab = ((x1, y1), (x2, y2),..., (xn, yn) (7)
Hình 23 Xác định các điểm trái
k càng nhỏ càng làm tăng độ chính xác nhưng lại làm chậm quá trình xử lý. Bước 2: Xác định điểm đen nằm trên đường biên trái
Bước tiếp theo, xác định điểm đen nào sẽ là điểm nằm trên đường biên bên trái.Ảnh có thể bị quay theo chiều kim đồng hồ hoặc ngược chiều kim đồng hồ. Trong trường hợp quay theo chiều kim đồng hồ, chúng ta nên xóa những điểm nằm ở phần dưới của vùng chữ.
Hình 24 Loại bỏ điểm dưới Khởi tạo 2 tập các điểm thỏa mãn các điều kiện sau:
Tab1 = {xi, yi: sao cho i = 1…,n và xi-1> xi} Tab2 = Tab \ Tab1
Sau đó, chọn tập mà biểu diễn một đường “dọc hơn”, ví dụ tập lớn hơn trong 2 tập này, xem như hướng đứng nhiều hơn là nằm ngang.
TabN = Tab1 nếu |Tab1| > |Tab2| hoặc Tab2 cho các trường hợp khác.
Bước tiếp theo, loại bỏ các điểm được đánh dấu đỏ trong hình.
Hình 25 Loại bỏ điểm lùi
Tiêu chuẩn cho những điểm này là độ dời trung bình tọa độ x cho các điểm liên tục từ TabN. Đặt tên tập này là TabS.
dx = meani=1…k(xi – xi-1) với (xi, yi) ∈ TabN
TabS = {(xk, yk), (xi, yi) ∈ TabN, với i = 1…k, |xi – xi-1 – dx| < 0.1*dx
Bước 3: Xác định đường dốc và góc nghiêng tương ứng
Sau đó lấy 2 điểm từ TabS, pmin và pmax, có x tương ứng là nhỏ nhất và lớn nhất
Hình 26 Xác định góc nghiêng
Theo đánh giá của chúng tôi, thuật toán trên có một số hạn chế như sau:
Khi số lượng các điểm đen bên trái nằm trên đường biên ít hơn các điểm
không nằm trên đường biên (hay xảy ra với chữ Nôm viết thưa) thì thuật khó đạt độ chính xác cao.
Khi khoảng cách giữa các dòng lớn thì dx sẽ có giá trị lớn, do đó việc xác định các phần tử của TabS khó chính xác.
Từ ý tưởng tìm các điểm thuộc đường biên bên trái của thuật toán trên, chúng tôi đề xuất thuật toán phát hiện và xử lý nghiêng cho chữ Nôm như sau:
Đầu vào: ảnh nhị phân (đã khử nhiễu). Đầu ra: Góc nghiêng của ảnh
Thuật toán:
1. Xác định điểm đen trái nhất I (x,y)
2. Xác định chiều nghiêng. Chiều nghiêng được định nghĩa như sau:
a. Nghiêng sang trái nếu I nằm ở nữa trên.
b. Nghiêng sang phải nếu I nằm ở nữa dưới.
3. Duyệt từ trái sang phải để tìm các điểm đen bên trái a. Từ I đi lên (nếu nghiêng sang phải)
b. Từ I đi xuống (nếu nghiêng sang trái)
c. Với khoảng cách 𝛻y,ta có tập T((x1, y1), (x2, y2),…, (xn, yn))
4. Xác định các góc hợp bởi phương thẳng đứng với đường thẳng đi qua I
và các điểm đen bên trái. a. 𝛼𝑖 = tan−1 𝑦− 𝑦𝑖
𝑥− 𝑥𝑖 (nếu nghiêng sang trái) b. 𝛼𝑖 = tan−1 𝑦𝑖− 𝑦
𝑥𝑖− 𝑥 (nếu nghiêng sang phải)
5. Góc nghiêng sẽ là góc
a. Bé nhất nếu nghiêng sang trái
Hình 27 Minh họa thuật toán xác định góc nghiêng Điều kiện để thuật toán chạy đúng:
Thuật toán yêu cầu một số điều kiện như sau (nếu không thõa mản, thuật toán có thể đưa ra kết quả không chính xác)
Vùng chữ trong ảnh chụp phải nằm ở trung tâm của ảnh vào.
Nếu ảnh bị nghiêng, phần lề trái của vùng chữ phải chiếm đa số vùng ảnh.
Để giúp cho những điều kiện trên được thõa mãn, ứng dụng nhận dạng phải cung cấp một vùng lựa chọn cho phép người dùng lựa chọn vùng chữ. Phương pháp lựa chọn vùng chữ này cũng được áp dụng trên các ứng dụng nhận dạng của các ngôn ngữ khác.
Đánh giá thuật toán
Mức độ chính xác: Vì dựa vào giá trị các điểm ảnh độc lập, nên thuật toán có thể không hoạt động nếu ảnh đầu vào có nhiễu.
Độ phức tạp: Với ảnh đầu vào có kích thước (n x n) thì độ phức tạp tính
toán của thuật toán là: O(n2
)
Tính dễ cài đặt: Các tính toán, xử lý mà thuật toán sử dụng không phức
tạp, do đó thuật toán dễ dàng để cài đặt.
Tách chữ
Phân đoạn tách chữ được xem là một trong những bước chính của tiền xử lý. Các phương pháp phân đoạn tách chữ thường áp dụng cho đặc thù ngôn ngữ, phương pháp này có thể hiệu quả với ngôn ngữ này, nhưng lại không phù hợp cho một loại ngôn ngữ khác. Nguyên nhân chủ yếu là do cấu tạo, các trình bày các ngôn ngữ khác nhau.
Chữ Nôm thường được trình bày theo hàng và cột, các chữ được viết cùng kích thước, thẳng hàng và gióng cột, do đó phương pháp tách chữ không quá phức tạp. Dựa trên histogram chiều ngang và chiều dọc, chúng tôi đã sử dụng một phương pháp đơn giản để tách chữ Nôm ra từ ảnh chụp.
Đầu vào: ảnh nhị phân (đã xử lý nghiêng) của vùng chữ Đầu ra: các chữ được tách ra
Thuật toán
1. Chiếu histogram theo chiều ngang của vùng chữ. Đường biên bao các hàng là đường ngang xuất phát từ điểm có giá trị histogram là min.
2. Chiếu histogram theo chiều dọc của vùng chữ. Đường biên bao các cột là
đường dọc xuất phát từ điểm có giá trị histogram là min. 3. Giao các cột và hàng cho ta vị trí các chữ.
Hình 28 Ảnh gốc với minh họa hàng cột
Hình 29 Chiếu histogram theo chiều ngang
Hình 30 Chiếu histogram theo chiều dọc Điều kiện để thuật toán chạy đúng:
Vì thuật toán đơn giản, nên để thuật toán chạy đúng, vùng chữ được chụp phải thỏa mãn điều kiện:
Các chữ tách nhau (không sát liền nhau)
Các chữ thẳng hàng và gióng cột
Kích thước các chữ bằng nhau
Đánh giá thuật toán
Mức độ chính xác: vì thuật toán dựa vào kết quả chiếu histogram theo các chiều, đường bao là đường tại đó histogram min, do đó khi các chữ được viết sát, kề nhau, thuật toán sẽ cho độ chính xác không cao.
Độ phức tạp:Với ảnh đầu vào có kích thước (nxn), độ phức tạp của thuật
toán là O(n2
)
Tính dễ cài đặt: Thuật toán bao gồm 3 bước, phức tạp nhất là tính toán
histogram, tuy nhiên đây là một tính toán đơn giản, do đó thuật toán dễ để cài đặt.
Tổng kết chƣơng 3
Trong chương 3, chúng tôi đã trình bày về các thuật toán tiền xử lý chúng tôi đã nghiên cứu, và đề xuất để áp dụng vào xây dựng hệ thống nhận dạng chữ Nôm trên thiết bị di động. Các thuật toán đã được trình bày với các nội dung: đầu vào, đầu ra, thuật toán và đánh giá thuật toán về các tiêu chí độ chính xác, độ phức tạp tính toán và tính dễ cài đặt.