1) Quy trình thiết kế mẫu phiếu
Người sử dụng có thể tạo ra mẫu form mới hoặc mở các mẫu form cũ để chỉnh sửa. Quá trình thiết kế được hỗ trợ một cách trực quan, các đối tượng trên form như nhãn, vùng đánh dấu có thể được kéo, thả. Mẫu form có thể xuất ra ảnh để in ra và điền thông tin. Sau khi hoàn tất quá trình thiết kế, ảnh của form sẽ được xử lý để tách ra các đường thẳng. Cuối cùng thông tin về các đối tượng trên form cùng các đường thẳng tìm được sẽ được lưu vào kho dữ liệu dạng XML.
Mo mau phieu cu
Tao mau phieu moi Chinh sua mau
phieu Tim cac duong thang
trong mau phieu Luu mau phieu
Tao phieu moi Mo phieu
Hình 3-7: Quy trình thiết kế mẫu phiếu 2) Quy trình nhận dạng
a) Chưa biết trước mã của mẫu phiếu
Hình 3-9 mô tả quy trình nhận dạng ảnh của form nhập liệu khi chưa biết các thông tin về mã form của ảnh, nghĩa là khi xử lý module xử lý ảnh sẽ chưa có thông tin về kích cỡ form, vị trí các vùng nhập liệu, vị trí các block(nếu có),…. Module xử lý ảnh nhận vào một ảnh và sẽ phải tự động tìm kiếm các thông tin về mã form, mã tờ trên ảnh.
Để định danh form, [26] sử dụng các đặc trưng của form(cụm ký tự, cấu trúc bảng,…). Phương pháp này cho phép định danh một form bất kỳ mà không phải sử dụng các đối tượng ngoại lai. Tuy nhiên trong một form không phải bao giờ cũng có đủ đặc trưng để định dang.
Một số ứng dụng sử dụng các đối tượng định nghĩa thêm vào form như mã vạch để định danh form nhập liệu ví dụ như SimpleIndex, Taskmaster,… ; một số form lại dùng các ký hiệu tại các vị trí khác nhau trên ảnh để đánh dấu [33]. Trong khuôn khổ luận văn này, tôi sử dụng vùng mã với các số trong vùng được tự động sinh ra theo mã của form như hình 3-8. Vùng mã viết theo kiểu này có tính trực quan cao hơn
các cách thể hiện ở trên, thông qua đó người thao tác chương trình có thể dễ dàng biết được ảnh thuộc về kiểu form mẫu nào mà chưa cần tiến hành nhận dạng ảnh.
Hình 3-8: Vùng mã form trên ảnh
Khi nạp ảnh vào để xử lý, đầu tiên ảnh sẽ được khử nhiễu, tách nền, chính xác góc nghiêng( bằng phương pháp phép chiếu hoặc sử dụng block). Sau khi tiền xử lý, vùng mã form trên ảnh sẽ được tìm kiếm và nhận dạng để xác định mã form của ảnh.
Với các thông tin có được về form, các block sẽ được tìm kiếm và chính xác hóa. Các blocks này được sử dụng làm mốc quy chiếu để xác định vùng nhập liệu. Tuy nhiên nếu trên form không có block, các vùng nhập liệu vẫn có thể xác định được thông qua vị trí tương đối đến vùng mã( vùng mã cũng là một mốc quy chiếu) và các đường thẳng, sau đó những vùng nhập liệu nhận dạng được lại tiếp tục trở thành các mốc quy chiếu để nhận dạng các vùng nhập liệu khác.
Sau khi nhận dạng hoàn tất, kết quả nhận dạng cùng với các thông tin cần thiết sẽ được lưu lại cho các mục đích xử lý khác ( hậu xử lý).
Khu nhieu, tach nen, xac dinh nguong nhi phan
Khu nghieng bang blocks
Khu nghieng bang phep chieu Xac dinh vung
ma phieu
Tim thay blocks
Khong tim thay blocks
Khong tim thay vung ma phieu
Nap cac thong tin ve mau phieu
Tim duoc vung ma phieu
Chinh xac hoa cac blocks
Tach vung nhap lieu Nhan dang vung nhap lieu
Luu ket qua Tim cac duong
thang tren anh Doi chieu cac duong thang tren
anh voi cac duong tren mau Tim thay block
Khong tim thay block Co blocks trong mau Khong co blocks
Doi chieu khong trung Doi chieu dung hai cap duong thang
b) Biết trƣớc mã của mẫu phiếu
Trong trường hợp không định nghĩa vùng mã trên form, người thao tác chương trình sẽ phải cung cấp mã form như một tham số nhận dạng. Quy trình xử lý ảnh tương tự như trên, tuy nhiên do được cung cấp mã nên không cần phải tìm kiếm vùng mã trên ảnh.
Mặt khác do các thông tin về form được biết trước khi bắt đầu xử lý, các module xử lý ảnh như "xác định block" có thể sử dụng các thông tin đó để xử lý hiệu quả hơn.
Nap thong tin ve mau phieu Khu nhieu, tach nen, xac
dinh nguong nhi phan
Khu nghieng bang phep chieu
Khu nghieng bang blocks Tim cac duong
thang tren anh Doi chieu cac duong thang tren
anh voi cac duong trong mau
Tach vung nhap lieu
Doi chieu dung hai tap duong thang
Tim duoc blocks Khong tim duoc blocks
Doi chieu khong trung nhau
Nhan dang vung nhap lieu
Luu ket qua
Khong co blocks Co blocks trong mau phieu
CHƯƠNG 4 – THỰC NGHIỆM
4.1 Môi trƣờng thực nghiệm
Chương trình được cài đặt trên ngôn ngữ C++ và C#, được thử nghiệm trên Máy tính Pentium IV 3.0 GHz, bộ nhớ RAM 512 MB sử dụng hệ điều hành Windows XP SP2.
Với mục đích đánh giá độ chính xác và hiệu năng thực hiện của các phương pháp trình bày trong luận văn, chúng tôi đã tuyển tập rất nhiều các tài liệu dạng ảnh trên các kiểu form khác nhau như: phiếu đăng ký, phiếu điều tra, hóa đơn, phiếu thanh toán, bảng điểm….Các ảnh này được tìm thấy phần lớn là thông qua trang tìm kiếm Google.com để có thể đảm bảo được sự đa dạng về kiểu form, về chất lượng ảnh, về kích cỡ và ngôn ngữ.
Bên cạnh đó tôi cũng tự thiết kế một số mẫu form đồng thời tiến hành thu thập các mẫu form trên thực tế( form tiếng việt).
Trên các ảnh kiểu form nhập dữ liệu này bao gồm nhiều đối tượng khác nhau như dòng chữ, bảng, ô đánh dấu, ảnh biểu tượng,.... Các ảnh này đều có kích thước rất đa dạng nhưng đều được in ra giấy khổ A4, và được scan với nhiều độ phân giải khác nhau, từ 100 đến 300 DPI( tương ứng với kích thước 827x1170 đến 2481x3510 pixel cho mỗi một ảnh).
Các tập ảnh con trong cơ sở dữ liệu ảnh được chọn lựa để kiểm thử cho từng giải pháp xử lý ảnh, các ảnh này được chia làm 5 loại được liệt kê trong bảng.
Bảng 1: Bảng phân loại ảnh
Category Loại ảnh Số lƣợng
Cat 1 Tài liệu thông thường 5 Cat 2 Tài liệu có chứa ảnh 5 Cat 3 Tài liệu có chứa bảng 20 Cat 4 Tài liệu hỗn hợp 30 Cat 5 Tài liệu tự thiết kế 7
4.2 Thực nghiệm về Lọc nhiễu, tách nền và tìm ngƣỡng nhị phân hóa.
Thực nghiệm Lọc nhiễu, tách nền và tìm ngưỡng nhi phân theo phương pháp ở mục 1.1. Kết quả về hiệu năng cho trong bảng dưới.
Bảng 2: Lọc nhiễu
DPI Hiệu năng (ms) Số lần lọc Trung bình
100 7.63 3.43
150 15.53 3.57
200 28.81 3.21
300 65.21 3.34
Dựa trên kết quả thực nghiệm ta thấy rằng thời gian lọc ảnh không phụ thuộc vào số lần lọc mà phụ thuộc chủ yếu vào độ phân giải của ảnh.
Ngược lại số lần lọc trung bình không phụ thuộc vào độ phân giải mà vào chất lượng của ảnh. Trong quá trình thực nghiệm chúng tôi thấy rằng với các ảnh có chất lượng tốt thì trung bình cần khoảng 2 lần lọc. Đối với những ảnh có độ tương phản thấp thì số lần lọc có thể lên đến 6 lần. Tuy nhiên do việc lọc ảnh thực tế chỉ sử dụng lược đồ mức xám nên số lần lọc không ảnh hưởng đến hiệu năng xử lý.
4.3 Thực nghiệm về xác định góc nghiêng của ảnh dựa trên phép chiếu
Thực nghiệm về xác định góc nghiêng của ảnh được cài đặt theo phương pháp phép chiếu trong mục 1.2.1. Chúng tôi đã thực nghiệm trên 60 ảnh, với mỗi một ảnh, chúng tôi thực hiện kiểm thử với 300 góc nghiêng khác nhau – mỗi góc nghiêng lệch nhau 0.1o, khoảng góc nghiêng lớn nhất mà chúng tôi thực hiện là ±15o, đây cũng là khoảng góc phù với các máy scan theo lô. Tổng số ảnh thử nghiệm là 18000 trường hợp.
Kết quả thực tế khi xác định một số góc nghiêng lớn với một ảnh 150 DPI và 300 DPI áp dụng phương pháp phép chiếu đã được tối ưu hóa như sau :
Bảng 3: Góc nghiêng với ảnh 150DPI Góc
thực
Kết quả trên ảnh với độ phân giải 150 DPI
Kết quả trên ảnh với độ phân giải 300 DPI
5 5 5 5.1 5.1 5.1 5.2 5.2 5.2 5.3 5.2 5.2 5.4 5.4 5.4 5.5 5.5 5.5 5.6 5.5 5.6 5.7 5.7 5.7 5.8 5.8 5.8 5.9 5.9 5.9 6 6.1 6.0
Qua kết quả thực nghiệm trên ta thấy với những ảnh bé, góc nghiêng xác định được chỉ có thể đạt được độ chính xác là ±0.30
đến ±0.20, Với những ảnh lớn thì độ chính xác cao hơn rất nhiều. Điều này là do các điểm ảnh có tọa độ nguyên, khi ta sử dụng các đường chiếu theo phương pháp Bresenham thì các đường chiếu này không phải là các đường thẳng hoàn toàn. Ảnh càng lớn thì các đường này càng chuẩn hơn và càng cho kết quả chính xác hơn.
Kết quả chúng tôi thu được đối với độ lệch trung bình (0) so với góc thực tế:
Bảng 4: độ lệch trung bình so với góc thực tế Phƣơng pháp
phép chiếu tối ƣu (0) Cat 1 0.11 Cat 2 0.05 Cat 3 0.03 Cat 4 0.03 Cat 5 0.03 Total 0.04
Trong thực tế sai số ±0.10 trong việc xác định góc nghiêng hoàn toàn có thể chấp nhận được. Với kết quả thực nghiệm trên cho ta thấy áp dụng phương pháp phép chiếu trong hệ thống là hợp lý.
Chúng tôi đã thực hiện kiểm thử hiệu năng với ảnh 100 DPI, 150 DPI, 200 DPI, 300 DPI, kết quả thu được trong bảng 5
Bảng 5: So sánh hiệu năng của phƣơng pháp phép chiếu tối ƣu với phƣơng pháp phép chiếu DPI Phƣơng pháp phép
chiếu tối ƣu (ms)
Phƣơng pháp phép chiếu(ms) 100 12.81 64.53 150 25.63 132.40 200 31.15 259.17 300 41.34 517.12
Thực nghiệm cho thấy độ chính xác của phương pháp phép chiếu khi tối ưu và phương pháp phép chiếu là gần như nhau, trong khi đó tốc độ xử lý khi tối ưu thuật toán và tham số nhanh hơn một các đáng kể.
4.4 Thực nghiệm về xác định góc nghiêng của ảnh dựa trên block
Thực nghiệm về xác định góc nghiêng của ảnh được cài đặt theo phương pháp xác định block trong mục 1.2.2. tôi đã thực nghiệm trên 7 ảnh, mỗi một ảnh thực hiện kiểm thử với 300 góc nghiêng khác nhau – mỗi góc nghiêng lệch nhau 0.1o, khoảng góc nghiêng lớn nhất là ±15o, đây cũng là khoảng góc phù với các máy scan dạng batch job. Tổng số ảnh thử nghiệm là 2100 ảnh.
Kết quả thử nghiệm trên một số góc nghiêng của ảnh bài thi trắc nghiệm có độ phân giải 150DPI và 300DPI
Bảng 6: Kết quả xác định góc nghiêng bằng block Góc thực Kết quả trên ảnh 150 DPI Kết quả trên ảnh 300 DPI 5 5 5 5.1 5.1 5.1 5.2 5.2 5.2 5.3 5.2 5.3 5.4 5.4 5.4 5.5 5.5 5.5 5.6 5.6 5.6 5.7 5.7 5.7 5.8 5.8 5.8 5.9 5.9 5.9 6 6 6
Block đặt bên lề ảnh có khoảng cách giữa block đầu tiên và block cuối cùng càng lớn thì đường thẳng xấp xỉ qua tâm các block càng dài, do đó thì độ chính xác càng cao. Qua thử nghiệm thấy rằng tìm góc nghiêng bằng block cho kết quả với sai số độ nghiêng của ảnh là ±0.030
, đây là phương pháp rất tin cậy không chỉ trong việc xác định góc nghiêng mà các block còn được xác định rất đầy đủ.
Kiểm thử hiệu năng với ảnh 150 DPI , 300 DPI, kết quả thu được trong bảng 7
Bảng 7: Thời gian xâc định block DPI Phƣơng pháp xác
định block (ms)
150 12.45
300 31.17
4.5 Thực nghiệm về phân vùng ảnh dựa trên block
Tập dữ liệu cần để kiểm thử cho module xác định các vùng nhập liệu dựa trên vị trí tương đối đến block gồm các ảnh loại 5 trong bảng 1.
Phương pháp sử dụng block làm mốc quy chiếu đã được tác giả sử dụng để nhận dạng các bài thi trắc nghiệm của một số kỳ thi như "Kỳ thi tốt nghiệp phổ thông trung học Hải Dương" và đã chứng minh được tính hiệu quả trong khi áp dụng trong
thực tế. Trong khuôn khổ luận văn này, phương pháp đã được phát triển thêm lên và được thực nghiệm trên 1000 ảnh với các kiểu form góc nghiêng khác nhau.
Kết quả kiểm thử với ảnh 150 DPI , 300 DPI thu được kết quả trong bảng 8
Bảng 8: Độ chính xác phƣơng pháp tách vùng dựa trên block DPI Sai số trong
xác định tỉ lệ co giãn Sai số trong xác định vị trí vùng(pixel) 150 0.02 2.25 300 0.01 3.85
Sai số là do ảnh bị co giãn không đều khi scan, sự co giãn giữa các block trong ảnh không đánh giá chính xác hoàn toàn được sự co giãn trên toàn bộ ảnh. Do đó vùng tìm kiếm cần được mở rộng để hạn chế việc mất thông tin.
4.6 Thực nghiệm về phân vùng ảnh dựa trên đƣờng thẳng
Tập dữ liệu có thể dùng kiểm thử cho module xác định các vùng nhập liệu dựa trên vị trí tương đối đến đường thẳng bao gồm các ảnh loại 3, 4 và 5 trong bảng 1. Tôi sử dụng 15 ảnh mẫu( form) để tạo ra 240 ảnh kiểm thử.
4.6.1 Thực nghiệm 1: Xác định các đƣờng thẳng
Với tập ảnh thực nghiệm chúng tôi chia ra làm 2 loại : Loại 1 gồm các ảnh có tập các đường thẳng với độ dày là 1 pixel và Loại 2 gồm các ảnh có tập các đường thẳng với độ dày ≥ 2 pixel. Thực hiện kiểm thử về độ chính xác cho việc xác định đầy đủ các đường thẳng chính ở trên ảnh scan so với ảnh mẫu.
Bảng 9: Độ chính xác của phƣơng pháp xác định đƣờng thẳng DPI Độ chính xác – Loại 1(%) Độ chính xác – Loại 2(%) 100 73.35 96.14 150 87.61 99.15 200 91.53 99.45 300 97.11 99.66
Kết quả thực nghiệm thu được cho thấy, để đạt được độ chính xác cao chúng ta nên sử dụng các ảnh có độ dày các đường thẳng tối thiểu là 2 pixel.
Khi kiểm thử với tập các đường 1 pixel, với các góc nghiêng lớn, thì sau khi xác định được góc nghiêng và xoay lại ảnh, các đường thẳng này có dạng răng cưa và bị đứt đoạn do đó chỉ có thể xác định được các đoạn thẳng rất ngắn, dễ bị khử đi, dẫn tới việc mất một số đường thẳng chính. Trong khi đó với tập các đường thẳng có độ dày là 2 pixel thì sau khi xoay lại, các đường thẳng ít bị đứt đoạn, khi đó sẽ tạo ra được các đoạn thẳng dài, và có thể nhận dạng khá đầy đủ các đường thẳng chính.
4.6.2 Thực nghiệm 2: Tìm cặp các đƣờng thẳng giữa ảnh scan với ảnh mẫu.
Trong phần thực nghiệm này, trước tiên chúng tôi thực hiện kiểm thử với những ảnh được scan, sau đó với những ảnh scan đó chúng tôi kẻ thêm các đường nhiễu hoặc xóa bớt các đường thẳng ngang và dọc, nhưng vẫn đảm bảo trong ảnh đó có ít nhất 3 đường thẳng ngang và 3 đường thẳng dọc, và số đường thêm vào hoặc bớt đi phải không quá ¼ số đường có trong ảnh mẫu.
Thực nghiệm với cả các đường thẳng ngang và các đường thẳng đứng cho kết quả như trong bảng :
Bảng 10: Độ chính xác của phƣơng pháp ghép cặp các đƣờng thẳng trong tập mẫu và tập ảnh mới Độ chính xác (%)
Ảnh sau khi scan 99.17
Ảnh scan và thêm các đường thẳng
99.17 Ảnh scan và xóa bớt các
đường thẳng
98.33 Ảnh scan và được thêm, bớt
các đường thẳng
97.25
4.6.3 Thực nghiệm 3: Xác định các vùng cần nhận dạng
Chúng ta thực hiện việc phân vùng bằng cách xác định các vị trí cục bộ của vùng cần nhận dạng so với vị trí của đường thẳng gần nó nhất cả theo chiều dọc và theo chiều ngang.
Trong một số trường hợp vùng cần nhận dạng nằm các xa các đường thẳng do vậy khi thực nghiệm chúng tôi thấy các vị trí các vùng thường bì dịch chuyển so với vị trí ban đầu, dẫn tới bị mất một phần nhỏ của vùng( hình 4-2).
Hình 4-1: Vùng cần xác định bị lệch so với vùng xác định thực tế