2011-05-03 73 views
17

Tôi đang sử dụng OpenCV trên iPhone và cần phát hiện số trong hình ảnh. Tôi chia hình ảnh thành hình ảnh nhỏ hơn để mỗi hình ảnh chỉ có một số (1-9). Tất cả các số được in, KHÔNG được viết tay.OpenCV phát hiện số

Cách tiếp cận tốt nhất để tìm ra các con số với OpenCV là gì?

UPDATE:

Tôi đã thành công tìm thấy những con số và trích xuất chúng. Họ trông như thế này:

http://img198.imageshack.us/img198/5671/101ht.jpg
http://img824.imageshack.us/img824/539/606yu.jpg

Khi họ đang trích họ đang ở cùng kích thước và vân vân. Tôi đã lưu một loạt các hình ảnh và đặt chúng trong một thư mục OCR, nơi chúng được phân loại thành các số. Giống như: ocr/1/100.jpg 101.jpg .... và ocr/2/200.jpg 201.jpg ....

Sau đó, tôi sẽ sử dụng cách tiếp cận tương tự như trong hướng dẫn cơ bản OCR : http://blog.damiles.com/?p=93

Tuy nhiên, tôi đang lập trình cho iPhone và không thể sử dụng mã C++ (lỗi khi biên soạn và vv) và tôi không có quyền truy cập vào highgui.

tôi đã cố gắng sử dụng cvMatchTemplate() và phù hợp với một loạt các hình ảnh nhưng nó có vẻ làm việc khá xấu ...

Bất cứ ý tưởng khác tôi có thể thử?

+0

@Linues Bạn đã bao giờ thử phân biệt các số và ký tự trong một hình ảnh, tức là chỉ lấy số từ hình ảnh HOẶC một thứ gì đó trong mảng chiều của đường bao bằng cách sử dụng: findContours. Tôi đang cố gắng phân biệt các số từ char. Xin vui lòng cho tôi biết, nếu gợi ý từ phía bạn. –

+0

[OCR cơ bản trong opencv] (http://blog.damiles.com/?p=93) –

+1

Cảm ơn bạn. Tôi đã đọc nó trước đó. Anh ấy đang làm OCR trên những con số viết tay. Hình ảnh xe lửa có hoạt động tốt cho văn bản in không? – Linus

Trả lời

2

Mục tiêu C++? Thử đổi tên tệp .m thành .mm và sau đó bạn có thể sử dụng C++ trong dự án iPhone của mình.

2

Về cơ bản, vấn đề của bạn chỉ là phân loại vectơ đặc trưng, ​​là tập hợp cường độ điểm ảnh sau một số bước tiền xử lý. Bạn có thể sử dụng bất kỳ trình phân loại nào cho tác vụ này, ví dụ như. các mạng thần kinh, cần có sự triển khai C bên trong OpenCV. Bạn cũng có thể thử thư viện C libsvm cho máy hỗ trợ Vector.

Có một số good site liên quan đến vấn đề này với rất nhiều giấy tờ và cơ sở dữ liệu đào tạo.

4

Nếu các số được in, công việc khá đơn giản, bạn chỉ cần tìm ra một tập hợp các tính năng phù hợp. Nếu những con số là một trong những font chữ, bạn có thể nhận được ngay với cách tiếp cận này:

  • Trích xuất số
  • Tìm bounding hộp
  • Scale hình ảnh xuống một cái gì đó giống như 10x8, cố gắng để phù hợp với tỉ lệ
  • làm điều này cho một tập huấn luyện nhỏ, mất hình ảnh 'trung bình' cho mỗi số

  • đối với hình ảnh mới, hãy làm theo các bước trên, nhưng cuối cùng chỉ là một sự khác biệt hình ảnh tuyệt đối với mỗi người trong số-templates . Sau đó, lấy tổng của sự khác biệt (pixel trong hình ảnh khác biệt). Người có số tiền tối thiểu là số của bạn.

Tất cả ở trên là các hoạt động cơ bản của OpenCV.

1

Đây là một tốt đẹp open source, Đó là một ORCDemo trên iPhone.Hope nó rất hữu ích cho bạn

7

Bạn có thể bắt đầu bằng cách đọc về phép phân tích thành phần chính (PCA), Linear biệt thức Phân tích Fisher (LDA), và Hỗ trợ Máy Vector (SVM). Đây là các phương pháp phân loại cực kỳ hữu ích cho OCR và có các thư viện bằng bất kỳ ngôn ngữ nào bao gồm C++, Python, C#, v.v.

Nó chỉ ra rằng OpenCV đã bao gồm các triển khai tuyệt vời trên PCAsSVMs. Tôi chưa thấy bất kỳ ví dụ mã OpenCV nào cho OCR, nhưng bạn có thể sử dụng một số phiên bản phân loại khuôn mặt đã sửa đổi để thực hiện phân loại ký tự. Một nguồn tài nguyên tuyệt vời cho mã nhận dạng khuôn mặt cho OpenCV là this website.

0

HOG + SVM (Cố gắng chơi với kernel)

0

Mạng nơron thần kinh là thuật toán tốt nhất cho các chữ viết tay. Chúng được thực hiện trong hầu hết các hệ thống như USPS, vv Dưới đây là một vài bài báo giải thích các thuật toán. http://yann.lecun.com/exdb/lenet/

Các vấn đề liên quan