Xử lý ảnh - Nhận dạng ký tự toán học bằng phương pháp SVM dùng thư viện OpenCV

29 2.4K 45
Xử lý ảnh - Nhận dạng ký tự toán học bằng phương pháp SVM dùng thư viện OpenCV

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Báo cáo đồ án 1 của sinh viên Viện Điện tử viễn thông, trường Đại học Bách Khoa Hà Nội, đề tài Nhận dạng ký tự toán học từ file pdf dùng thư viện OpenCV. Phương pháp nhận dạng được áp dụng trong đề tài này là phương pháp véc tơ tựa (SVM - Support Vector Machines) được đánh giá là phương pháp học máy tiên tiến đang được áp dụng rộng rãi trong các lĩnh khai phá dữ liệu và thị giác máy tính.

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI VIỆN ĐIỆN TỬ - TRUYỀN THÔNG BÁO CÁO ĐỒ ÁN ĐỀ TÀI: ỨNG DỤNG XỬ LÝ ẢNH TRONG NHẬN DẠNG KÝ TỰ TOÁN HỌC BẰNG PHƯƠNG PHÁP SVM Giảng viên hướng dẫn: Sinh Viên Thực Hiện: Hà Nội, 1/2017 Mục lục Lời nói đầu Xử lý ảnh thị giác máy tính lĩnh vực mà ngày phát triển ứng dụng rộng rãi nhiều lĩnh vực khác nhờ vào phát triển ngày mạnh mẽ hệ thống máy tính, thuật toán công trình nghiên cứu khác nhiều nhà khoa học giới Ở Việt Nam, ứng dụng xử lý ảnh bước đầu triển khai số lĩnh vực lắp đặt hệ thống nhận dạng biển số xe bãi đỗ xe, hệ thống phục vụ nhận dạng vân tay chấm công công sở, hệ thống camera giao thông quan sát,…Tuy nhiên nhìn cách khách quan số lượng ứng dụng triển khai thực tế ỏi, lĩnh vực phát triển mạnh mẽ tương lai quan tâm cách nghiêm túc Đề tài đồ án nhóm chúng em phần nhỏ liên quan đến ứng dụng xử lý ảnh, mục tiêu đề tài nhằm nhận biết ký tự toán học từ tài liệu định dạng PDF, từ chuyển ký tự sang định dạng chỉnh sửa doc, txt,… Nhóm chúng em xin gửi lời cảm ơn chân thành đến PGS.TS Hoàng Mạnh Thắng, Giảng viên Viện điện tử truyền thông, Đại học Bách Khoa Hà Nội hướng dẫn nhóm em hoàn thành đề tài Chúng em xin cảm ơn anh Nguyễn Xuân Sỹ thành viên SIPLAB trợ giúp chúng em trình làm đồ án Sinh viên Trần Ngọc Tiến XỬ LÝ ẢNH DÙNG THƯ VIỆN OPEN CV 1.1 Giới thiệu thư viện Opencv OpenCV (Open Source Computer Vision) thư viện mã nguồn mở thị giác máy tính với 500 hàm 2500 thuật toán tối ưu xử lý ảnh, vấn đề liên quan đến thị giác máy OpenCV thiết kế tối ưu, sử dụng tối đa sức mạnh dòng chip đa lõi…để thực phép tính toán thời gian thực, nghĩa tốc độ đáp ứng đủ nhanh cho ứng dụng thông thường OpenCV thư viện thiết kế để chạy nhiều tảng khác nhau, nghĩa chạy hệ điều hành Window, Linux, Mac,… 1.2 Các phép xử lý OpenCV 1.2.1 Chuyển đổi không gian màu Trong OpenCV, không gian màu được chuyển đổi qua lại nhờ hàm cvtColor (convert color), nguyên mẫu hàm sau: cv::cvtColor(cv::InputArray src, cv::OutputArray dst, int code) Trong đó, src, dst ảnh gốc ảnh thu sau chuyển đổi không gian màu, code mã chuyển đổi không gian màu OpenCV định nghĩa nhiều chuyển đổi không gian màu chẳng hạn code = CV_BGR2GRAY chuyển ảnh không gian màu RGB sang ảnh xám, code = CV_HSV2BGR chuyển ảnh không gian màu HSV sang không gian màu RGB 1.2.2 Nhị phân hóa ngưỡng động Trong thư viện OpenCV có hàm để chuyển từ ảnh xám sang ảnh nhị phân với ngưỡng động là: adaptiveThreshold adaptiveThreshold( InputArray src, OutputArray dst, double maxValue, int adaptiveMethod, int thresholdType, int blockSize, double C); Trong đó: - src ảnh gốc - dst ảnh nhị phân - maxValue giá trị độ sáng lớn ảnh (là 255 với ảnh xám) - adaptiveMethod cách tính ngưỡng động cho ảnh: o ADAPTIVE_THRESH_MEAN_C: ngưỡng tính trung bình khu lân cận o ADAPTIVE_THRESH_GAUSSIAN_C: ngưỡng tính tổng giá trị lân cận cửa sổ Gaussian - thresholdType định điểm ảnh mang màu đen (0) hay màu trắng (255): o THRESH_BINARY: 255 dst ( x, y ) =  0 if ( src( x, y ) ≥ T ( x, y ) otherwise o THRESH_BINARY_INV: 0 dst ( x, y ) =  255 - if ( src( x, y ) ≥ T ( x, y ) otherwise blockSize kích thước cửa sổ áp dụng cho việc tính toán ngưỡng động (nên chọn giá trị %3 = 0, %5 = 0, %7 = 0) C thông số bù trừ trường hợp ảnh có độ tương phản lớn 1.2.3 Phép dãn nở Trong OpenCV, phép toán hình thái học ảnh cài đặt hàm cv::morphologyEx, riêng phép giãn nở phép co gọi trực tiếp từ hàm cv::dilate cv::erode: morphologyEx(const Mat& src, Mat& dst, int op, const Mat& element, Point anchor, int iterations, int borderType, const Scalar& borderValue) Trong đó, src, dst ảnh đầu vào ảnh sau phép xử lý hình thái học, op kiểu lựa chọn phép hình thái học, chẳng hạn phép giản nở MORPH_DILATE, phép đóng MORPH_OPEN … element cấu trúc phần tử ảnh, có ba cấu trúc theo khối hình vuông, hình chữ thập hình elip Để tạo cấu trúc ta tự định nghĩa ma trận với hình khối tương ứng sử dụng hàm getStructuringElement, hàm có cấu trúc sau: getStructuringElement(int shape, Size ksize, Point anchor), với shape kiểu hình khối (một hình khối trên), ksize kích thước hình khối khích thước hai số nguyên lẻ, anchor điểm neo thông thường nhận giá trị ((ksize.width – 1)/2, (ksize.height – 1)/2) Thông số anchor có ý nghĩa tương tự iterations số lần lặp lại phép toán hình thái TÁCH VÙNG CÔNG THỨC TỪ ẢNH 2.1 Ý tưởng - Giãn nở ký tự có ảnh để chúng dính lại với khoanh vùng ta vùng văn tách riêng biệt so với vùng công thức khoảng cách dòng dòng văn nhỏ khoảng cách dòng văn công thức - Do công thức đánh số nên phần bên phải công thức có vùng để đánh số cho công thức Dựa vào ta xác định có vùng công thức Các bước thực hiện: - Bước 1: Tiền xử lý file ảnh đầu vào thành ảnh nhị phân - Bước 2: Giãn nở ký tự có ảnh - Bước 3: Sắp xếp tìm contour theo chiều từ xuống - Bước 4: Tiến hành lưu lại tọa độ contour - Bước 5: Xét contour liên tiếp nhau, thỏa mãn điều kiện để contour (i+1) vùng đánh số contour (i) lưu lại tọa độ contour (i) - Bước 6: Tách contour (i) từ ảnh gốc lưu vào vector ma trận ảnh để tiến hành tái tạo lại công thức 2.2 Triển khai mô tả code - Bước 1: Tiền xử lý ảnh imgTrainingNumbers = cv::imread("fom4.png"); // Doc anh dau vao cv::cvtColor(imgTrainingNumbers, imgGrayscale, CV_BGR2GRAY); // Chuyen anh sang dang anh xam cv::GaussianBlur(imgGrayscale, // imgBlurred, // Loc nhieu cv::Size(5, 5), // 0); // cv::adaptiveThreshold(imgGrayscale, //Lay nguong dong imgThresh, // 255, // cv::ADAPTIVE_THRESH_GAUSSIAN_C, // cv::THRESH_BINARY_INV, // 11, // 2); - // Bước 2: Giãn nở ký tự ảnh cv::Mat kernel = cv::getStructuringElement(MORPH_RECT, Size(25, 13)); cv::morphologyEx(imgThresh, imgThresh, MORPH_DILATE, kernel); - Bước 3: Sắp xếp khoanh contour từ xuống imgThreshCopy = imgThresh.clone(); // Tao ban copy cua imgThresh cv::findContours(imgThreshCopy, // ptContours, // Tim cac contour cua anh v4iHierarchy, // cv::RETR_EXTERNAL, // cv::CHAIN_APPROX_SIMPLE); // sort(ptContours.begin(), ptContours.end(), comparator()); // Sap xep lai contour tu tren xuong theo toa y - Bước 4: Lưu tọa độ contour for (int i = 0; i < ptContours.size(); i++){ cv::Rect boundingRect = cv::boundingRect(ptContours[i]);// xay dung duong bien hinh chu nhat bao quanh moi contour a[i].x = boundingRect.x; hinh chu nhat //Luu lai toa cua cac dinh cua a[i].y = boundingRect.y; //bao quanh moi contour a[i].w = boundingRect.width; // a[i].h = boundingRect.height; // } - Bước 5: Xét contour liên tiếp nhau, thỏa mãn điều kiện contour (i+1) số contour (i) (bằng cách dùng tọa độ contour) giữ lại tọa độ contour (i) float consider[10][4]; int j = 0; for (size_t i = 0; i < ptContours.size(); ++i) { if ((a[i].x + a[i].w)(a[i+1].y)) if (a[i].y (a[i+1].w)) { consider[j][0] = a[i].x; consider[j][1] = a[i].y; consider[j][2] = a[i].w; consider[j][3] = a[i].h; j++; } } - Bước 6: Lưu lại ma trận ảnh chứa công thức để tiến hành tái tạo vector imgConsider; for (int i = 0; i < 10; i++) { if (consider[i][2] > 0) { Mat cell = Mat(imgTrainingNumbers, Rect(consider[i][0], consider[i][1], consider[i][2], consider[i][3])); imgConsider.push_back(cell); } } 2.3 Kết thu - Ảnh đầu vào Hình 1: Ảnh cần tách công thức - Ảnh sau giãn nở ký tự Hình 2: Ảnh sau giãn nở - Ảnh thu sau khoanh vùng công thức: Thu vùng công thức hình Hình 3: Ảnh thu - Kết thu với ảnh đầu vào khác: 10 Một mạng neural nhân tạo cấu hình cho ứng dụng cụ thể (nhận dạng mẫu, phân loại liệu, ) thông qua trình học từ tập mẫu huấn luyện Về chất học trình hiệu chỉnh trọng số liên kết neural 4.2 Máy vector hỗ trợ (SVM) 4.2.1 Khái niệm Phương pháp máy véc tơ tựa (SVM - Support Vector Machines) đánh giá phương pháp học máy tiên tiến áp dụng rộng rãi lĩnh khai phá liệu thị giác máy tính…Ý tưởng thuật toán cho trước tập huấn luyện biểu diễn không gian vector tài liệu điểm, phương pháp tìm mặt phẳng h định tốt chia điểm không gian thành hai lớp riêng biệt tương ứng lớp + lớp - Chất lượng siêu mặt phẳng định khoảng cách (gọi biên) điểm liệu gần lớp đến mặt phẳng Khoảng cách biên lớn mặt phẳng định tốt đồng thời việc phân loại xác Mục đích thuật toán SVM tìm khoảng cách biên lớn để tạo kết phân lớp tốt Hình 7: Siêu phẳng h phân chia liệu huấn luyện thành lớp + – 4.2.2 Thuật toán SVM Xét toán phân lớp đơn giản – phân lớp hai lớp với tập liệu mẫu: {(xi, yi) i = 1, 2,…, N, xi ∈ Rm } 11Equation Section Trong mẫu vector đối tượng phân lớp thành mẫu dương mẫu âm hình 1: - Các mẫu dương mẫu xi thuộc lĩnh vực quan tâm gán nhãn yi = Các mẫu âm mẫu xi không thuộc lĩnh vực quan tâm gán yi = - 15 Thực chất phương pháp toán tối ưu, mục tiêu tìm không gian H siêu mặt phẳng định h H cho sai số phân lớp thấp Trong trường hợp này, tập phân lớp SVM mặt siêu phẳng phân tách mẫu dương khỏi mẫu âm với độ chênh lệch cực đại, độ chênh lệch – gọi Lề (margin) xác định khoảng cách mẫu dương mẫu âm gần mặt siêu phẳng Mặt siêu phẳng gọi mặt siêu phẳng lề tối ưu Hình 8: Thuật toán SVM với phân lớp lớp Các mặt siêu phẳng không gian đối tượng có phương trình là: C + w1 x1 + w2 x2 + … + wn xn = 021Equation Section 313\* MERGEFORMAT (.) Tương đương với công thức: i =n C + ∑ w i xi = i =1 414\* MERGEFORMAT (.) Với w = w1 + w2 + …+ wn hệ số siêu phẳng vector trọng số, C độ dịch, thay đổi w C hướng khoảng cách từ gốc toạ độ đến mặt siêu phẳng thay đổi Tập phân lớp SVM định nghĩa sau: 16 f ( x) = sign(C + ∑ w i xi ) 515\* MERGEFORMAT (.) Trong sign(z) = +1 z ≥ 0, sign(z) = -1 z < Máy học SVM học siêu phẳng phụ thuộc vào tham số vector trọng số w độ dịch C Mục tiêu phương pháp SVM ước lượng w C để cực đại hoá lề lớp liệu dương âm Các giá trị khác lề cho ta họ siêu mặt phẳng khác nhau, lề lớn lực máy học giảm Như vậy, cực đại hoá lề thực chất việc tìm máy học có lực nhỏ Quá trình phân lớp tối ưu sai số phân lớp cực tiểu Ta phải giải phương trình sau: C ∑η + w η l w,b , i =1 i yi [w.xi − b] + ηi ≥ ηi ≥ 0, i = 1, l 616\* MERGEFORMAT (.) Ta tìm vector trọng số w sai số điểm tập huấn luyện ηi từ ta có phương trình tổng quát siêu phẳng tìm thuật toán SVM là: n f ( x1 , x2 , xn ) = C + ∑ w i xi i =1 717\* MERGEFORMAT (.) Trong n số liệu huấn luyện Sau tìm phương trình siêu phẳng thuật toán SVM, áp dụng công thức để tìm nhãn lớp cho liệu 4.2.3 Huấn luyện SVM Huấn luyện SVM việc giải toán quy hoạch toàn phương SVM Các phương pháp số giải toán quy hoạch yêu cầu phải lưu trữ ma trận có 17 kích thước bình phương số lượng mẫu huấn luyện Trong toán thực tế, điều không khả thi thông thường kích thước tập liệu huấn luyện thường lớn (có thể lên tới hàng chục nghìn mẫu) Nhiều thuật toán khác phát triển để giải vấn đề nêu Những thuật toán dựa việc phân rã tập liệu huấn luyện thành nhóm liệu Điều có nghĩa toán quy hoạch toàn phương với kích thước nhỏ Sau đó, thuật toán kiểm tra điều kiện KKT (Karush-KuhnTucker) để xác định phương án tối ưu NHẬN DẠNG KÝ TỰ TOÁN HỌC BẰNG SVM 5.1 Ý tưởng Phương pháp SVM khuôn khổ đồ án hiểu đơn giản sau: Cho tập mẫu huấn luyện, với mẫu ta gắn nhãn, trình huấn luyện SVM xây dựng mô hình cho phép tập liệu khác thuộc nhãn nào, tức phân loại tập liệu thuộc lớp SVM máy phân loại liệu, để dùng ta cần có liệu, liệu ký tự toán học mà ta cần nhận dạng đặc trưng ảnh ký tự Giả sử ta cần phân loại liệu 60 lớp liệu tương ứng với 60 ký tự toán học khác nhau, với lớp liệu ta tính toán 10 vector đặc trưng, vector đặc trưng tương ứng với đặc trưng ảnh Khi có liệu huấn luyện ta đưa vào huấn luyện SVM Để nhận dạng ảnh ta tính toán vector đặc trưng ảnh đó, mô hình SVM xem xét vector đặc trưng thuộc vào lớp số lớp mà huấn luyện Kết cuối việc nhận dạng ký tự ta in mã Unicode ký tự cần nhận dạng 5.2 Tính toán đặc trưng ảnh Để phân biệt hai ảnh ta cần phải tính đặc trưng ảnh Trong phần ta tính toán dựa ý tưởng phương pháp Haar – like, giá trị đặc trưng Haar-like xây dựng độ chênh lệch tổng pixel vùng đen so với tổng pixel vùng trắng Giả sử ta có hai ký tự 4, đưa hai ký tự kích thước, chia nhỏ ký tự thành 16 ô nhỏ khác nhau: 18 Hình 9: Tính toán đặc trưng ảnh Ta nhận thấy tính tổng pixel đen ô hai ảnh số số phân biệt dựa vào ô (1,1), (1, 4), (2, 2), (3,3) … ô đó, tổng số điểm ảnh đen khác hoàn toàn Tính toán số điểm ảnh đen 16 ô vuông ta thu 16 đặc trưng ảnh, 16 đặc trưng đủ để phân biệt kí tự Tuy nhiên, với 60 kí tự ta cần phải tính toán nhiều đặc trưng, đặc trưng không thiết phải (tức điểm ảnh đen nào) hặc 1(tức toàn số điểm ảnh đen ô) mà tỉ lệ tương đối Từ 16 đặc trưng trên, ta kết hợp chúng lại để tạo đặc trưng khác, chẳng hạn lấy tổng đặc trưng đường chéo (1,1) + (2,2) + (3,3) + (4,4) tổng đặc trưng xung quanh đường biên ảnh… // -Ham tinh toan dac trung -// vector calculator_feature(Mat imgTrainingNumbers) { //khau xu ly anh Mat imgGrayscale; Mat imgThresh; Mat matROIResized; cvtColor(imgTrainingNumbers, imgGrayscale, CV_BGR2GRAY); adaptiveThreshold(imgGrayscale, imgThresh, 255, ADAPTIVE_THRESH_GAUSSIAN_C, THRESH_BINARY_INV, 11, 2); resize(imgThresh, matROIResized, Size(RESIZED_IMAGE_WIDTH, RESIZED_IMAGE_HEIGHT)); //khau tinh toan cac dac trung vector r; 19 int ww = matROIResized.rows / 4; int hh = matROIResized.cols / 4; int S = count_pixel(matROIResized); int T = matROIResized.cols * matROIResized.rows; for (int i = 0; i < matROIResized.rows; i += ww) for (int j = 0; j < matROIResized.cols; j += hh) { Mat cell; Coordinate top_left; Coordinate bottom_right; top_left.xx = i; top_left.yy = j; bottom_right.xx = top_left.xx + ww; bottom_right.yy = top_left.yy + hh; cell = matROIResized(Rect(i, j, ww, hh)); int s = count_pixel(cell); float f = (float)s / S; r.push_back(f); } for (int i = 0; i < 16; i += 4) { float f = r[i] + r[i + 1] + r[i + 2] + r[i + 3]; r.push_back(f); } for (int i = 0; i < 4; ++i) { float f = r[i] + r[i + 4] + r[i + 8] + r[i + 12]; r.push_back(f); } r.push_back(r[0] + r[5] + r[10] + r[15]); r.push_back(r[3] + r[6] + r[9] + r[12]); r.push_back(r[0] + r[1] + r[4] + r[5]); r.push_back(r[2] + r[3] + r[6] + r[7]); r.push_back(r[1] + r[2] + r[5] + r[6]); r.push_back(r[4] + r[5] + r[8] + r[9]); r.push_back(r[5] + r[6] + r[9] + r[10]); 20 r.push_back(r[7] + r[6] + r[10] + r[11]); r.push_back(r[8] + r[9] + r[13] + r[12]); r.push_back(r[9] + r[10] + r[13] + r[14]); r.push_back(r[10] + r[11] + r[15] + r[15]); r.push_back(r[0] + r[3] + r[4] + r[7]); r.push_back(r[4] + r[7] + r[8] + r[11]); r.push_back(r[3] + r[6] + r[9] + r[12]); r.push_back(r[8] + r[11] + r[12] + r[15]); r.push_back(r[0] + r[1] + r[12] + r[13]); r.push_back(r[1] + r[2] + r[13] + r[14]); r.push_back(r[2] + r[3] + r[14] + r[15]); return r; // 42 dac trung anh } Trong hàm count_pixel hàm tính toán số pixel đen ảnh: int count_pixel(Mat img) { int white = 0; for (int i = 0; i < img.rows; ++i) for (int j = 0; j < img.cols; ++j) { if (img.at(i, j) != 0) white++; } return white; } 5.3 Tạo sở liệu Ta cần chuẩn bị sở liệu tập hợp kí tự toán học có bảng mã Unicode Trong khuôn khổ đồ án chúng em lập sở liệu 60 kí tự thường gặp toán học, ta cần phân loại 60 lớp này, trường hợp giả sử với lớp, tức ký tự ta có ảnh, ta lưu ảnh vào folder, tên folder đặt theo tên mã ký tự bảng mã Unicode, chẳng hạn folder u03A0 chứa ảnh kí tự số PI,…Việc đánh tên folder theo mã Unicode tên folder nhãn để đưa vào nhận dạng Khi biết ký tự cần nhận dạng có nhãn tức biết mã Unicode ký tự ta dễ dàng in ký tự 21 Hình 10: Dữ liệu huấn luyện lưu vào folder 5.4 Huấn luyện 5.4.1 Kịch huấn luyện Dữ liệu huấn luyện lưu vào thư mục có đường dẫn D:/Data, ta đọc folder thư mục Data tính toán đặc trưng ảnh lưu vào ma trận có tên data Tên folder mã Unicode lưu vào ma trận label Trong opencv hỗ trợ hàm trainAuto thực việc huấn luyện cách tự động tối ưu thông số mô hình Các thông tin thu sau huấn luyện lưu vào file svm.xml đường dẫn E:/svm.xml const int number_of_class = 60; //So ky tu toan hoc const int number_of_sample = 6; //So mau ung voi moi ky tu const int number_of_feature = 42;//So dac trung cua mot mau float data[number_of_class*number_of_sample][number_of_feature]; float label[number_of_class*number_of_sample]; int main() { int index = 0; string path = "D://Data//"; vector folders = list_(path); vector files; for (size_t i = 0; i < folders.size(); ++i) { string Path = path + folders.at(i); files = list_(Path); for (size_t j = 0; j < files.size(); ++j) { string Path2 = Path + "//" + files.at(j); Mat imgTrainingNumbers = cv::imread(Path2); 22 vector features = calculator_feature(imgTrainingNumbers); if (features.size() < number_of_feature) { std::cout setType(SVM::C_SVC); svm->setKernel(SVM::LINEAR); svm->setTermCriteria(TermCriteria(TermCriteria::MAX_ITER, 100, 1e-6)); - setType: Thông số thể loại mô hình SVM chọn, SVM::C_SVC cho phép phân loại n lớp liệu với n ≥ setKernel: SVM họ phương pháp dựa sở hàm nhân (kernel) để tối thiểu hóa rủi ro ước lượng, setKernel loại hàm nhân dùng, SVM::LINEAR, ánh xạ thực hiện, K ( xi , x j ) = xiT x j - setTermCriteria: Tiêu chuẩn kết thúc thuật toán lặp MAX_ITER loại setTermCriteria, sau max_iter lần lặp dừng lại, max_iter = 100, độ xác 1e-6 24 KẾT QUẢ Kết cuối việc nhận dạng ta lấy mã Unicode ký tự cần nhận dạng từ sở liệu Dựa vào mã Unicode có ta xây dựng chương trình xuất ký tự bảng mã Unicode nhận ký tự cần nhận dạng, sau tái tạo lại công thức toán học hoàn chỉnh ảnh đầu vào 6.1 Kết nhận dạng ký tự Kết nhận dạng xác ký tự: Hình 11: Ký tự ∑ nhận dạng xác 25 Hình 12: Ký tự ∆ nhận dạng xác 26 Hình 13: Ký tự ∂ nhận dạng bị sai 6.2 Kết tái tạo công thức hoàn chỉnh Hình 14: Kết nhận dạng công thức dòng 27 Hình 15: Kết nhận dạng công thức có số Hình 16: Kết nhận dạng công thức có số 6.3 Nhận xét Chương trình nhiều nhược điểm chưa thể giải quyết: - Chương trình nhận biết ảnh đầu vào rõ nét Phần tái tạo lại công thức tái tạo lại dạng công thức đơn giản số dưới, công thức phức tạp có số chương trình không tái tạo lại 28 TÀI LIỆU THAM KHẢO [1] Nguyễn Linh Giang, Nguyễn Mạnh Hiển, “Phân loại văn tiếng Việt với phân loại vectơ hỗ trợ SVM”, Tạp chí CNTT & TT, 2005 [2] Phạm Thị Thanh Hiển, “Nhận dạng ký hiệu toán học mạng Neural”, Luận văn thạc sĩ, Học viện công nghệ bưu viễn thông, 2007 [3] Nguyễn Văn Long Ứng dụng xử lý ảnh thực tế với thư viện OpenCV C/C++ [4] Kristin P Bennett, Ayhan Demiriz, “Semi-Supervised Support Vector Machines”, NIPS 1998 [5] http://docs.opencv.org/3.0-beta/doc/tutorials/ml/introduction_to_svm/ [6] http://stackoverflow.com/ 29 ... học hoàn chỉnh ảnh đầu vào 6 .1 Kết nhận dạng ký tự Kết nhận dạng xác ký tự: Hình 11 : Ký tự ∑ nhận dạng xác 25 Hình 12 : Ký tự ∆ nhận dạng xác 26 Hình 13 : Ký tự ∂ nhận dạng bị sai 6.2 Kết tái tạo... thuật toán kiểm tra điều kiện KKT (Karush-KuhnTucker) để xác định phương án tối ưu NHẬN DẠNG KÝ TỰ TOÁN HỌC BẰNG SVM 5 .1 Ý tưởng Phương pháp SVM khuôn khổ đồ án hiểu đơn giản sau: Cho tập mẫu huấn... Dòng có ký tự i với số thứ tự 16 20 thuộc hàng số Dòng có ký tự “i = 1 số chạy ký tự tổng Tọa độ contour lưu mảng riêng, từ tọa độ hoàn toàn tách ký tự từ ảnh PHƯƠNG PHÁP NHẬN DẠNG SVM 4 .1 Tổng

Ngày đăng: 16/01/2017, 16:55

Từ khóa liên quan

Mục lục

  • Mục lục

  • Lời nói đầu

  • 1. XỬ LÝ ẢNH DÙNG THƯ VIỆN OPEN CV

    • 1.1. Giới thiệu về thư viện Opencv

    • 1.2. Các phép xử lý cơ bản trong OpenCV

      • 1.2.1. Chuyển đổi giữa các không gian màu

      • 1.2.2. Nhị phân hóa ngưỡng động

      • 1.2.3. Phép dãn nở

  • 2. TÁCH VÙNG CÔNG THỨC TỪ ẢNH

    • 2.1. Ý tưởng

    • 2.2. Triển khai và mô tả code

    • 2.3. Kết quả thu được

    • 2.4. Nhận xét

  • 3. TÁCH KÝ TỰ TỪ VÙNG CÔNG THỨC

    • 3.1. Tìm đường biên các ký tự

    • 3.2. Đánh nhãn các ký tự

  • 4. PHƯƠNG PHÁP NHẬN DẠNG SVM

    • 4.1. Tổng quan về các phương pháp nhận dạng ký tự

      • 4.1.1. Phương pháp tiếp cận cấu trúc

      • 4.1.2. Phương pháp ngữ pháp (Grammatical Methods)

      • 4.1.3. Phương pháp đồ thị (Graphical Methods)

      • 4.1.4. Mô hình Markov ẩn (HMM – Hidden Markov Model)

      • 4.1.5. Đối sánh mẫu

      • 4.1.6. Mạng Neural (neural networks)

    • 4.2. Máy vector hỗ trợ (SVM)

      • 4.2.1. Khái niệm

      • 4.2.2. Thuật toán SVM

      • 4.2.3. Huấn luyện SVM

  • 5. NHẬN DẠNG KÝ TỰ TOÁN HỌC BẰNG SVM

    • 5.1. Ý tưởng

    • 5.2. Tính toán đặc trưng trong ảnh

    • 5.3. Tạo cơ sở dữ liệu

    • 5.4. Huấn luyện

      • 5.4.1. Kịch bản huấn luyện

      • 5.4.2. Thông số huấn luyện

  • 6. KẾT QUẢ

    • 6.1. Kết quả nhận dạng từng ký tự

    • 6.2. Kết quả tái tạo công thức hoàn chỉnh

    • 6.3. Nhận xét

  • 7. TÀI LIỆU THAM KHẢO

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan