Sau khi, ta dùng phương so khớp bằng histogram [1] của bảng điểm mẫu và bảng điểm cần nhận dạng, nếu 2 mô hình histogram này không khớp với nhau thì ta tiến hành dịch chuyển bảng điểm cần nhận dạng sao cho histogram của bảng điểm cần nhận dạng khớp với bảng điểm mẫu. Trong luận văn này sẽ giới thiệu phương pháp Histogram để dịch chuyển bảng điểm.
Như ta đã biết, histogram ngang hay dọc của bảng điểm là tổng số các điểm đen trên một hàng ngang hay dọc của bảng điểm đó.Vậy một bảng điểm ta có 2 mô hình histogram là histogram ngang và histogram dọc. Đối với một dòng ảnh mà histogram ngang bằng 0 thì đó là dòng.
Đây chính là histogram ngang của dòng i.
Giả sử chúng ta làm việc với ảnh đen trắng (ảnh 1 bits).Gọi Buf là mảng chứa bộ đệm ảnh.
Thủ tục Getpl() dùng để trả lại giá trị của một pixel tại vị trí x, trong hàng ảnh y. int Getpl(int x,int y,usnigend char * Buf[])
{ if (Buf[y][x] & (0x01<<(7-x%8) return 1; else return 0; }
Thủ tục His_H() dùng để tính lược đồ xám ngang (Histogram ngang) bắt đầu từ cột Sart_x đến cột End_x.
Int His_H(int y,int Sart_x,int End_x,unsigned Char * Buf[] )
{ int h,j; h=0; for(j=Sart_x;j<=End_x;j++) h+=Getpl(j,y,*Buf); return h; }
Thủ tục His_V() dùng để tính lược đồ xám dọc tại cột x bắt đầu từ Sart_y đến End_y.
Int His_V( int x, int Sart_y,int End_y,Unsigned char *Buf[ ] )
{
int v,i;
return v;
}
Để hiệu chỉnh offset (lề trên và trái ) của bức ảnh cần nhận dạng so với ảnh mẫu. HM H VM V (a ) ( b ) (nguồn [1]) Hình 2.5. (a) là ảnh mẫu (b) là ảnh cần nhận dạng. 2.1.3.1 Phƣơng pháp thứ nhất
Ta tìm khoảng cách hm,vm của bảng điểm mẫu (lề trên và lề trái) bằng cách lần lượt tính H(i0) và V(j0) từ trên xuống dưới và từ trái qua phải tại dòng i và cột j đầu tiên mà H(i) > ,V(j)> (đủ lớn) thì dừng lúc đó i=i0 và j=j0 chính là hm và vm. Tương tự, ta thực hiện với bảng điểm cần nhận dạng ta tìm được h và v tương ứng.
Sau đó ta so sánh sự chênh lệch giữa hai cặp hm và h,vm và v để tịnh tiến những dòng đen của bảng điểm lên hay xuống một khoảng cách (được tính theo đơn vị pixel) |hm- h| .Và tịnh tiến các cột đen của ảnh sang trái hay phải một khoảng | vm-v| .
Phương pháp này có ưu điểm là thời gian thực hiện khá nhanh tuy nhiên nó thực sự chính xác khi ảnh mẫu và ảnh cần nhận dạng phải rơi vào trường hợp khá
lý tưởng là ảnh mẫu và ảnh cần nhận dạng không có nhiễu. Trong trường hợp ngược lại kết quả thường không được như ý muốn.
Trong thực tế đôi khi ảnh mẫu và ảnh cần nhận dạng thường bị nhiễu khi quét vào, và có những trường hợp ảnh mẫu không bị nhiễu nhưng ảnh cần nhận dạng lại bị nhiễu hay trong trường hợp ngược lại.
Để khắc phục nhược điểm trên ta tiếp tục nghiên cứu phương pháp thứ hai.
2.1.3.2 Phƣơng pháp thứ hai
Để hiệu chỉnh độ dịch chuyển của bảng điểm so với bảng điểm gốc ta thực hiện theo phương pháp sau:
Ta có histogram dọc bảng điểm mẫu và bảng điểm cần nhận dạng như sau:
(nguồn [1])
Hình 2.6. Mô hình histogram dọc của bảng điểm mẫu.
(nguồn [1])
Sau khi ta vẽ histogram của bảng điểm mẫu và bảng điểm cần nhận dạng, tiếp theo ta xếp 2 mô hình histogram này trên cùng một trục tọa độ.
(nguồn [1])
Hình 2.8. Mô hình histogram của bảng điểm mẫu và bảng điểm cần nhận dạng đƣợc xếp trên cùng một trục tọa độ.
Sau đó, ta tìm vị trí k ở bảng điểm mẫu và vị trí l ở bảng điểm cần nhận dạng sao cho:
Hmax
(h1(k+t)-h2(l+t))2 min (*) t=1
Trong đó:
- Hmax là một ước lượng đủ lớn; - h1(i) là histogram dọc của ảnh mẫu;
- h2(i) là histogram của ảnh cần nhận dạng.
Thông thường ta cố định một đối số và tìm đối số còn lại. Chẳng hạn ta cố định k=0 và tìm vị trí theo công thức (*).Tại vị trí l chính là cột đầu tiên của bức ảnh sau khi điều chỉnh lề phía trên.
Tương tự để hiệu chỉnh lề trái của ảnh ta cũng tiến hành các bước như hiệu chỉnh lề trái nhưng thay vì sử dụng histogram dọc ta lại sử dụng histogram ngang.
2.2 Độ nghiêng của form tài liệu 2.2.1Giới thiệu 2.2.1Giới thiệu
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