Gọi M là tập hợp tất cả các thành phần liên thông của ảnh tài liệu.
Ci là điểm trọng tâm của thành phần liên thông i, đƣợc biểu diễn bởi cặp toạ
độ .
Hình chữ nhật ngoại tiếp thành phần liên thông i đƣợc biểu diễn bởi cặp điểm trên cùng bên trái và điểm dƣới cùng bên phải , chiều cao và chiều rộng tƣơng ứng là ,
Ta có 1 số định nghĩa sau:
Định nghĩa 1: Khoảng cách trọng tâm giữa 2 thành phần liên thông C1 và C2 là:
Trong đó và
Hình 2.16: Góc nghiêng: (a) Δx > Δy, (b) Δx < Δy
Định nghĩa 2: Khoảng cách kẽ hở giữa 2 thành phần liên thông C1 và C2 là:
Định nghĩa 3: C2 đƣợc gọi là láng giềng gần nhất (NN) của C1 nếu: (1) - Nếu : (2) (3) (4) - Nếu : (2) (3)
(4)
Trong đó là hằng số, có giá trị là 1.2
Định nghĩa 4: Chuỗi K láng giềng gần nhất (K-NNC) đƣợc định nghĩa là 1 chuỗi gồm K thành phần liên thông |C1, C2, …, CK| , trong đó Ci+1 là NN của Ci
Hình 2.17: Ví dụ một trang tài liệu bị nghiêng
Hình 2.18: Các chuỗi K-NNC của hình 2.17: (a) K=2, (b) K=3, (c) K≥4, (d) Các đƣờng kết nối với K=2, (e) Các đƣờng kết nối với K=3, (e) Các đƣờng kết nối với K≥4
n=1,2,…N Độ dốc của đƣợc định nghĩa nhƣ sau:
Với các giá trị K có đƣợc, chúng ta có thể thu đƣợc giá trị trung bình của tất cả các độ dốc. Giá trị này sẽ đƣợc dùng để xác định góc nghiêng của ảnh văn bản. Cần lƣu ý là phải xác định K lớn nhất sao cho số lƣợng chuỗi NN có độ dài K phải lớn hơn 1 ngƣỡng cho phép
2.2.3.2. Thuật toán phát hiện góc nghiêng dựa trên phương pháp láng giềng gần nhất
Bƣớc 1: Sử dụng phƣơng pháp dò biên để tìm tất cả các thành phần liên thông trong ảnh.
Bƣớc 2: Sử dụng định nghĩa 3 để tìm NN cho mỗi thành phần liên thông, lƣu ý là có 1 vài thành phần có thể không tìm đƣợc NN.
Bƣớc 3: Xác định các chuỗi NN theo định nghĩa 4
Bƣớc 4: Khởi tạo K là số thành phần liên thông lớn nhất trong các chuỗi NN tìm đƣợc ở bƣớc 3
Bƣớc 5: Tìm N là số chuỗi NN gồm K thành phần liên thông
Bƣớc 6: Nếu N lớn hơn 1 giá trị ngƣỡng cho trƣớc (đƣợc xác định là 3) thì chuyển sang bƣớc 7, ngƣợc lại thì giảm K: K = K – 1 rồi quay lại bƣớc 5
Bƣớc 7: Với mỗi chuỗi K-NN, tính toán độ dốc của nó (n = 1,2,…,N) theo định nghĩa 5
Bƣớc 8: Tìm độ dốc SD là độ dốc trung bình từ những độ dốc đƣợc tính ở bƣớc 7 Bƣớc 9: Tìm góc nghiêng của ảnh văn bản: θ = arctan(SD).180/π
2.2.4. Biến đổi Morphology
Ý tƣởng chính của phƣơng pháp này có thể đƣợc tóm tắt nhƣ sau: Trƣớc hết là quá trình tiền xử lý, đây là quá trình dùng để lọc nhiễu, dấu và những thành phần liên thông lớn. Trong quá trình này các tham số nhƣ chiều cao và chiều rộng đặc trƣng của chữ, … sẽ đƣợc tự động xác định dựa trên văn bản đầu vào. Sau đó, thuật toán ƣớc lƣợng thô sẽ xác định đƣợc khoảng mà góc nghiêng của văn bản rơi vào. Cuối cùng, với những tham số tìm thấy ở bƣớc đầu tiên, sẽ thực hiện các phép đóng và mở cho các dòng văn bản để tạo thành các vệt tạo thuận lợi cho bƣớc xác định góc nghiêng tiếp theo. Sau đó một thuật toán đơn giản sẽ đƣợc dùng để xác định góc của mỗi dòng văn bản và góc nghiêng của toàn bộ văn bản cũng sẽ đƣợc tìm thấy dựa trên góc nghiêng của các dòng văn bản.
2.2.4.1. Tiền xử lý
Trong bƣớc này, chúng ta sẽ lần lƣợt xác định các lƣợc đồ về chiều cao và chiều rộng của tất cả các thành phần liên thông trong văn bản. Chiều cao và chiều rộng xuất hiện nhiều lần nhất của các thành phần liên thông, gọi là W và H, sẽ đƣợc xác định nhờ vào việc tìm ra đỉnh của những lƣợc đồ này. W và H cũng chính là chiều cao và chiều rộng đặc trƣng của các kí tự trong văn bản.
Các thành phần liên thông có chiều cao và chiều rộng nhỏ hơn T0 × min{W, H} đƣợc xem là nhiễu và dấu, tức là đối với mỗi thành phần liên thông c(w, h), trong đó w và h là chiều cao và chiều rộng của nó. Nếu max{w, h} ≤ T0 × min{W, H}, c sẽ bị loại khỏi văn bản chúng ta đang xem xét.
Ngƣợc lại một thành phần liên thông c(w, h) đƣợc gọi là thành phần liên thông lớn khi min{w, h} ≥ 1/T0 × max{W, H}, nó cũng sẽ bị loại ra khỏi ảnh văn bản. T0 đã đƣợc kiểm nghiệm trên nhiều giá trị khác nhau trên nhiều ảnh văn bản và kết quả là giá trị tối ƣu nhất của T0 là 1/4.
2.2.4.2. Ước lượng thô
Sau khi thực hiện bƣớc tiền xử lý, chúng ta sẽ có đƣợc hai ảnh gọi là bottom profile và left profile. Bottom profile đƣợc tạo ra bằng cách thay thế mỗi thành phần liên thông bằng một điểm bottom most left, tƣơng tự left profile đƣợc tạo ra dựa trên các điểm left most bottom của các thành phần liên thông (xem hình 2.19). Đối với các góc trong khoảng [-45o
, 45o], các điểm bottom most left sẽ đặc trƣng cho đƣờng base lines của văn bản. Tuy nhiên trong trƣờng hợp góc nghiêng văn
bản lớn, các điểm left most bottom của thành phần liên thông sẽ biểu thị cho các base lines tốt hơn (xem các hình 2.20(a), 2.20(b), 2.20(c)).
Hình 2.19: Các điểm left most bottom và bottom most left của TPLT
(b)
(c)
Hình 2.20: Một ví dụ về ảnh văn bản và các profile của nó (a) là ảnh văn bản gốc, (b) là bottom profile, (c) là các left profile (d) và (e) là các lƣợc đồ phân bố góc của văn bản tìm đƣợc nhờ (b) và (c)
Trong mỗi profile (bottom hay left), góc của mỗi cặp điểm lân cận đƣợc tính và thống kê vào trong lƣợc đồ góc (xem hình 2.20(d) và 2.20(e)). Lân cận của một điểm p trong ảnh profile đƣợc xác định bằng cách quét tất cả các điểm (trừ p) trong một hình chữ nhật có kích thƣớc (2W, 2H) với tâm là điểm p, trong đó W và H đƣợc lấy ở bƣớc tiền xử lý. W và H là bao nhiêu sẽ tùy thuộc vào ảnh văn bản đầu vào. Do đó, phƣơng pháp của này chỉ dựa vào các tham số không đơn vị. Hình 2.20 là một ví dụ về lƣợc đồ góc của left profile và bottom profile. Mục đích chính của ƣớc lƣợng thô là tìm ra một khoảng 20o
mà góc nghiêng thực của văn bản thuộc về. Lý do chọn 20o
cho khoảng ƣớc lƣợng góc nghiêng sẽ đƣợc giải thích rõ trong phần sau. Trong mỗi profile chúng ta sẽ tính diện tích phần đen của mỗi khoảng, khoảng nào có diện tích lớn nhất trong 9 khoảng của đồ thị tƣơng ứng sẽ đƣợc chọn ra. Trong hai khoảng vừa tìm đƣợc, ta chọn khoảng có diện tích lớn hơn và đó cũng chính là khoảng mà góc nghiêng văn bản thuộc về. Trong hình 2.20, khoảng đƣợc chọn là khoảng tìm thấy từ left profile (hình 2.20(c)).
2.2.4.3. Áp dụng các phép biến đổi Morphology
Để tiện hơn cho việc mô tả phƣơng pháp chúng tôi đề nghị, chúng tôi xin trình bày ngắn gọn các định nghĩa căn bản của các phép toán Morphology.
Các phép giãn (dilation), co (erosion), mở (opening), và đóng (closing) của một ảnh nhị phân I bởi thành phần cấu trúc E đƣợc kí hiệu lần lƣợt là IE, IE,
E
I , và IE; và đƣợc định nghĩa nhƣ sau:
z Z z x y x I y E
E
I 2 for some and
x Z x y I y E E I 2 for every I E E E I I E E E I
Phép tự giãn (k-fold dilation) của tập hợp các thành phần cấu trúc E là:
Trong bƣớc này, chúng ta sẽ thực hiện các phép đóng và mở cho các dòng văn bản. Phép đóng dùng để nối các kí tự trong một từ, và các từ trong một dòng, phép mở để loại bỏ các thành phần liên thông rất nhỏ, cũng nhƣ các phần phụ trên hay phần phụ dƣới của ký tự. Do đó các dòng văn bản sẽ trở thành các vệt thon dài.
Tuy nhiên, để thực hiện các phép đóng, mở một cách hiệu quả nhất cần xác định kích cỡ và hình dạng của các phần tử cấu trúc thật chính xác. Cách tính toán đơn giản đƣợc mô tả nhƣ sau: Trung điểm của khoảng mà góc nghiêng văn bản thuộc về tìm đƣợc trong bƣớc ƣớc lƣợng thô chính là góc quay của phần tử cấu trúc. Ví dụ, trong hình 2.20, khoảng mà góc nghiêng văn bản rơi vào [30o
, 50o], thì góc quay của phần tử cấu trúc sẽ là 40o. Lý do mà chia góc quay của văn bản thành 9 phần và mỗi phần tƣơng ứng với 20o
là vì mỗi góc quay α của phần tử cấu trúc có thể phù hợp cho tất cả các văn bản có góc nghiêng trong khoảng [α – 10o, α + 10o
], nghĩa là khoảng chênh lệch là 20o. Qua thực nghiệm bằng cách quan sát và thử nghiệm trên một số lƣợng lớn các ảnh văn bản, cho thấy việc xác định góc quay cho các phần tử cấu trúc là rất quan trọng. Nó giúp cho kết quả của các phép đóng mở là đúng đắn nhất. Với một phần tử cấu trúc phù hợp, thì chỉ các từ trong cùng dòng mới kết hợp lại đƣợc với nhau trong khi đó từ trong các dòng khác nhau sẽ vẫn rời nhau (xem hình 2.21).
Hình 2.21: Những khoảng góc nghiêng khác nhau đƣợc sử dụng để ƣớc lƣợng góc nghiêng phù hợp cho phần tử cấu trúc
Gọi I là ảnh thu đƣợc sau khi khử nhiễu, dấu và những thành phần liên thông lớn. Ảnh Ico đƣợc tạo ra nhƣ sau:
m c n o
co I E E
I
Trong đó những phần tử cấu trúc 1×3 và 2×2 đƣợc chọn tƣơng ứng với Ec và
Eo; m và n đƣợc xác định bởi max{W / 2z, H / z} và max{W / 3z, H / 2z}; với z là độ thu nhỏ thích hợp của ảnh, z đƣợc tính nhƣ sau:
z = min{W / 4, H / 5}
α đƣợc tính bằng thuật toán ƣớc lƣợng thô; và m Ec và n Eo là những kết quả của phép quay những phần tử cấu trúc m Ec và n Eo bởi góc α (hình 2.22 là một minh họa của ảnh Ico).
Một lần nữa, có thể thấy rõ ràng rằng kích thƣớc và góc nghiêng của phần tử cấu trúc đƣợc xác định một cách tự động và chỉ dựa trên ảnh đƣa vào ban đầu. Với việc tính toán tự động này, thuật toán này có thể áp dụng để giải quyết vấn đề ƣớc lƣợng góc nghiêng của những văn bản có góc nghiêng tùy ý.
(b)
(d)
(f)
Hình 2.22: Một số ví dụ của việc dùng phép đóng và mở với các phần tử cấu trúc nghiêng (a) Và (d) là những ảnh đƣa vào ban đầu.
(b)Và (e) là những kết quả của việc áp dụng bƣớc tiền xử lý, ƣớc lƣợng thô, và phép đóng tƣơng ứng với hình (a) và (d).
(c) và (f) là những kết quả của việc áp dụng phép mở tƣơng ứng với hình (b) và (e).
2.2.4.4. Ước lượng tinh
Sau khi áp dụng phép đóng và phép mở, những dòng văn bản của ảnh đã đƣợc bôi đen đƣợc xem nhƣ là những thành phần liên thông. Trong bƣớc này, chúng ta sử dụng một thuật toán đơn giản để ƣớc lƣợng hƣớng của tất cả những thành phần liên thông và của toàn văn bản.
Gọi o là một thành phần liên thông, nghĩa là o = {(xi, yi), i = 1,.., n}. Gọi pi
(xi, yi) là một điểm tùy ý thuộc o. Chúng ta cần tìm góc α*
của thành phần liên thông o (xem hình 2.23).
Hình 2.23: Một thành phần liên thông dài với hệ tọa độ ảnh
Gọi p'i là kết quả của phép quay pi theo một góc với tâm c(xc,yc) của o, nghĩa là: p'i(x'i,y'i)
trong đó x'i(xixc)cos(ycyi)sinx
c c i c i y x x y y ( )cos ( )sin y'i
Gọi dyi là khoảng cách đại số giữa p'i và pi. dyi có thể đƣợc tính nhƣ sau:
( )sin cos ) ( 'i c i c i c i y y y y x x dy
Gọi T(α) là tổng những bình phƣơng của dyi, i=1,2,…n:
n i c i c i n i i y y x x dy T 1 2 1 2 sin cos
Trong đó c(xc, yc) là tâm của thành phần liên thông o.
Góc *của một thành phần liên thông o (với trục x) đƣợc xác định bởi:
* argminT
T() sẽ đạt cực trị nếu đạo hàm của nó bằng 0, nghĩa là T’(α)=0. Chúng ta có: cos sin 2 sin cos ] cos sin ) )( ( 2 sin ) ( cos ) [( 2 2 1 2 2 2 2 C B A y y x x x x y y T n i c i c i c i c i Trong đó: n i c i y y A 1 2 ) ( n i c i x x B 1 2 ) ( n i c i c i x y y x C 1 ) )( (
Cho nên: ) ( )sin2 2 cos2 ( ' B A C T
Bởi vì phƣơng trinh T’(α) có 2 nghiệm (sự khác nhau là π của hàm tan) mà:
2 or 2 1 Vì vậy: otherwise if 2 2 1 1 * T T
Vì phƣơng trình có 2 nghiệm 1, 2 nên khi thay vào biểu thức T() ta sẽ có đƣợc hai giá trị T1() và T2(), chọn ứng với biểu thức làm cho T() nhỏ hơn.
Sau khi áp dụng thuật toán này, mỗi thành phần liên thông đƣợc đặc trƣng bởi một cặp số (α*
, T(α*
)/n), trong đó n là số điểm thuộc thành phần liên thông đó. Một thành phần liên thông đƣợc xem là đáng tin cậy nếu nhƣ tỷ lệ T(α*
)/n nhỏ hơn một ngƣỡng đƣợc định nghĩa trƣớc là T1. Trong quá trình thực nghiệm, chúng tôi đặt T1 là 0.007. Chỉ những thành phần liên thông đáng tin cậy mới đƣợc giữ lại cho quá trình xử lý kế tiếp trong khi những cái khác sẽ đƣợc loại bỏ.
Từ kết quả của ƣớc lƣợng thô, giả sử rằng khoảng góc tìm đƣợc là [β, γ]. Bởi vì ƣớc lƣợng thô có thể đƣa ra những kết quả không chính xác, nên chúng tôi mở rộng khoảng này với một giá trị cho trƣớc là 2o, nghĩa là khoảng góc nghiêng của văn bản rơi vào sẽ là [β – , γ + ]. Trong quá trình trình thực nghiệm, ƣớc lƣợng thô có thể cho kết quả sai khi góc nghiêng của văn bản gần với biên giữa hai khoảng gần kề nhau. Chúng tôi cũng quan sát thấy rằng độ lệch đối với đƣờng biên của góc nghiêng thật sự không vƣợt quá 2o
. Cho nên, đƣợc đặt là 2o
.
Những thành phần liên thông đáng tin cậy mà hƣớng của nó rơi ra ngoài khoảng [β – , γ + ] sẽ bị loại bỏ. Sau đó, khoảng [β – , γ + ] sẽ đƣợc chia thành nhiều khoảng nhỏ hơn, mỗi khoảng sẽ có độ rộng tƣơng ứng là 0.1o, và đồ thị biểu diễn sự phân bố góc của tất cả những thành phần liên thông còn lại sẽ đƣợc tính với những khoảng nhỏ này. Cuối cùng, đỉnh của đồ thị này sẽ đƣợc chọn là góc nghiêng của toàn văn bản.
Chƣơng 3: CHƢƠNG TRÌNH THỬ NGHIỆM
3.1. BÀI TOÁN
Yêu cầu đƣợc đặt ra đối với chƣơng trình thử nghiệm là đọc đƣợc form tài liệu dạng ảnh. Thực hiện các thao tác soạn thảo phóng to, thu nhỏ v.v.. và phát hiện độ lệch của form tài liệu và thực hiện việc quay ảnh để hiệu chỉnh.
3.2. CHƢƠNG TRÌNH THỬ NGHIỆM
Chƣơng trình đƣợc cài đặt bàng công cụ Visual C#. Chƣơng trình có giao diện nhƣ hình sau:
Hình 3.1: Giao diện chƣơng trình thử nghiệm
Hai chức năng chính của chƣơng trình là lọc ảnh và phát hiện góc nghiêng của ảnh văn bản theo một số kỹ thuật đã nghiên cứu ở chƣơng 2. Ngoài ra, trên thanh công cụ còn có các chức năng thao tác ảnh nhƣ Rotate Image (quay ảnh),
Zoom In (phóng to) Zoom Out (thu nhỏ), Undo (quay trở lại ảnh gốc) và Save
(lƣu ảnh thành file trên ổ cứng).
Chức năng quay ảnh cho phép ngƣời dùng quay lại ảnh cho chính xác sau khi đã phát hiện góc nghiêng, hoặc có thể điều khiển góc lệch văn bản để kiểm tra độ chính xác của thuật toán với các góc lệch khác nhau, ngƣời dùng sẽ đƣợc nhập một góc quay bất kỳ rồi sử dụng các chức năng dò góc nghiêng để kiểm tra tính chính xác của thuật toán, chƣơng trình cài đặt 3 thuật toán dò tìm góc nghiêng của