Từ thực nghiệm, chúng tôi rút ra những nhận xét sau:
- 2 mẫu đều cho kết quả nhận dạng có độ chính xác cao, tốc độ nhận dạng nhanh.
- Kỹ thuật xác định vị trí các ô được áp dụng trên mẫu phiếu loại 2 có độ chính xác cao hơn kỹ thuật tìm vị trí các ô của mẫu phiếu loại 1.
- Tốc độ nhận dạng của mẫu loại 1 nhanh hơn một chút so với tốc độ nhận dạng của phiếu loại 2.
- Độ chính xác của nhận dạng phiếu loại 2 cao hơn phiếu loại 1.
- Kỹ thuật nhận dạng phiếu loại 2 còn cho độ chính xác rất cao với các câu hỏi có nhiều tùy chọn. Phiếu loại 1 hiện tại chỉ áp dụng cho các câu hỏi có 1 lựa chọn.
Chương 6: Kết luận
Trong Khoá luận này, chúng tôi đã thực hiện được những công việc sau:
• Nghiên cứu và áp dụng các kỹ thuật xử lý ảnh cơ bản trong nhận dạng phiếu điều tra.
• Nghiên cứu và phát triển một số thuật toán áp dụng cho nhận dạng hai mẫu phiếu trả lời.
• Phân tích sơ bộ các chức năng chính của hệ thống hỗ trợ tổ chức điều tra xã hội học.
• Viết chương trình nhận dạng và thực nghiệm trên hai mẫu phiếu trả lời. Kết quả thực nghiệm là rất khả quan:
- Với phiếu trả lời loại 1, thời gian nhận dạng trung bình 1 phiếu là 1 s, độ chính xác là 99%.
- Với phiếu trả lời loại 2, thời gian nhận dạng trung bình 1 phiếu là 1.2 s, độ chính xác là 99%.
Kết luận:
- Hệ thống chúng tôi đang xây dựng có tính khả thi cao.
- Cả hai mẫu phiếu trả lời được thiết kế, thử nghiệm đều cho kết quả tốt. - Độ phân giải phù hợp khi quét ảnh là 150 dpi.
Hướng phát triển tiếp theo của Khoá luận này trong tương lai:
• Nâng cao hiệu quả và độ chính xác hơn nữa trong việc nhận dạng phiếu điều tra.
• Tìm hiểu sâu hơn về kiến thức và nghiệp vụ trong điều tra.
Phụ lục
Giới thiệu thư viện OPENCV
OpenCV (Open Source Computer Vision Library) là một thư viện mã nguồn mở được viết bằng C và C++, cung cấp các hàm liên quan đến thao tác ảnh và thực hiện một số thuật toán thông dụng trong xử lý ảnh.
Dưới đây, chúng ta sẽ xem xét một số cấu trúc và hàm được thông dụng.
1. Cấu trúc IplImage
typedef struct _IplImage
{ int nSize; /* sizeof(IplImage) */ int ID; /* version (=0)*/
int nChannels; int alphaChannel;
int depth; /* pixel depth in bits */ char colorModel[4];
char channelSeq[4]; int dataOrder; int origin;
int align; /* Alignment of image rows (4 or 8) */ int width; /* image width in pixels */
int height; /* image height in pixels */ struct _IplROI *roi;/* poniter to ROI if any */
struct _IplImage *maskROI; /* must be NULL in OpenCV */ void *imageId; /* ditto */
struct _IplTileInfo *tileInfo; /* ditto */ int imageSize; /* useful size in bytes */
char *imageData; /* pointer to aligned image data */ int widthStep; /* size of aligned image row in bytes */
int BorderMode[4]; /* border completion mode, ignored by OpenCV */ int BorderConst[4]; /* ditto */
char *imageDataOrigin; /* pointer to full, nonaligned image */ }IplImage;
Cấu trúc IplImage có nguồn gốc từ thư viện IPL (Image Processing Library). Ở đây chỉ mô tả một số trường hay dùng trong ứng dụng:
• width và height là độ rộng và cao của ảnh tính theo pixel.
• depth lưu thông tin về số bit dùng để lưu 1 pixel. Giá trị của depth có thể là IPL_DEPTH_8U, IPL_DEPTH_8S, IPL_DEPTH_16S, IPL_DEPTH_32S hoặc IPL_DEPTH_32F.
• widthStep là số byte nằm giữa các điểm có cùng cột và ở hai hàng kề nhau. Trường width không phải là khoảng cách giữa hai hàng kề nhau, bởi vì các dòng có thể được sắp cho thẳng hàng bằng cách thêm các khoảng trống giữa điểm cuối của dòng thứ i và điểm đầu của dòng (i + 1). Điều này cốt để tốc độ xử lý ảnh nhanh hơn.
• imageSize là số kích cỡ của ảnh tính theo byte khi các dòng đã được căn. Thực chất imageSize = widthStep x height.
• imageData là con trỏ tới dữ liệu đã được căn của ảnh.
• imageDataOrigin là con trỏ tới dữ liệu chưa được căn.
2. Cấu trúc CvPoint
typedef struct CvPoint {
int x; /* x-coordinate, usually zero-based */ int y; /* y-coordinate, usually zero-based */ }
CvPoint;
3. Hàm cvLoadImage
Đọc ảnh từ file
IplImage* cvLoadImage( const char* filename, int iscolor CV_DEFAULT(1)); filename
tên file ảnh cần nạp. iscolor
Nếu > 0, ảnh được nạp sẽ luôn luôn có 3 kênh (channel).; Nếu 0, ảnh được nạp sẽ luôn có 1 kênh;
Nếu < 0, ảnh được nạp với số kênh phụ thuộc vào file ảnh.
Hàm cvLoadImage đọc một ảnh từ một file và trả về con trỏ tới ảnh được. Hiện tại, OpenCV hỗ trợ những loại ảnh sau: Windows bitmaps - BMP, DIB; JPEG files - JPEG, JPG, JPE; Portable Network Graphics - PNG; Portable image format - PBM, PGM, PPM; Sun rasters - SR, RAS; TIFF files - TIFF, TIF.
3. Hàm cvSaveImage
Ghi ảnh ra file
int cvSaveImage(const char* filename, const CvArr* image ); filename
Tên của file image
Ảnh cần ghi
4. Hàm cvNamedWindow
Tạo một cửa sổ hiển thị ảnh
int cvNamedWindow( const char* name, unsigned long flags ); name
Tên cửa sổ, được dùng như định danh của cửa sổ và xuất hiện trên tiêu đề cửa sổ.
flags
Định nghĩa các thuộc tính của cửa sổ. Đặt là CV_WINDOW_AUTOSIZE cho phép tự động thay đổi kích thước cửa sổ (resize), ngược lại đặt là 0.
5. Hàm cvDestroyWindow
Giải phóng cửa sổ
void cvDestroyWindow( const char* name ); name
Tên cửa sổ cần giải phóng.
6. Hàm cvShowImage
Hiển thị ảnh trong một cửa sổ xác định.
void cvShowImage( const char* name, const CvArr* image ); name
Tên cửa sổ image
Tài liệu tham khảo
[1] Lương Mạnh Bá, Nguyễn Thanh Thủy. Nhập môn xử lý ảnh số. Nhà xuất bản khoa học và kỹ thuật
[2] Ian T. Young, Jan J.Gerbrands, Lucas J. van Vliet. Image Processing Fundamentals.
[3] John C. Russ. The image processing handbook, third edition. CRC Press. [4] William K. Pratt. Digital Image Processing: PIKS Inside, Third Edition. [5] Jaroslav Borovieka. Circle detection using Hough transforms documentation. [6] Ali Ajdari Rad, Karim Faez, Navid Qaragozlou. Fast circle detection using Gradient pair vectors.
Mục lục
Lời nói đầu……… ………..………... 1
CHƯƠNG 1. Các vấn đề cơ bản trong xử lý ảnh……….. 4
1.1. Tổng quan về một hệ thống xử lý ảnh……….. 4
1.2. Các vấn đề cơ bản trong xử lý ảnh……… 5
1.2.1. Một số khái niệm ……….. 5
1.2.2. Biểu diễn ảnh……… 6
1.2.3. Tăng cường ảnh – khôi phục ảnh…….……… 7
1.2.4. Nhận dạng ảnh……….. 7
1.3. Thu nhận ảnh………. 8
1.3.1. Thiết bị thu nhận ảnh……… 8
1.3.2. Biểu diễn màu………... 9
1.3.3. Hệ tọa độ màu……….. 9
1.4. Các kỹ thuật xử lý ảnh cơ bản………. 10
1.4.1. Nhị phân hóa………... 10
1.4.2. Khử nhiễu………... 11
1.4.3. Làm trơn biên, lấp đầy chỗ trống……… 11
1.4.4. Đường thẳng Hough……… 12
1.4.5. Chỉnh độ nghiêng của ảnh……… 14
CHƯƠNG 2: Nhận dạng phiếu điều tra………. 15
2.1. Mô tả bài toán……….. 15
2.2. Thiết kế mẫu phiếu điều tra……… 15
2.3. Kỹ thuật nhận dạng chung phiếu điều tra………. 19
2.3.1. Các tham số cần thiết……….. 19
2.3.2. Nhận dạng đường thẳng dày……….. 20
2.3.3. Chỉnh độ nghiêng……… 21
2.3.4. Nhận dạng khung……… 23
2.4. Kĩ thuật nhận dạng mẫu phiếu trả lời loại 1……… 24
2.4.1. Tách dòng……… 24
2.4.2. Tách ô………. 25
2.4.3. Nhận dạng ô được chọn………. 26
2.5. Kĩ thuật nhận dạng mẫu phiếu trả lời loại 2……….. 27
2.5.1. Tách dòng……….. 27
2.5.2. Tách ô……… 28
2.5.3. Nhận dạng các ô được chọn……….. 29
CHƯƠNG 3:Thử nghiệm xây dựng phần mềm tổ chức điều tra…… 31
3.1. Mô tả một cuộc điều tra………. 31
3.1.1. Xác định mục tiêu điều tra………. 31
3.1.2. Phân loại câu hỏi điều tra……… 32
3.2.1. Mục tiêu của hệ thống tổ chức điều tra……….. 34
3.2.2. Yêu cầu kỹ thuật……… 34
3.2.3. Các yêu cầu chức năng đối với hệ thống……….. 35
3.2.4. Biểu đồ phân rã chức năng……… 37
3.2.5. Đặc tả chi tiết các chức năng ………. 39
3.2.6. Các hồ sơ tài liệu được sử dụng trong hệ thống……… 40
3.2 .7. Bảng phân tích thực thể chức năng……….. 41
3.2.8. Biểu đồ luồng dữ liệu mức 0………. 43
3.2.9. Biểu đồ luồng dữ liệu mức 1 của tiến trình “1. Tạo phiếu điều tra”……… 44
3.2.10. Biểu đồ luồng dữ liệu mức 2 của tiến trình “1.4. In phiếu điều tra, phiếu .trả lời”……… 45
3.2.11. Biểu đồ luồng dữ liệu mức 1 của tiến trình “2. Đọc phiếu trả lời 46 3.2.12. Biểu đồ luồng dữ liệu mức 1 của tiến trình “3. Phân tích kết quả điều ra”... 46
CHƯƠNG 4: Thực nghiệm tạo mẫu .……….. 47
4.1. Thực nghiệm tạo mẫu phiếu trả lời………. 47
4.1.1. Các yêu cầu của mẫu phiếu trả lời……….. 47
4.1.2. Thực nghiệm tạo mẫu……….. 48
4.2. Thực nghiệm xác định ngưỡng trắng………. 52
4.3. Thực nghiệm xác định các ngưỡng nhận dạng đường thẳng dày 53 4.3.1. Ngưỡng dài……… 53
4.3.2. Ngưỡng nghiêng……… 54
4.4. Thực nghiệm xác định các ngưỡng nhận dạng các khung…. 54 4.4.1. Ngưỡng xác định cạnh ngang trên……… 54
4.4.2. Ngưỡng xác định các cạnh bên……… 55
4.5. Thực nghiệm nhận dạng trên mẫu phiếu trả lời loại 1……… 55
4.5.1. Nhận dạng dòng………. 55
4.5.2. Nhận dạng ô……….. 56
4.5.3. Nhận dạng ô được tích……… 57
4.6. Thực nghiệm nhận dạng trên phiếu trả lời loại 2……… 57
4.6.1. Nhận dạng dòng……… 57
4.6.2. Thực nghiệm xác định ô……… 59
4.6.3. Nhận dạng ô được tích……….. 59
4.7 Thực nghiệm nhận dạng hai loại mẫu phiếu trả lời………… 61
4.7.1. Thực nghiệm nhận dạng đường thẳng dày……… 61
4.7.2. Thực nghiệm xoay ảnh………. 62
4.7.3. Thực nghiệm nhận dạng các khung………. 62
4.7.4. Thực nghiệm nhận dạng trên mẫu phiếu trả lời loại 1…… 63
4.7.5 Thực nghiệm nhận dạng trên mẫu phiếu trả lời loại 2…… 66
4.8. So sánh kết quả thực nghiệm giữa hai loại mẫu phiếu trả lời 68 CHƯƠNG 5: Kết luận………..……… 70
Phụ lục……….………. 71