Chuẩn bị:
Trước hết chúng ta sẽ lấy ảnh scan của 1 tờ phiếu trắc nghiệm rồi dùng Matlab dò tìm các tọa độ của các câu trả lời thì có được các thông số sau:
Tọa độ 4 pixel (theo chiều kim đồng hồ, từ pixel bên trái cùng) bao các khung đen:
Khung đen TT : (52,55) – (105,56) – (105,77) – (53,77)
Khung đen DP : (2248,3301) – (2300,3301) – (2300,3323) – (2248,3323)
Tọa độ tâm của 1 số câu trả lời:
Câu 1: A(238,1254) – B(323,1254)
Câu 2: A(239,1336)
Câu 26: A(791,1250)
Tọa độ của pixel phía trên bên trái của khung đen TT là (a,b) = (55,52).
Tọa độ của pixel phía dưới bên phải của khung đen DP là (c,d) = (3323,2300).
Độ dài chiều dọc hình chữ nhật: d1 = c – a = 3323 – 55 = 3268
Độ dài chiều ngang hình chữ nhật: d2 = d – b = 2300 – 52 = 2248
10 trang |
Chia sẻ: netpro | Lượt xem: 1900 | Lượt tải: 4
Bạn đang xem nội dung tài liệu Đề tài Mô phỏng chương trình chấm bài thi trắc nghiệm, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
Đề bài:
TT
TP
DP
DT
A
Nhận diện bài kiểm tra trắc nghiệm một cách tự động.
Bảng báo cáo:
I – Giải thuật chung:
Nhiệm vụ của chúng ta là cần phải xác định xem các câu trả lời trong bài trắc nghiệm (câu 1, 2,..) là A, B, C, D hay E. Do đó chúng ta sẽ tìm vị trí của các câu 1A, 1B, 1C, 1D, 1E, 2A, 2B,… rồi chỉ cần kiểm tra xem các ô này có được tô đen hay không (nghĩa là số lượng các pixel đen ở các ô này có lớn hơn 1 giá trị T0 (sẽ chọn sau) nào đó). Tức là vấn đề chính trong bài thực hành là xác định vị trí các ô 1A, 1B,…
Khó khăn nảy sinh trong bài toán là các ảnh scan bài trắc nghiệm có thể có kích thước khác nhau. Do đó chúng ta phải định vị các ô 1A, 1B,… dựa theo những cái không đổi của 1 ảnh trắc nghiệm. Cụ thể ở đây chúng ta dựa vào 4 khung đen TT ( trên trái), TP (trên phải), DT (dưới trái), DP (dưới phải)
luôn có vị trí (vị trí thực tế của tờ giấy trắc nghiệm) không đổi so với nhau.
Gọi tọa độ của pixel phía trên bên trái của khung đen TT là (a,b), tọa độ của pixel phía dưới bên phải của khung đen DP là (c,d). Lúc này chúng ta có thể coi (1 cách xấp xỉ) là 4 khung đen TT-TP-DP-DT tạo thành 1 hình chữ nhật có tọa độ 2 đỉnh trên trái và dưới phải (gọi là 2 tọa độ chuẩn) là (a,b) và (c,d).
Độ dài chiều dọc hình chữ nhật: d1 = c – a
Độ dài chiều ngang hình chữ nhật: d2 = d – b
(Chú ý là Matlab lưu bức ảnh dưới dạng ma trận nên cũng lưu tọa độ của các pixel ảnh theo nguyên tắc ma trận: tọa độ dòng rồi tới tọa độ cột (tức là lưu trữ tọa độ trục y trước rồi tới trục x, theo hệ trục tọa độ thông thường). Tuy nhiên khi dùng Matlab để dò tọa độ các pixel như hình bên thì Matlab sẽ hiện tọa độ theo cách thông thường, tức trục ngang x trước rồi tới trục dọc y (trái với cách Matlab lưu các tọa độ này). Do đó khi chúng ta xử lý thì cần hoán đổi vị trí của các tọa độ.)
Với các thông số trên, chúng ta có thể tính tọa độ (x,y) của pixel A (tâm của câu trả lời 1A) nằm trong hình chữ nhật theo công thức:
(*)
Và chúng ta băn khoăn là nếu vẫn lấy tờ phiếu trắc nghiệm trên scan bằng 1 máy scan khác thì thu được 2 tọa độ chuẩn khác là (a’,b’) và (c’,d’) với độ dài chiều dọc, chiều ngang hình chữ nhật lần lượt là d1’ = c’ – a’ và d2’ = d’ – b’ thì liệu công thức:
Có cho ra tọa độ (x’,y’) của pixel A trong tỉ lệ mới này hay không? Tức là nếu chúng ta gọi tọa độ của pixel A trong tỉ lệ mới là (x’,y’) thì liệu:
II - Chứng minh tính đúng đắn của giải thuật:
Vì chúng ta chỉ dùng 1 phiếu trắc nghiệm để scan theo 2 tỉ lệ khác nhau nên phải có:
Tương tự ta có:
Nói tóm lại là công thức (*) đúng cho mọi tỉ lệ khác nhau của ảnh.
Làm tương ứng ta cũng thu được kết quả: với 2 phiếu trắc nghiệm khác nhau mà scan theo cùng 1 tỉ lệ thì công thức (*) vẫn đúng cho cả 2 trường hợp khi muốn tìm vị trí pixel A.
Kết hợp 2 kết quả trên ta thu được tính chất quan trọng: với bất kỳ tờ phiếu trắc nghiệm nào được scan theo bất kỳ tỉ lệ nào thì công thức (*) vẫn luôn dùng được.
III - Tiến hành chương trình:
1) Chuẩn bị: Trước hết chúng ta sẽ lấy ảnh scan của 1 tờ phiếu trắc nghiệm rồi dùng Matlab dò tìm các tọa độ của các câu trả lời thì có được các thông số sau:
Tọa độ 4 pixel (theo chiều kim đồng hồ, từ pixel bên trái cùng) bao các khung đen:
Khung đen TT : (52,55) – (105,56) – (105,77) – (53,77)
Khung đen DP : (2248,3301) – (2300,3301) – (2300,3323) – (2248,3323)
Tọa độ tâm của 1 số câu trả lời:
Câu 1: A(238,1254) – B(323,1254)
Câu 2: A(239,1336)
Câu 26: A(791,1250)
Tọa độ của pixel phía trên bên trái của khung đen TT là (a,b) = (55,52).
Tọa độ của pixel phía dưới bên phải của khung đen DP là (c,d) = (3323,2300).
Độ dài chiều dọc hình chữ nhật: d1 = c – a = 3323 – 55 = 3268
Độ dài chiều ngang hình chữ nhật: d2 = d – b = 2300 – 52 = 2248
Vị trí câu trả lời 1A:
Số pixel tăng khi đi từ tâm của câu 1A tới câu 1B:
Số pixel tăng khi đi từ tâm của câu 1A tới câu 2A:
Số pixel tăng khi đi từ tâm của câu 1A tới câu 26A:
2) Các bước tiến hành cụ thể:
Chuyển ảnh màu scan phiếu trắc nghiệm thành ảnh trắng đen với hàm im2bw(ảnh,0.6) (ngưỡng là 0.6).
Tạo array bai_lam chứa 100 số 0.
Xác định xem câu trả lời 1A có được tô không (tổng của các pixel trong ma trận 5x5 tâm là có 5 - có tối đa 5 pixel trắng – hay không). Nếu có thì bật biến bai_lam(1) = 1.
Xác định xem câu trả lời 1B có được tô không. Nếu có thì:
+ Nếu bai_lam(1) 0 (trong câu 1 đã có ô được tô) thì gán bai_lam(1) = 0 và tới câu 2.
+ Nếu bai_lam(1) =0 thì gán bai_lam(1) = 2.
Tương tự cho câu 1C, 1D, 1E.
Xét câu 2A với tâm là . Và lại xét câu 2A có được tô không.
Làm tương tự cho 100 câu trả lời.
3) Mở rộng:
- Phương pháp làm trên không chỉ áp dụng được cho việc tìm câu trả lời 1A, 1B,… mà còn áp dụng y nguyên cho việc tìm mã đề và mã số sinh viên.
- Ngoài ra trong 1 tờ phiếu trắc nghiệm chúng ta còn thấy cần chú ý tới vấn đề: sinh viên có ký tên không và giám thị có ký tên không. Chúng ta sẽ xác định việc này bằng 1 phương pháp đơn giản như sau. Lấy ví dụ với việc tìm chữ ký của thí sinh:
+ Trước hết chúng ta sẽ định ra 1 hình chữ nhật chứa
chữ ký thí sinh và tìm tọa độ của pixel trên trái, dưới phải của hình chũ nhật này. Kết quả tính toán tọa độ 2 pixel này là:
+ Sau đó xác định xem trong hình chữ nhật này có ít nhất 100 ô đen không, nếu có thì coi như thí sinh có kí tên.
Làm tương tự cho chữ ký và phần ghi tên của giám thị 1,2.
4/ Kết quả hiển thị :
Sau khi chạy chương trình sẽ cho ra kết quả :
Sinh viên làm bài có ký tên không
Gíam thị 1 và 2 có ký tên và ghi tên không
Ghi ra mã đề mà sinh viên tô . Có thể báo sai nếu sinh viên tô mã đề sai .
Ghi ra mã số sinh viên . Có thể báo sai nếu sinh viên tô sai quy định
Trình bày bài làm của sinh viên theo thứ tự từ 1 à 100 . Sau mỗi số sẽ là 1 trong 6 ký tự {A,B,C,D,E,S} . 5 ký tự đầu ứng với câu trả lời mà thí sinh chọn . Nếu ký tự là S : thí sinh không chọn câu trả lời hoặc tô 2 đáp án trong cùng 1 câu .
IV – Tọa độ dò bằng Matlab trên 1 phiếu trắc nghiệm chọn trước:
1) Tọa độ các khung đen:
- Khung đen trên trái : (52,55) – (105,56) – (105,77) – (53,77)
- Khung đen trên phải : (2230,47) – (2283,47) – (2283,70) – (2230,70)
- Khung đen dưới phải : (2248,3301) – (2300,3301) – (2300,3323) – (2248,3323)
- Khung đen dưới trái : (69,3309) – (123,3309) – (123,3332) – (69,3332)
2) Chữ ký thí sinh:
Nằm trong khung (441,277) – (810,277) – (810,331) – (441,331)
3) Giám thị 1:
- Chữ ký giám thị 1: nằm trong khung (1810,224) – (2233,224) – (2233,481) – (1810,481)
- Ghi tên giám thị 1: nằm trong khung (1903,504) – (2230,504) – (2230,542) – (1903,542)
4) Giám thị 2:
- Chữ ký giám thị 2: nằm trong khung (1810,685) – (2233,685) – (2233,925) – (1810,925)
- Ghi tên giám thị 2: nằm trong khung (1908,958) – (2233,958)–(2233,1005)–(1908,1005)
5) Mã số thí sinh:
Vị trí các tâm:
- Dòng 0 : (1058,472) – (1119,472)
- Dòng 1 : (1058,531)
6) Mã đề:
- Dòng 0 : (1526,471) – (1587,471)
- Dòng 1 : (1526,530)
7) Các câu trả lời:
- Câu 1: A(238,1254) – B(323,1254)
- Câu 2: A(239,1336)
- Câu 26:A(791,1250)
V – Chuyển đổi các tọa độ về dạng tổng quát:
1) Khung hình chữ nhật cơ sở:
Tọa độ của pixel trên cùng, bên trái của khung đen TT: (a,b) = (55,52)
Tọa độ của pixel dưới cùng, bên phải của khung đen DP: (c,d) = (3323,2300)
Chiều dọc của hình chữ nhật: d1 = c – a = 3323 – 55 = 3268
Chiều ngang của hình chữ nhật: d2 = d – b = 2300 – 52 = 2248
2) Chữ ký thí sinh:
Nằm trong khung:
3) Giám thị 1:
- Chữ ký giám thị 1: nằm trong khung
- Ghi tên giám thị 1: nằm trong khung
4) Giám thị 2:
- Chữ ký giám thị 2: nằm trong khung
- Ghi tên giám thị 2: nằm trong khung
5) Mã số sinh viên :
- Dòng 0 :
- Số pixel tăng thêm khi đến 1 số liền kề theo chiều dọc :
- Số pixel tăng thêm khi đến 1 số liền kề theo chiều ngang :
6) Mã đề :
- Dòng 0 :
- Số pixel tăng thêm khi đến 1 số liền kề theo chiều dọc :
- Số pixel tăng thêm khi đến 1 số liền kề theo chiều ngang :
7) Các câu hỏi :
- Vị trí câu 1A:
- Số pixel tăng khi đi từ câu 1A tới câu 1B:
- Số pixel tăng khi đi từ câu 1A tới câu 2A:
- Số pixel tăng khi đi từ câu 1A tới câu 26A:
VI- Thống kê các lần chạy
Kiểm tra 10 file ảnh đã scan trên 3 laptop . Ta có bảng kết quả sau
Laptop của Ánh :
Tên file
a
b
c
d
e
f
g
h
k
l1
Kết quả chạy
Đ
Đ
Đ
Đ
Đ
S
Đ
Đ
S
S
Laptop của Khanh
Tên file
a
b
c
d
e
f
g
h
k
l1
Kết quả chạy
Đ
Đ
Đ
Đ
Đ
S
Đ
Đ
S
S
Laptop của Thảo
Tên file
a
b
c
d
e
f
g
h
k
l1
Kết quả chạy
Đ
Đ
Đ
Đ
Đ
S
Đ
Đ
S
S
Nhận xét : cả 3 lần chạy đều cho kết quả đúng ở 7 file và sai ở 3 file . Tìm hiểu nguyên nhân chạy sai của chương trình ta có bảng sau :
FILE
Nguyên Nhân
f
Tô mờ các ô đáp án
k
Hình bị lệch khi scan
l1
Hình bị lệch khi scan
VII – Các hạn chế và hướng phát triển của chương trình
1/ Hạn chế
Chương trình chấm sai khi bài thi bị scan lệch đi 1 góc đủ lớn làm phương pháp xác định tọa độ sai .
Thí sinh dùng bút chì kim tô , hoặc tô quá nhợt dẫn đến kết quả chấm bị sai .
Chưa có giao diện , file chương trình cho người dùng .
2/ Hướng phát triển
Sử dụng các thuật toán xác định và quay hình để xử lý các trường hợp hình bị nghiêng , lệch .
Sử dụng các công cụ điện tử , nhận dạng để thiết kế mô hình máy chấm thi trắc nghiệm .
Phát triển chấm cho nhiều kiểu bài thi trắc nghiệm , các biểu mẫu trắc nghiệm khác .