2.2.1.1. Biến đổi Hough cho đường thẳng
Bằng cách nào đó ta thu đƣợc một số điểm vấn đề đặt ra là cần phải kiểm tra xem các điểm có là đƣờng thẳng hay không
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?
Ý tƣởng:
Giả sử n điểm nằm trên cùng một đƣờng thẳng và đƣờng thẳng có phƣơng trình:
y = ax + b
Vì (xi; yi) i = 1..n thuộc đƣờng thẳng nên yi = axi + b, i = 1.. n b = - xia + yi; 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 ban đầu 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
Ví dụ:
Cho 5 điểm (0, 1); (1, 3); (2, 5); (3, 5); (4, 9) và = 80%. Hãy kiểm tra xem 5 điểm đã cho có nằm trên cùng một đƣờng thẳng hay không? Hãy cho biết phƣơng trình đƣờng thẳng nếu có? + 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
a\b -2 -1 0 1 2 3 4 5 -2 0 0 0 1 0 0 0 1 -1 0 0 0 1 0 0 1 0 0 0 0 0 1 0 1 0 2 1 0 0 0 1 2 1 0 1 2 0 1 0 4 0 0 0 0 3 0 1 1 1 0 0 0 0
Hình 2.9: Ví dụ biến đổi Hough cho đƣờng thẳng
2.2.1.2. Biến đổi Hough cho đường thẳng trong toạ độ cực
Hình 2.10: Đƣờng thẳng Hough trong toạ độ cực
Mỗi điểm (x,y) trong mặt phẳng đƣợc biểu diễn bởi cặp (r,) trong tọa độ cực.
Tƣơng tự mỗi đƣờng thẳng trong mặt phẳng cũng có thể biểu diễn bởi một cặp (r,) trong tọa độ cực với r là khoảng cách từ gốc tọa độ tới đƣờng thẳng đó và là góc tạo bởi trục 0X với đƣờng thẳng vuông góc với nó, hình trên biểu diễn đƣờng thẳng hough trong tọa độ Decard.
Ngƣợc lại, mỗi một cặp (r,) trong toạ độ cực cũng tƣơng ứng biểu diễm một đƣờng thẳng trong mặt phẳng.
Giả sử A(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ó:
Mặt khác, ta có:
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 độ Đề các có phƣơng trình x*cos0+y*sin0= 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 độ Đề các. 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,).
2.2.1.3. Áp dụng biến đổi Hough trong phát hiện và hiệu chỉnh góc nghiêng văn bản nghiêng văn bản
Dựa vào tính chất mỗi đối tƣợng ảnh có duy nhất một chu tuyến ngoài và quan niệm con ngƣời nhận ra độ nghiêng của văn bản dựa vào cỡ chữ chiếm chủ đạo trong văn bản. Việc xác định góc nghiêng văn bản sẽ đƣợc xác định nhờ phép biến đổi Hough cho những điểm giữa đáy của hình chữ nhật nhỏ nhất bao quanh đối tƣợng ảnh cho các đối tƣợng ảnh có kích thƣớc chủ đạo. Nhƣ vậy, công việc đầu tiên cần thực hiện là xác định đƣợc các hình chữ nhật ngoại tiếp các đối tƣợng hay nói cách khác là xác định biên các đối tƣợng. Ta dùng các thuật toán dò biên để xác định biên cho các đối tƣợng trong ảnh văn bản. Hình chữ nhật ngoại tiếp đối tƣợng sẽ đƣợc xác định ngay sau khi dò đƣợc biên cho đối tƣợng đó.
Hình 2.11: Các hình chữ nhật ngoại tiếp đối tƣợng ảnh
Thuật toán dò biên nhƣ sau:
Duyệt ảnh từ trên xuống, từ trái sang phải:
Bƣớc 1: Xác định cặp điểm nền-vùng xuất phát, điểm nền là điểm trắng còn điểm vùng là điểm đen, đây là cặp điểm lân cận nhau.
Bƣớc 2: Xác định cặp điểm nền-vùng tiếp theo dựa vào toán tử dò biên
Bƣớc 4: Nếu gặp lại cặp xuất phát thì thu đƣợc 1 chu tuyến của 1 đối tƣợng, thực hiện lại bƣớc 1; nếu không quay lại bƣớc 2.
Toán tử dò biên: từ 1 cặp điểm nền-vùng, thực hiện dò 8 hƣớng lân cận của điểm vùng theo chiều kim đồng hồ, xuất phát từ vị trí điểm nền. Nếu dò đƣợc điểm đen thì xác định đƣợc cặp điểm nền-vùng tiếp theo.
Biến đổi Hough đƣợc áp dụng sau khi đã loại bớt đi một số đối tƣợng bằng các ngƣỡng kích thƣớc. Mục đích của việc dùng ngƣỡng là dựa vào thƣớc đo kích thƣớc để phân loại đối tƣợng. Nói cách khác, dùng ngƣỡng phân loại ta có thể phân biệt đƣợc một cách tƣơng đối những đối tƣợng là ký tự và đối tƣợng phi ký tự. Nhờ biết phân biệt đối tƣợng, ta sẽ chỉ làm việc với các đối tƣợng có kích thƣớc chủ đạo trong ảnh do đó độ chính xác của thuật toán đƣợc cải thiện đáng kể. Ta sẽ dùng kỹ thuật lập biểu đồ tần xuất kích thƣớc để ƣớc lƣợng một ký tự có tần số xuất hiện nhiều nhất trong văn bản mà ta gọi là đối tƣợng chuẩn. Với mỗi một ảnh đầu vào, ta sẽ xác định một đối tƣợng chuẩn riêng và tự động trong chƣơng trình. Sau đó, lấy đối tƣợng này làm chuẩn và so sánh các đối tƣợng còn lại với nó. Những đối tƣợng có kích thƣớc xấp xỉ bằng kích thƣớc của đối tƣợng này sẽ đƣợc chọn để áp dụng biến đổi Hough. Một đối tƣợng đƣợc xem là xấp xỉ bằng kích thƣớc của đối tƣợng khác nếu chênh lệch kích thƣớc giữa chúng bé hơn một ngƣỡng đƣợc định nghĩa trƣớc
Ý tƣởng của việc áp dụng biến đổi Hough trong phát hiện góc nghiêng vă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 luỹ cực đại.
Theo biến đổi Hough, mỗi một đƣờng thẳng trong mặt phẳng tƣơng ứng đƣợ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ó vô số đƣờng thẳng, 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.
Hình 2.12: Áp dụng biến đổi Hough phát hiện góc
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. Ở đây, ta thấy trên mặt phẳng có hai đƣờng thẳng song song nhau. Đƣờng thẳng thứ nhất có ba điểm ảnh nên giá trị mảng tích luỹ bằng 3, đƣờng thẳng thứ hai có gia trị mảng tích luỹ bằng 4. Do đó, tổng giá trị mảng tích luỹ cho cùng góc ϕ trƣờng hợp này bằng 7.
Gọi Hough[360][Max] là mảng tích lũy, giả sử M và N tƣơng ứng là chiều rộng và chiều cao của ảnh, ta có các bƣớc chính trong quá trình áp dụng biến đổi Hough phát hiện góc nghiêng văn bản nhƣ sau:
+ Bƣớc 1: Khai báo mảng chỉ số Hough[ϕ][r] với 0 ≤ ϕ ≤ 3600 và .
+ Bƣớc 2: Gán giá trị khởi tạo bằng 0 cho các phần tử của mảng.
+ Bƣớc 3: Với mỗi cặp (x,y) là điểm giữa đáy của hình chữ nhật ngoại tiếp một đối tƣợng.
- Với mỗi ϕi từ 0 đến 360 tính giá trị ri theo công thức ri= x.cosϕi+y.sinϕi
- Làm tròn giá trị ri thành số nguyên gần nhất là r0
- Tăng giá trị của phần tử mảng Hough[ϕi][r0] lên một đơn vị.
+ Bƣớc 4: Trong mảng Hough[ϕ][r] tính tổng giá trị các phần tử theo từng dòng và xác định dòng có tổng giá trị lớn nhất.
Do số phần tử của một phần tử mảng Hough[ϕ0][r0] chính là số điểm ảnh thuộc đƣờng thẳng x.cosϕ0+y.sinϕ0= r0 vì vậy tổng số phần tử của một hàng chính
là tổng số điểm ảnh thuộc các đƣờng thẳng tƣơng ứng đƣợc biểu diễn bởi góc ϕ của hàng đó. Do đó, góc nghiêng của toán văn bản chính là hàng có tổng giá trị các phần tử mảng lớn nhất.
2.2.2. Phép chiếu nghiêng (Projection Profiles)
2.2.2.1. Giới thiệu về phép chiếu nghiêng
Phép chiếu nghiêng theo hƣớng x bất kỳ: Thực chất là đi xác định lƣợc đồ xám bằng cách tính tổng các điểm ảnh màu đen (hoặc trắng) theo phƣơng vuông góc với x dọc theo trục x. Trong thực tế x thƣờng là phƣơng nằm ngang hay phƣơng thẳng đứng so với trang văn bản, và đó đƣợc gọi tƣơng ứng là phép chiếu ngang và phép chiếu dọc. Một ví dụ về phép chiếu nghiêng với một trang tài liệu:
Hình 2.13: Kết quả chiếu ngang và chiếu dọc của một trang tài liệu
Với phép chiếu ngang ta dễ nhận thấy độ rộng của các đáy chính là khoảng cách giữa hai dòng, độ rộng các đỉnh là chiều cao của ký tự . Đối với những tài liệu có nhiều cột, phép chiếu dọc sẽ tạo một đoạn bằng nhau cho mỗi cột, phân cách giữa chúng là các phần lõm thể hiện cho phần giữa các cột và khoảng cách căn lề.
Kết quả của phép chiếu ngang là một mảng một chiều mà mỗi hàng của ảnh ứng với 1 vị trí trong mảng, mỗi vị trí trong phép chiếu sẽ lƣu trữ số các điểm đen trong hàng tƣơng ứng của ảnh. Khi góc nghiêng bằng 0, số các điểm đen nằm trên
cùng 1 đƣờng thẳng đạt cực đại. Điều này thể hiện rõ ở hình dƣới. Các đỉnh trong phép chiếu này đƣợc tính toán từ ảnh không nghiêng (hình a) đƣợc đặt cao hơn và sít hơn các đỉnh đƣợc tính từ ảnh nghiêng
Hình 2.14: Ảnh gốc (a) và ảnh khi bị nghiêng 50
2.2.2.2. Áp dụng phép chiếu nghiêng trong việc phát hiện và hiệu chỉnh góc nghiêng văn bản góc nghiêng văn bản
Áp dụng đặc tính đỉnh của phép chiếu có thể đạt cực đại khi góc nghiêng bằng 0, chúng ta có thể sử dụng phép chiếu cho các góc quay khác nhau đối với ảnh văn bản đầu vào. Đặc tính phép chiếu trích ra từ mỗi góc quay đƣợc so sánh với nhau để xác định đỉnh nào lớn nhất, qua đó xác định góc nghiêng của ảnh văn bản.
Việc ƣớc lƣợng góc nghiêng văn bản dựa trên phƣơng pháp chiếu nghiêng đƣợc thực hiện bởi 3 hàm sau:
Hàm F, dùng để giảm số lƣợng điểm ảnh cơ sở từ ảnh nguồn I, đầu vào là một tập các bộ ba (x, y, w) biểu diễn toạ độ và mức xám của các điểm ảnh. Các điểm ảnh cơ sở sẽ là tập những điểm đƣợc tính toán để thể hiện một số đặc trƣng của ảnh, đây là những điểm mà ta sẽ áp dụng phép chiếu nghiêng để xác định góc nghiêng văn bản. Chúng ta mong muốn những điểm ảnh cơ sở này biểu diễn các ký tự trong ảnh nguồn.
Hàm chiếu P, thực hiện chiếu các điểm ảnh cơ sở giữa những đƣờng thẳng song song vào một mảng tích luỹ A có chiều cao cố định. Góc của phép chiếu, θ, biến thiên trong khoảng [θmin, θmax] và phép chiếu đƣợc thực hiện với mỗi góc mong muốn. Quá trình này sẽ tạo ra một chuỗi các mảng tích luỹ Aθ tƣơng ứng với mỗi góc θ.
Mỗi lần phép chiếu thực hiện xong tại góc θ, hàm tối ƣu ϕ tính toán giá trị giới hạn cho mỗi mảng tích luỹ Aθ. Nếu giá trị giới hạn của mảng tích luỹ Aθ nào đạt cực đại thì góc θ tƣơng ứng với mảng tích luỹ đó sẽ là ƣớc lƣợng góc nghiêng của ảnh văn bản
Nhƣ vậy, việc đầu tiên là phải giảm tập điểm ảnh từ ảnh đầu vào để xác định các điểm cơ sở, việc này có thể thực hiện bằng cách xác định những thành phần liên thông từ ảnh đầu vào thông qua kỹ thuật dò biên đã trình bày ở mục trƣớc, từ đó xác định đƣợc các điểm trọng tâm của hình chữ nhật ngoại tiếp thành phần liên thông, phép chiếu sẽ thực hiện với các điểm trọng tâm này.
Tại mỗi góc quay θ của phép chiếu, thay vì thực hiện quay ảnh theo góc θ rồi áp dụng phép chiếu (vừa tốn bộ nhớ vừa giảm thời gian tính toán), mỗi điểm ảnh cơ sở M(x,y) sẽ đƣợc quay 1 góc θ với tâm O (ứng với điểm thuộc hàng trên cùng và cột đầu tiên) thành điểm M’ nằm trên hàng y’ = y * cos(θ) + x * sin(θ). Sau mỗi
phép chiếu ta thu đƣợc mảng tích luỹ Aθ[p], 0 ≤ p ≤ Height, Height là chiều cao của ảnh đầu vào
Một hàm tiêu chuẩn sẽ tính toán giá trị đỉnh đặc thù của mỗi phép chiếu. Hàm đƣợc lựa chọn trong luận văn này là hàm đƣợc đề xuất bởi Bard, có công thức nhƣ sau: heightA A 0 2
Sau cùng sẽ lựa chọn hàm tiêu chuẩn có giá trị cực đại, góc θ ứng với hàm tiêu chuẩn đó chính là góc nghiêng của ảnh văn bản.
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[]);
2.2.3. Phƣơng pháp láng giềng gần nhất (Nearest Neighbor)
Phƣơng pháp này đƣợc đề xuất lần đầu tiên bởi Hashizume vào năm 1986, trƣớc hết là việc phát hiện các thành phần liên thông. Vectơ có hƣớng của tất cả các cặp NN của các thành phần liên thông đƣợc tính toán trong 1 biểu đồ và đỉnh của biểu đồ chỉ ra góc nghiêng trội nhất (ƣu thế nhất). Phƣơng pháp này đƣợc tổng quát hoá bới O’Gorman năm 1993, trong đó các nhóm NN đƣợc mở rộng tới K láng giềng đối với mỗi thành phần liên thông. Do việc sử dụng liên thông K láng giềng có thể đc tạo thành các dòng văn bản ngang, nên đỉnh của biểu đồ kết quả có thể không đƣợc chính xác tuyệt đối. Năm 1999, Jiang và các cộng sự đƣa ra 1 phƣơng pháp dựa trên 1 mô hình tạo nhóm NN, trong đó tiến trình tạo các nhóm cục bộ
đƣợc tập trung vào 1 tập con các láng giềng đáng tin cậy. Việc điều chỉnh dòng bằng phƣơng pháp bình phƣơng bé nhất đƣợc thực hiện trên những láng giềng đáng tin cậy này và góc nghiêng tƣơng ứng với đƣờng thẳng đƣợc sử dụng để xây dựng nên biểu đồ. Lúc này, đỉnh của biểu đồ đƣợc coi nhƣ góc nghiêng của ảnh tài liệu đã quét vào. Thuật toán đƣợc đƣa ra bởi Liolios và các cộng sự năm 2001 thực nghiệm việc nhóm tất cả các thành phần cùng thuộc về 1 dòng văn bản trong 1 cụm. Bởi vì chiều cao và chiều rộng trung bình của các thành phần đƣợc sử dụng trong tiến trình, nên phƣơng pháp này chỉ có thể phù hợp cho các tài liệu có kích thƣớc font chữ tƣơng đối đồng đều nhau
Mặc dù các phƣơng pháp dựa trên NN không đòi hỏi sự có mặt của 1 vùng văn bản nổi trội hay những phƣơng pháp này không phải là đối tƣợng để giới hạn góc nghiêng, nhƣng tính chính xác của những phƣơng pháp này lại không hoàn