Vì các máy scan hầu hết đều không có vị trí canh chuẩn, nên ảnh bài thi đầu vào cho việc chấm điểm có thể sẽ bị lệch, nghĩa là các vị trí cần chấm trong ảnh không chính xác so với mẫu ch
Trang 1b) Phần trả lời câu hỏi:
Đây là nơi thí sinh đánh dấu câu trả lời của mình Nó có dạng như hình sau:
Hình 2-8: Phần trả lời câu hỏi của thí sinh trong đề thi mẫu
c) Các phần khác:
Qua hình minh họa trên ta nhận thấy trên các biểu mẫu có thêm đường viền đen Các đối tượng này đóng vai trò là lề của biểu mẫu, điều này giúp ích rất nhiều cho quá trình chấm điểm được chính xác hơn
Ngoài những thành phần nêu trên chúng ta còn thấy trên đề còn có một số đối tượng đồ hoạ như: đường thẳng, hình chữ nhật, hình tròn…
2.1.2 Tổ chức dữ liệu để biểu diễn và lưu trữ biểu mẫu
Thiết kế biểu mẫu là một phần của hệ thống, nó không chỉ có nhiệm vụ tạo ra những mẫu bài thi trắc nghiệm mà còn có nhiệm vụ cung cấp thông tin về mẫu bài thi đó cho quá trình nhận dạng sau này Do đó việc tổ chức lưu trữ như thế nào cũng
Trang 2là vấn đề hết sức quan trọng Ngày nay công nghệ XML đang phát triển rất mạnh và đang được áp dụng rất rộng rãi Ngoài việc giúp cho định nghĩa một đối tượng có cấu trúc được rõ ràng, nó còn có khả năng chuyển đổi sang các hệ thống khác một cách dễ dàng Và đó cũng là lý do mà chương trình chọn cách lưu trữ có sử dụng XML [5]
Mỗi biểu mẫu được xem là một “Document” gồm nhiều trang “Page” Mỗi trang lại gồm các đối tượng khác Dựa theo phân tích các đối tượng như trên thì ta
có thể lưu trữ biểu mẫu theo cấu trúc như sau (chi tiết sẽ được đề cập sau)
<Document>
<Page>
<Text/>
<Text/>
<TextField/>
<AnswerSheet/>
<AnswerSheet/>
<Line/>
<Rect/>
<Ellipse/>
…
</Page>
<Page>
</Page>
…
</Document>
Trang 32.2 Lý thuyết cho phần chấm điểm tự động:
2.2.1 Tóm tắt quá trình thực hiện của phần chấm điểm tự động
Chương trình khi chấm điểm sẽ thực hiện một quá trình được tóm tắt như sau:
Đầu tiên, bài thi sau khi được làm xong, sẽ được quét đưa vào máy tính
xử lý Ảnh lúc này là ảnh màu chiếm nhiều thông tin không cần thiết
cho việc chấm điểm, do đó trước khi chấm cần được làm xám và chuyển thành ảnh nhị phân (tức ảnh trắng đen) để loại bỏ bớt các
thông tin dư thừa Vì các máy scan hầu hết đều không có vị trí canh chuẩn, nên ảnh bài thi đầu vào cho việc chấm điểm có thể sẽ bị lệch, nghĩa là các vị trí cần chấm trong ảnh không chính xác so với mẫu chấm bài, dẫn đến bài chấm sẽ bị sai
Dựa vào các đánh dấu có sẵn ở 4 góc của bài thi được xác định bằng
thuật toán Hough Transform, máy sẽ tính được góc lệch của bài thi
(Tuy nhiên, do ban đầu việc scan bị lệch nên phần rìa của bài thi sẽ bị vùng đen Nên để nhận dạng 4 góc đựơc chính xác, trước đó chương trình cần chuyển vùng rìa đen sang trắng, tức loại bỏ vùng đen đó bằng
thuật toán tô màu Để cải tiến tốc độ, thuật toán tô màu dựa theo dòng quét cải tiến được sử dụng)
Sau khi tính được góc lệch của ảnh bài thi so với mẫu chấm bài,
chương trình sẽ áp dụng phép xoay ảnh, một trong các lý thuyết xử lý
ảnh, để chuyển bài thi về trạng thái đúng, tức ảnh bài thi không bị lệch nữa Lúc này, các vị trí đánh dấu của bài thi đã thay đổi, đều bị xoay một góc như ảnh bài thi, chương trình sẽ thực hiện các phép tính xoay
để xác định lại vị trí hiện tại của các đánh dấu ở 4 góc Tiếp đó, chương trình sẽ thực hiện cắt bỏ các phần thừa ngoài vùng đánh dấu của bài thi, chỉ lấy toàn bộ phần bên trong vùng đánh dấu Kết quả ta đã có đựơc một ảnh bài thi hoàn chỉnh có các vị trí chấm được xác định theo mẫu
Trang 4chấm bài chuẩn Các bước trên là các giai đoạn làm chuẩn ảnh đầu vào
để việc chấm thi được chính xác
Công việc tiếp theo là chấm điểm ảnh bài thi đã được chuẩn hoá theo mẫu chấm tương ứng Dựa vào các thông tin về các vị trí cần thiết (cho việc rút trích thông tin thí sinh cũng như chấm điểm cho bài thi) từ bản
mẫu bài thi trong phần thiết kế, ta sẽ lấy ra các vùng ảnh cần được xử
lý (crop)
Tuỳ theo thông tin từ mẫu chấm, ta sẽ biết được vùng ảnh lấy ra cần thực hiện hoặc việc xem xét có tô hay không, hoặc phức tạp hơn là nhận dạng chữ viết tay in có trong vùng ảnh đó Đối với trường hợp xét
một vùng ảnh là có được tô hay không thì công việc chỉ đơn giản là
xét xem mật độ điểm đen trong vùng ảnh đó có lớn hay nhỏ hơn một ngưỡng nào đó do ta quy định sẵn từ trước Tuy nhiên, đối với trường hợp vùng ảnh chứa chữ viết tay in, công việc tương đối phức tạp hơn,
đòi hỏi phải áp dụng lý thuyết về mạng nơron để nhận dạng ký tự
được chứa trong vùng ảnh đang xét Do mạng nơron có số đầu vào xác
định cụ thể, nên vùng ảnh cần nhận dạng phải được biến đổi tỉ lệ (scale) lại cho phù hợp với đầu vào của mạng Chi tiết về việc ứng
dụng mạng nơ ron sẽ được bàn rõ ở phần “Mạng nơ ron và ứng dụng vào nhận dạng chữ viết tay in”
Sau khi chấm xong, thông tin của bài làm vừa có sẽ được so với đáp án
để cho ra kết quả, đưa vào danh sách các bài thi đã chấm Người dùng
có thể lưu lại danh sách kết quả này vào cơ sở dữ liệu để tiện việc xem xét lại về sau
Sau đây là sơ đồ mô tả tóm tắt quá trình chấm thi:
Trang 6Hình 2-9: Sơ đồ tóm tắt quá trình chấm thi
2.2.2 Sơ Lược Các Lý Thuyết Về Xử Lý Ảnh Và Nhận Dạng
2.2.2.1 Xử lý ảnh:
2.2.2.1.1 Các thao tác xử lý ảnh cơ bản:
Trong phần chấm điểm tự động này, các thao tác xử lý ảnh được ứng dụng bao gồm: làm xám ảnh (greyscale), chuyển ảnh sang ảnh nhị phân (threshold), xoay ảnh, biển đổi tỉ lệ ảnh
Ta nhận thấy, đối với đề tài nhận dạng bài thi trắc nghiệm cụ thể như yêu cầu, màu sắc trong ảnh của bài thi là không cần thiết Do đó, thực hiện việc chuyển
Trang 7đổi từ ảnh màu sang ảnh xám rồi sang ảnh nhị phân là nhằm đơn giản hoá, loại bỏ các thông tin dư thừa và chuẩn hoá đầu vào của chương trình, giúp quá trình xử lý của chương trình được gọn nhẹ và nhanh hơn
Tiếp đến, do bài thi của thí sinh khi được quét vào máy để chấm sẽ xảy ra trường hợp bài thi bị đặt nghiêng trong máy scan, dẫn đến bài thi trong ảnh đầu vào không được vuông góc như trong bản thiết kế mà sẽ bị nghiêng một góc bất kỳ Việc ứng dụng xoay ảnh ở đây nhằm xoay bài thi lại cho vuông góc như trong mẫu thiết kế
Cuối cùng, vì chương trình cho phép các file ảnh đầu vào có kích thước bất
kỳ, nên việc biến đổi tỉ lệ ảnh là cần thiết nhằm giúp chuyển các vùng cần nhận dạng hay xử lý về một chuẩn chung, cụ thể là về một kích thước chung (chẳng hạn vùng viết chữ tay cần nhận dạng sẽ được scale lại thành ảnh có kích thước 16x16 để phù hợp với đầu vào của mạng nơrôn ứng dụng cho việc nhận dạng chữ viết tay -
xem ở phần nhận dạng chữ viết tay)
Chi tiết về các thao tác này được bàn rõ ở phần phụ lục
2.2.2.1.2 Tô màu bằng thuật toán dựa theo dòng quét cải tiến
Các định nghĩa:
9 Một vùng tô bao gồm đường biên và vùng bên trong Đường biên là một đường khép kín, ví dụ như đa giác
9 Tô màu là thao tác tìm các điểm sáng “nằm bên trong” một vùng tô
9 Tô dựa theo dòng quét (scan line) là tô màu theo dòng điểm sáng trên màn hình
Cách thực hiện:
Thuật toán tô màu dựa theo đường biên: [2]
Đường biên trong thuật toán này được mô tả bằng một giá trị duy nhất
là màu của tất cả các điểm thuộc về đường biên
Bắt đầu từ điểm nằm bên trong vùng tô, ta sẽ kiểm tra các điểm lân cận của
nó đã được tô màu hay có phải là điểm biên hay không, nếu không phải là
Trang 8điểm đã tô và không phải là điểm biên, ta sẽ tô màu nó Quá trình này được lặp đi lặp lại cho đến khi nào không còn tô được điểm nào nữa thì dừng Bằng cách này, toàn bộ các điểm thuộc vùng tô được kiểm tra và sẽ được tô hết
Hình 2-10: quá trình thực hiện của thuật toán tô màu dựa theo đường biên
Tuy nhiên, do thuật toán này khi cài đặt có tính đệ quy, thường dẫn đến tràn bộ nhớ đối với vùng tô khá lớn Cho nên, để cải tiến, ta sẽ tiến hành loang dần và lần lượt tô từng đoạn giao theo dòng quét ngang thay vì tô theo các điểm lân cận (chẳng hạn 4 điểm lân cận) Đó chính là thuật toán tô màu
dựa theo dòng quét cải tiến được trình bày ngay sau đây
Thuật toán tô màu theo dòng quét cải tiến:
9 Giới thiệu ý tưởng:
Lưu lại thông tin của điểm bắt đầu mỗi đoạn giao nhau của dòng quét ngang thay vì phải lưu hết tất cả các điểm lân cận chưa được tô xung quanh điểm hiện hành Việc tô màu được thực hiện loang theo các dòng quét từ điểm bắt đầu hướng lên biên trên, sau khi tô xong, lại theo hướng xuống biên dưới Ứng với mỗi dòng quét ngang, ta sẽ loang và tìm pixel trái nhất để lưu lại
9 Chi tiết thuật toán:
Từ một điểm bất kỳ nằm trong vùng cần tô:
Trang 9B1: ta tìm điểm bên trái nhất trong vùng cần tô của dòng kề trên và dòng kề
dưới điểm đang xét tính từ vị trí của điểm đang xét (miễn các dòng kề trên và dòng kề dưới này vẫn nằm trong vùng cần tô) Các điểm trái nhất đó, ta đưa vào một danh sách chờ theo thứ tự định sẵn (chẳng hạn điểm nằm trên trước rồi điểm nằm dưới sau) miễn các điểm đó không trùng với các điểm đã có trong danh sách chờ
B2: Ta lại tiếp tục xét cho điểm kề bên phải của điểm đang xét Nếu đã đến
đường biên thì nhảy sang B3, còn ko thì quay lại B1
B3: Ta lấy phần tử được đưa vào sau cùng của danh sách chờ rồi lại quay trở
về B1 làm tương tự như trên Nếu danh sách chờ hết phần tử thì đã tô xong vùng cần tô, thuật toán kết thúc
9 Ví dụ minh hoạ:
Trong hình 2.10 sau, đoạn giao đầu tiên chứa điểm bắt đầu (tô màu trắng) sẽ được tô trước) Sau đó các vị trí 1, 2 ứng với các đoạn giao của các dòng quét kế tiếp sẽ được lưu lại
Hình 2-11
Bước tiếp theo (hình 2.11), điểm ứng với vị trí 2 sẽ được lấy ra và tiến hành tô màu bằng cách loang từ điểm này ra theo chiều ngang, sau đó pixel ứng vị trí 3 của dòng quét kế tiếp sẽ được lưu lại
Trang 10Hình 2-12
Sau khi dòng quét ứng với điểm 3 đã được xử lý tương tự như trên xong, stack lưu các vị trí của các điểm “hạt giống” cho các dòng quét kế tiếp như trong hình 2.12
Hình 2-13
Hình 2.13 minh hoạ khi thuật toán đã tô được toàn bộ một phần vùng phía trên bên phải của vùng tô Khi pixel ứng với vị trí 5 được xử lý xong, ta
có phần còn lại phía trên bên trái sẽ được tô Sau đó pixel ứng với vị trí 4 sẽ được xử lý, các dòng quét phía dưới sẽ được tô tiếp theo
Trang 11Hình 2-14
Ý nghĩa:
Thuật toán tô màu dựa theo dòng quét cải tiến được dùng để tô màu 4 góc của ảnh bài thi khi mới vừa được đưa vào chấm Vì ảnh của bài thi ban đầu có phần rìa xung quanh mày đen, mà nếu cứ để như vậy rồi nhận dạng các ký hiệu định sẵn
ở bốn góc sẽ dẫn đến nhận dạng sai vị trí các ký hiệu đó
Vì vậy, ta phải dùng thuật toán tô màu để tô trắng các vùng đen ở bốn góc giúp việc nhận dạng đựơc chính xác Để giúp giảm bớt thời gian thực hiện của chương trình, trong tình huống cụ thể này, ta đã áp dụng thuật toán tô màu quét dòng cải tiến giúp việc tô màu được nhanh hơn, không tốn nhiều tài nguyên
2.2.2.2 Nhận dạng:
2.2.2.2.1 Nhận dạng bốn góc của bài thi bằng thuật toán Hough Transform
Dẫn nhập:
Trang 12Xét trường hợp cần nhận dạng các đường thẳng bất kỳ trong một ảnh nhị phân (với các hình ảnh trên hình được quy định có màu đen):
- Ta biết rằng với mỗi điểm đen bất kỳ trong không gian ảnh sẽ có vô số các đường thẳng đi qua điểm đó
- Ta lại biết rằng mọi đường thẳng đều có thể biểu diễn được bằng phương trình sau:
y = mx + b với m và b là 2 số thực bất kỳ, trong đó m xác định góc của đường thẳng so với trục hoành và b xác định vị trí đường thẳng cắt với trục tung
Do đó, với một cặp điểm đen (x1,y1) xác định bất kỳ, ta sẽ có thể tìm ra được
vô số cặp (m,b) ứng với các đường thẳng có thể đi qua điểm (x1,y1) đó, sao cho m
và b thoả điều kiện sau:
b = y1 – mx1
Thuật toán Hough Transform cơ bản được thực hiện dựa trên ý tưởng như sau:
Mỗi cặp điểm (x,y) trong ảnh sẽ xác định trong không gian (m,b) một đường thẳng duy nhất tương ứng với cặp điểm (x,y) đó Đường thẳng này giúp xác định các cặp điểm (m,b) mà giá trị của chúng giúp tạo nên các đường thẳng trong ảnh mà
đi qua được cặp điểm (x,y) Với nhiều cặp điểm (x,y) sẽ xác định nhiều đường thẳng tương ứng trong không gian (m,b) Như vậy, trong không gian (m,b), nếu tại điểm (m,b) nào mà có số đường thẳng đi qua vị trí đó trong không gian (m,b) lớn hơn một giá trị cụ thể (tuỳ theo quy định chiều dài của đường thẳng lớn hơn bao nhiêu thì là được cho là đường thẳng), thì cặp giá trị (m,b) của điểm đó chính là 2 giá trị xác định nên một trong những đường thẳng cần được tìm thấy trong ảnh
Các bước thực hiện:
Trang 13Cho mảng 2 chiều (m,b) Giá trị tại một vị trí trong mảng cho biết số lần đường thẳng được tạo bởi cặp giá trị (m,b) tương ứng với vị trí đó xuất hiện trong ảnh
B1: quét qua tất cả các điểm cần xét trong ảnh
B2: với mỗi điểm được xét, ta sẽ tính các cặp giá trị (m,b) thoả các đừơng
thẳng đi qua điểm đó Từ đó, ta tăng giá trị tại các vị trí (m,b) tương ứng trong mảng 2 chiều mô tả không gian (m,b) đó lên 1 đơn vị
B3: sau đó xét tất cả các phần tử trong mảng 2 chiều mô tả không gian (m,b)
đó, nếu tại phần tử nào mà có giá trị lớn hơn chiều dài quy định cần thiết để tạo nên một đường thẳng thì ta sẽ nhận dạng được một đường thẳng y = mx + b trong đó m,b xác định nhờ vào vị trí của phần tử đó
Cải tiến cho thuật toán Hough Transform cơ bản áp dụng cho việc nhận dạng các đường thẳng:
Trong phần trên, ta thấy m, b trong công thức b = y – mx không bị giới hạn Điều này có nghĩa rằng, khi m đến lên vô cực thì b cũng tương ứng đến vô cực Do
đó, việc sử dụng mảng 2 chiều (là có giới hạn) để mô tả không gian (m,b) (không có giới hạn), điều này là không tưởng trong việc lập trình Ngoài ra, theo quy định, chỉ
số của mảng không được âm
Do đó, ta cần một công thức thay thế cho công thức biễu diễn đường thẳng:
y = mx + b sao cho việc xác định các tham số (như m và b chẳng hạn) nằm trong một khoảng giới hạn xác định
Và công thức đó là:
x*cosA + y*sinA = B