Thuật toán dựa vào phân tích hình chiếu (Projection Profile ) 23

Một phần của tài liệu nghiên cứu một số kỹ thuật hiệu chỉnh form tài liệu (Trang 32 - 80)

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[]); } (adsbygoogle = window.adsbygoogle || []).push({});

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 (adsbygoogle = window.adsbygoogle || []).push({});

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); (adsbygoogle = window.adsbygoogle || []).push({});

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]) (adsbygoogle = window.adsbygoogle || []).push({});

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 trong không gian ảnh. Mảng tích luỹ là một mảng hai chiều với chỉ số hàng của mảng cho biết góc lệch Φcủa một đường thẳng và chỉ số cột chính là giá trị r khoảng cách từ gốc toạ độ tới đường thẳng đó. Sau đó tính tổng số điểm ảnh nằm trên những đường thẳng song song nhau theo các góc lệch thay đổi. Góc nghiêng văn bản tương ứng với góc có tổng giá trị mảng tích lũy cực đại.

Theo biến đổi Hough, mỗi một đường thẳng trong mặt phẳng tương ứng sẽ được biểu diễn bởi một cặp (r, Φ). Giả sử ta có một điểm ảnh (x, y) trong mặt phẳng, vì qua điểm ảnh này có thể xác định được vô số đường thẳng mà mỗi đường thẳng lại cho một cặp (r, Φ) nên với mỗi điểm ảnh ta sẽ xác định được một số cặp (r, Φ) thoả mãn phương trình Hough.

x.cos Φ +y.sinΦ=r1 y Φ Hough[Φ][r1]=3 x.cos Φ +y.sinΦ=r2 Hough[Φ][r1]=4 (nguồn [2])

Hình 2.15. Biến đổi Hough phát hiện góc nghiêng.

Hình vẽ trên minh hoạ cách dùng biến đổi Hough để phát hiện góc nghiêng văn bản. Giả sử ta có một số điểm ảnh, đây là những điểm giữa đáy các hình chữ nhật ngoại tiếp các đối tượng đã được lựa chọn từ các bước trước (các đối tượng được chọn là những đối tượng tiêu biểu được xác định từ thao tác dò biên và xây dựng hình chữ nhật ngoại tiếp). Ở đây, ta thấy trên mặt phẳng có hai đường thẳng song song nhau cùng thoả mãn phương trình Hough. Đường thẳng thứ nhất có ba điểm ảnh nên giá trị mảng tích lũy bằng 3, đường thẳng thứ

Một phần của tài liệu nghiên cứu một số kỹ thuật hiệu chỉnh form tài liệu (Trang 32 - 80)