Bảng điểm sau khi được quét vào máy tính thì cần phải thực hiện một số thao tác hiệu chỉnh như lọc nhiễu và chuyển sang ảnh nhị phân rồi mới hiệu chỉnh độ nghiêng,.. công đoạn cuối mới nhận dạng bảng điểm. Bất kỳ một tài liệu giấy khi đưa vào máy tính đều bị nghiêng với một góc nào đó do trong quá trình quét tài liệu hay là copy. Điều này sẽ làm ảnh hưởng đến quá trình phân tích tài liệu và nhận dạng các ký tự trong tài liệu. Vì vậy, phát hiện và hiệu chỉnh góc nghiêng của tài liệu là bài toán cần phải giải quyết đầu tiên và tất yếu trong quá trình xử lý ảnh văn bản. Hiện tại nhu cầu chuyển từ tài liệu giấy sang tài liệu số của xã hội ngày càng nhiều, nên bài toán góc nghiêng văn bản ngày càng được quan tâm nhiều với các góc độ khác nhau.
(nguồn THCS Phú Mỹ Hưng)
Hình 2.9. Ảnh sau khi scan bị nghiêng
Có nhiều hướng tiếp cận bài toán góc nghiêng văn bản khác nhau. Các thuật toán phát hiện góc nghiêng thường được xây dựng cho các hệ thống phân tích ảnh văn bản khác nhau nên chỉ giải quyết cho các loại ảnh văn bản cụ thể. Gồm có các thuật toán như sau:
Các thuật toán dựa vào phân tích hình chiếu (Projection Profile)
Các thuật toán dựa vào biến đổi Hough (Hough Transform)
Các thuật toán phân tích láng giềng (nearest Neighbour Clustering)
2.2.2Một số thuật toán và phát hiện góc nghiêng văn bản
2.2.2.1 Thuật toán dựa vào phân tích hình chiếu (Projection Profile)
Phương pháp này dựa trên đặc trưng của văn bản là các dòng chữ thì nằm theo hàng ngang, giữa các dòng là khoảng cách hoặc các đối tượng khác như bảng, hình thường được đặt theo hàng ngang. Mỗi dòng chữ được chia làm 3 vùng: vùng trên, vùng giữa và vùng dưới (hình bên dưới) [9]
(nguồn [9])
Hình 2.10. Cấu trúc của dòng văn bản.
Phương pháp chiếu nghiêng rất thích hợp việc xác định độ lệch. Một hình chiếu nghiêng là một biểu đồ tần suất của số các giá trị điểm đen tích luỹ lại ứng với các dòng mẫu trên toàn bộ trang. Do đặc trưng này nên khi ta chiếu các điểm đen của một văn bản với góc nghiêng bằng không theo chiều ngang thì ta sẽ thu được một đồ thị rất sắc và có độ biến thiên lớn. Với các văn bản bị nghiêng, ta có thể thấy là phép chiếu sẽ tạo ra một đồ thị trơn và thấp hơn. Dựa trên việc đánh giá các đồ thị này ta sẽ tìm được góc nghiêng chính xác của ảnh.
Nghiêng có thể ở góc bất kỳ, nhưng thường thì nó được thực hiện theo hướng nằm ngang dọc theo các dòng hoặc theo hướng thẳng đứng vuông góc với các dòng; những độ nghiêng được gọi là các hình chiếu nghiêng theo các hướng nằm ngang hoặc thẳng đứng.
(nguồn [9])
Hình 2.11. Phép chiếu ngang và chiếu dọc của trang tài liệu
(nguồn [9])
Hình 2.12. Phép chiếu dọc của dòng văn bản.
(nguồn [9])
Thuật toán phát hiện góc nghiêng văn bản dựa vào hình chiếu có thể bao gồm các bước chính sau:
Dùng hàm rút gọn F để chuyển ảnh đầu vào thành một tập các bộ ba (x,y,w) trong đó (x,y) là toạ độ của một điểm ảnh đại diện cho một đối tượng và w là trọng số của điểm đó. Ở đây, điểm đại diện được hiểu theo nghĩa là điểm biểu diễn các ký tự trong các đối tượng của ảnh. Trọng số w sẽ được đề cập sau và thường phụ thuộc vào từng thuật toán.
Một hàm P dùng để chiếu các điểm tìm được ở trên vào một mảng đểm A theo các góc chiếu khác nhau. Ứng với mỗi góc có một mảng A dùng lưu số điểm đại diện. Mảng A là mảng một chiều, phần tử A[r] sẽ cho biết số điểm đại diện nằm trên đường thẳng đó là r.
Sau khi tính được mảng A[r], áp dụng một hàm tối ưu hóa cho các giá trị mảng này theo một tiêu chuẩn nào đó. Cuối cùng góc lệch của văn bản là góc tương ứng có giá trị hàm tối ưu hóa cực đại.
Đây là một trong những phương pháp phổ biến nhất trong phát hiện góc nghiêng văn bản. Ý tưởng chính của phương pháp này là tính histogram cho tất cả các góc lệch. Histogram của một góc là số điểm ảnh đen trong ảnh sao cho các điểm này nằm trên những đường thẳng có cùng một hướng tương ứng với góc đó. Sau đó, dùng một hàm tính chi phí để áp dụng cho các giá trị histogram này. Góc nghiêng của văn bản tương ứng với góc có giá trị hàm chi phí là lớn nhất.
Theo hướng tiếp cận này, các thuật toán phát hiện góc nghiêng được đề xuất bởi các tác giả: Akiyama và Hagita, Bard, Bloomberg, Nakano, Kanai và Bagdanov, Komukai và Saiwai, Lam và Zandy, Messelodi và Modena, Shutao Li, Qinghua Shen, Pavidis và Zhou, Postl[12], D X Le và Spitz.
a.Thuật toán Postl
Một cách sử dụng trực tiếp nhất đối với phương pháp chiếu mặt nghiêng trong việc xác định góc nghiêng là tính toán độ lệch của góc gần với hướng mong muốn. Với mỗi góc nghiêng, người ta đo chiều cao các hộp theo mặt nghiêng và hộp nào có chiều cao lớn nhất sẽ cho ta góc lệch cần tìm. Tại góc lệch chuẩn, vì các dòng quét đã được sắp thẳng hàng theo các dòng văn bản, nên mặt cắt nghiêng sẽ có các
đỉnh lồi với độ cao lớn nhất và các vùng trũng ứng với khoảng trống giữa các dòng văn bản. Đối với kỹ thuật chung này người ta có thể cải tiến và điều chỉnh để lặp lại một cách nhanh hơn đối với việc chuẩn hoá góc nghiêng và xác định góc nghiêng chính xác hơn. Hàm rút gọn và hàm tối ưu [12] như sau:
FP(I)={(x.,y. ,l)|0<x<w/, 0<y<h/,I(x. ,y. )=1} P(A)=(A[p+1] - A[p])2
Với (x,y) là tọa độ của điểm ảnh đại diện, và là các ngưỡng kích thước, w và h tương ứng là chiều rộng và chiều cao của ảnh.
b.Thuật toán Baird
Baird [6] tiến hành sửa đổi phương pháp mặt cắt nghiêng này để nâng cao tốc độ và độ chính xác trong xác định độ lệch. Trước hết, các phần kết nối được “xác định” và trung điểm cạnh dưới cũng được thể hiện. Người ta xác định tổng các độ lệch (như sự chênh lệch về chiều cao giữa các điểm lồi và lõm) đối với các góc nghiêng khác nhau. Giá trị thu được đối với mỗi góc sẽ được đo bởi số các điểm thuộc dòng cơ sở nằm trên đường chiếu theo góc ấy. Chiều cao của các cột càng lớn thì góc nghiêng càng tiến tới không. Giá trị đo được lớn nhất sẽ cho góc lệch thực sự. Độ chính xác của phương pháp này thường đạt trong phạm vi 0.5 độ so với hướng chuẩn. Do việc xác định được tiến hành bằng cách sử dụng các trung điểm cạnh đáy của mỗi hộp nên có một giả định rằng trang giấy được đặt gần vuông góc khi quét. Và một phần do giả thiết này nên phương pháp sẽ chỉ đạt độ chính xác cao nhất trong phạm vi góc lệch là dưới 10 độ.
Baird dùng cách xác định hình chữ nhật chứa các đối tượng, điểm đại diện chính là trọng tâm của hình chữ nhật đó và hàm tối ưu bằng tổng bình phương các giá trị mảng. Công thức được tính như sau:
FP(I)={(x,y,1)\(x,y) là tâm hình chữ nhật ngoại tiếp một đối tượng} P(A)=(A[p+1] - A[p])2
Thuật toán có thể được mô phỏng như sau:
find_conn_comp_xy (image[], NROWS, NCOLS, &comp[], &ncomps ); for theta = -angle to +angle by resolution do
for i = 0 to ncomps do {
rotate(comp[i].center_y, comp[i].center_x, theta, &new_row); ++proj_prof[new_row];
}
angle_measure[theta] = criterion_function(proj_prof[]); }
skew_angle = choose_skew(angle_measure[]);
c.Thuật toán Nakano
Nakano dùng tâm hình chữ nhật ngoại tiếp đối tượng làm điểm cơ sở, chiều rộng của hình chữ nhật là trọng số cho điểm cơ sở, hàm tối ưu phụ thuộc vào số các giá trị bằng 0 trong mảng đếm. Công thức được tính như sau:
FP(I)={(x,y,w)|(x,y) là tọa độ góc trái dưới của hình chữ nhật bao quanh một đối tượng, w là chiều rộng hình chữ nhật}
P(A[p])=(1-U(A[p]))
Với U(A[p])=1 nếu A[p]=0, ngược lại U(A[p])=0
d. Nhận xét
Ƣu điểm:
Phương pháp phép chiếu để xác định góc nghiêng của ảnh cho kết quả rất chính xác đối với ảnh của form nhập dữ liệu do có nhiều đường thẳng.
Tư tưởng của phép chiếu trong sáng, dễ cài đặt.
Tuy phép chiếu đòi hỏi tính toán phức tạp nhưng ta có thể tăng tốc được bằng cách sử dụng đường thẳng theo phương pháp Bresenham và kỹ thuật sử dụng bảng lookup table.
Hạn chế
Cho kết quả không chính xác lắm đối với các ảnh có kích thước
nhỏ do ta sử dụng các đường chiếu là các đường thẳng trong hệ tọa độ nguyên nên các đường thẳng này chỉ là xấp xỉ, ảnh càng
lớn thì các đường thẳng này càng chính xác => càng cho kết quả chính xác hơn.
Các hàm ước lượng về biểu đồ của phép chiếu chưa thể hiện được hết bản chất của phép chiếu. Mỗi công thức chỉ mô tả được một khía cạch cụ thể.
2.2.2.2 Các thuật toán dựa vào biến đổi Hough (Hough Transform) a. Giới thiệu
Biến đổi Hough [4] được Paul Hough giới thiệu vào năm 1962 và được IBM cấp bằng sáng chế. Các biến đổi biểu diễn bằng tham số mô tả về một đặc trưng tại vị trí bất kỳ được đưa ra trong một không gian ảnh gốc. Ý tưởng cơ bản là “mỗi đường thẳng trong một hình ảnh có thể được mô tả bởi một phương trình và mỗi điểm ảnh nếu xem xét trong sự cô lập có thể nằm trên vô số đường thẳng”. Đây là một kỹ thuật xác định một số điểm ảnh nằm trên đường thẳng của một bức ảnh nhị phân. Ta dùng mảng hai chiều để lưu các điểm ảnh đó. Với chỉ số hàng là gốc lệch Φ của đường thẳng và chỉ số cột r là khoảng cách từ gốc tọa độ tới đường thẳng đó. Sau đó, tính tổng các điểm đen nằm trên những đường thẳng song song nhau theo các góc lệch thay đổi. Góc có tổng giá trị mảng cực đại chính là góc nghiêng văn bản.
Với hướng tiếp cận này, các tác giả Hinds, Jiang, Dianel Le, Sugwara, Nakano, nhóm Srihari và Govindaraju, nhóm Yu và Jain, nhóm Amin, Fischer, Paskison và Riscky.
b.Biến đổi Hough cho đƣờng thẳng
Trong ảnh nhị phân, mỗi điểm đen I(xi,yi) sẽ có vô số đường thẳng qua điểm đen đó và mỗi đường thẳng có vô số góc nghiêng. Mỗi đường thẳng này được mô tả bằng phương trình đường thẳng như sau:
y= ax + b (d)
Với: (x,y): là toạ độ của điểm ảnh.
a: là hệ số góc của đường thẳng.
b: là giao của đường thẳng với trục y là tại điểm y=b.
b= - xia+yi (d1)
(d1) là phương trình đường thẳng trong không gian (a,b). Khi đó, một điểm trong không gian ảnh hai chiều (xi,yi) tương ứng với một đường thẳng (di) trong hệ toạ độ (a,b). Như vậy, một đường thẳng trong không gian Hough sẽ tương ứng với n điểm ảnh (xi,yi) cùng giao nhau tại một điểm, thì n điểm ảnh đó nằm trên một đường thẳng trong ảnh. Các tham số của đường thẳng đó tương ứng với toạ độ Hough(a,b) của giao điểm.
Bài toán:
Cho n điểm (xi; yi) i = 1, n và ngưỡng hãy kiểm tra n điểm có tạo thành đường thẳng hay không? [2]
Ý tƣởng
Giả sử n điểm nằm trên cùng một đường thẳng và có phương trình y = ax + b
Vì (xi, yi) i = 1, n thuộc đường thẳng nên y1 = ax1 + b, i = 1, n b = - xia + y1; i = 1, n
Như vậy, mỗi điểm (xi; yi) trong mặt phẳng sẽ tương ứng với một số đường thẳng b = - xia + yi trong mặt phẳng tham số a, b. n điểm (xi; yi) i = 1, n thuộc đường thẳng trong mặt phẳng tương ứng với n đường thẳng trong mặt phẳng tham số a, b giao nhau tại 1 điểm và điểm giao chính là a, b. Chính là hệ số xác định phương trình của đường thẳng mà các điểm nằm vào.
Phƣơng pháp:
Xây dựng mảng chỉ số a, b và gán giá trị 0 cho tất cả các phân tử của mảng. Với mỗi (xi; yi) và a, b là chỉ số của phần tử mảng thoả mãn b = - xia + yi tăng giá trị của phân tử mảng tương ứng lên 1
Tìm phần tử mảng có giá trị lớn nhất nếu giá trị lớn nhất tìm được so với số phân tử lớn hơn hoặc bằng ngưỡng cho trước thì ta có thể kết luận các điểm nằm
trên cùng 1 đường thẳng và đường thẳng có phương trình y = ax + b trong đó a, b tương ứng là chỉ số của phần tử mảng có giá trị lớn nhất tìm được.
Cấu trúc điều khiển:
Mảng dữ liệu đòi hỏi: Hough(1..Hx_max,1..Hy_max) với các trị nguyên.
Nhập và khởi tạo không gian Hough:
Nhập các tham số MAX_NUM và S_inkr (cp.below);
_step := 5; d_step :=3;
Hx_max:=dmax/d_step; Hy_max:=180/_step;
{Trong một số trường hợp phải thay 180 bằng 360, chẳng hạn như khi cần phân biệt phần trên với phần dưới của đường thẳng}
array Hough(1..Hx_max, 1..Hy_max):integer; for Hx:=1 to Hx_max do
for Hy:=1 to Hy_max do
Hough(Hx, Hy):=0;
Xếp tất cả các điểm ảnh (x,y) phù hợp vào không gian Hough:
MAX:=0;
{Đếm giá trị lớn nhất hiện thời trong không gian Hough}
for (tất cả các điểm (x,y) phù hợp trong ảnh) do for Hy:=1 to Hy_max do begin
{Lần lượt với tất cả các giá trị của , d được tính theo } :=(Hy-1). _step; { tính theo độ}
d:=x.cos + y.sin;
{Nếu cần có thể đổi sang radian}
Hx:=integer(d/d_step + 1.5);
{d bắt đầu từ 0, Hx bắt đầu từ 1}
if ((Hx >= 1) and (Hx <= Hx_max)) then
Hough(Hx,Hy):=Hough(Hx,Hy) + 1;
if MAX < Hough(Hx,Hy) then
MAX:=Hough(Hx,Hy);
end {then}
else
Tham số không nằm trong dãy khởi tạo của giá trị d (tăng dmax?)
End; {for}
Xác định các đường thẳng trong không gian Hough:
Tiền xử lý của không gian Hough nhằm làm tăng cực đại địa phương nếu cần
S:=MAX/2; {ví dụ về ngưỡng ban đầu trong không gian Hough}
repeat NUM:=0;
{số đường thẳng được xác định}
S:=S+S_inkr;
{S_inkr dùng để tăng ngưỡng lên trong từng bước}
for Hx:=1 to Hx_max do
for Hy:=1 to Hy_max do
if Hough(Hx,Hy) >= S then
begin
:= (Hy-1)._step;
d := (Hx-1).d _step;
đường thẳng d:=x.cos + y.sin được xác định trong không gian x,y ( và d đã xác định)
NUM:=NUM+1;
End; {then}
Ví dụ:
Cho 5 điểm (0, 1); (1, 3); (2, 5); (3, 5); (4, 9) và = 80%. Ta kiểm tra xem 5 điểm đã cho có nằm trên cùng một đường thẳng hay không? Nếu chúng cùng nằm trên cùng một đường thẳng thì cho biết phương trình đường thẳng đó.
Lập bảng chỉ số a, b và gán giá trị 0 + (0, 1): b = 1 + (1, 3): b = -a + 3 + (2, 5): b = -2a + 5 + (3, 5): b = -3a + 5 + (4, 9): b = -4a + 9 - Tìm phần tử lớn nhất có giá trị 4 4/5 = 80%
- Kết luận: 5 điểm này nằm trên cùng 1 đường thẳng Phương trình: y = 2x + 1
Kết luận
Kỹ thuật biến đổi Hough là một cách tiếp cận sử dụng cho phù hợp đường thẳng và đường cong. Phương pháp này được ưa thích khi mục tiêu là để tìm đường hoặc đường cong hình thành bởi các nhóm của các điểm trên một mặt phẳng ảnh. Phương pháp này liên quan đến một chuyển đổi từ một mặt phẳng ảnh tới một không gian tham số.
c. Biến đổi Hough cho đƣờng thẳng trong tọa độ cực
Trong mặt phẳng, điểm (x,y) và đường thẳng sẽ được biểu diễn bởi cặp (r,Φ) trong tọa độ cực.[2]
Với: r: là khoảng cách từ gốc tọa độ tới đường thẳng đó.
Φ: là góc tạo bởi trục OX với đường thẳng vuông góc với nó. O x.cosΦ+y.sinΦ=r Φ H x (nguồn [2])
Hình 2.14. Đƣờng thẳng Hough trong toạ độ cực.
Ngược lại, mỗi một cặp (r,Φ) trong toạ độ cực cũng tương ứng biểu diễn một đường thẳng trong mặt phẳng. Ta gọi N(x,y) là một điểm thuộc đường thẳng được biểu diễn bởi (r,Φ), gọi H(X,Y) là hình chiếu của gốc toạ độ O trên đường thẳng ta có:
X= r. cos Φ và Y= r.sinΦ Mặt khác, ta có:OH.HA=0
Từ đó ta có mối liên hệ giữa (x,y) và (r,Φ) như sau: x*cosΦ+y*sinΦ= r. Xét n điểm thẳng hàng trong tọa độ Decard có phương trình x*cosΦ0+y*sinΦ0= r0. Biến đổi Hough ánh xạ n điểm này thành n đường sin trong tọa độ cực mà các đường này đều đi qua (r0,Φ0). Giao điểm (r0,Φ0) của n đường sin sẽ xác định một đường thẳng trong hệ tọa độ Decard. Như vậy, những đường thẳng đi qua điểm (x,y) sẽ cho duy nhất một cặp (r,Φ) và có bao nhiêu đường qua (x,y) sẽ có bấy nhiêu cặp giá trị (r,Φ).
d. Áp dụng biến đổi Hough để phát hiện góc nghiêng văn bản
bản là dùng một mảng tích luỹ để đếm số điểm ảnh nằm trên một đường thẳng