2012-11-14 36 views
9

Tôi đang cho hình ảnh Bitmap vào chương trình C# để có thể thực hiện OCR để xác định các ký tự trong hình ảnh. Tôi có thể làm điều này khá tốt nếu hình ảnh không được xoay. Tuy nhiên, một trong những yêu cầu của chương trình là chương trình sẽ tự động xác định xem hình ảnh đã được xoay hay chưa và nó sẽ tự động sửa các phép quay này.Làm thế nào để tìm góc quay của hình ảnh?

Tôi đã thử triển khai một phương pháp đơn giản, trong đó các dòng được ghi lại trên hình ảnh và các điểm liên hệ với một ký tự được ghi lại và sau đó thực hiện hồi quy tuyến tính đơn giản trên các điểm dòng. Điều này hoạt động đến một mức độ, mặc dù nó đã không được chứng minh rất chính xác do độ cong của các ký tự, v.v.

Tôi đã tự hỏi nếu có một phương pháp tốt hơn để giải quyết vấn đề này? Rất cám ơn trước! :)

Trả lời

2

Tôi sử dụng thuật toán gmseDeskew để xóa một hình ảnh trong chương trình của mình. Nó hoạt động rất tốt.

+1

Thuật toán này đã thực hiện thủ thuật cho tôi. Tôi tìm thấy một C# thực hiện tuyệt vời [ở đây.] (Http://mdb-blog.blogspot.com/2010/10/c-how-to-deskew-image.html) Thật không may, nó có vẻ như các thuật toán như bằng văn bản là khá hardcoded cho ± 20 độ. Tôi đã thử thay đổi các dòng mã như 'double cAlphaStart = -20;' thành -45 thay vào đó, để tìm kiếm ± 45 độ, và một số dòng khác, nhưng chắc chắn một cái gì đó sẽ phá vỡ. Tôi rất muốn nghe nếu có một thuật toán linh hoạt hơn, hoặc ai đó có thể giải thích cách tinh chỉnh thuật toán linh hoạt hơn mà không vi phạm kết quả. –

+0

Tôi cũng đã thử nó và nó hoạt động tốt. @MacSigler Để tăng góc "phạm vi" thành (-45, + 45) có vẻ như bạn chỉ cần thay đổi các dòng: double cAlphaStart = -45; int cSteps = 90 * 5; Tôi đã thử nghiệm một cách nhanh chóng nhưng nó có vẻ là ok. – AFract

2

Đó là một vấn đề thú vị để đảm bảo. Tôi sẽ tìm một số chữ cái dễ dàng hơn để nói luân phiên. Ví dụ, một thủ đô A hoặc R hoặc K phải có cả hai phần dưới cùng là mặt phẳng nằm ngang. Một lựa chọn khác là lấy các chữ cái không thể xác định và xoay chúng theo nhiều cách khác nhau và tái xác định chúng. Nếu một bức thư không thể xác định được trong quét thô có thể được xác định khi bạn xoay nó, đó là một đầu mối khá lớn. Khi bạn đã xác định xoay "chỉnh sửa" làm cho ký tự không thể nhận ra thành một ký tự dễ nhận biết, hãy áp dụng cùng một giá trị xoay vòng cho các giá trị khác.

+0

thêm vào điều này, nếu bạn có thể xác định vị trí "o", bạn có thể mở rộng theo một hướng và dễ dàng xác định hướng của mình bằng cách xem các chữ cái có nằm trên dòng của bạn hay không –

+0

khó khăn nếu không thể tách biệt các ký tự trước khi xoay, vì tôi đang tìm kiếm khoảng trống dọc và hortizontal giữa các ký tự. Nếu hình ảnh được xoay, thường thì không phải khoảng trống này bị gián đoạn bởi ký tự tiếp theo. Vì tôi không thể cô lập các nhân vật, tôi không thể bắt đầu cố gắng xác định chúng. –

+0

@MacSigler làm thế nào về một mờ đủ mạnh sẽ làm cho dòng văn bản xuất hiện ít nhất là pha trộn với nhau đủ để phát hiện cạnh hoặc nổi bật trong một biến đổi hough? –

0

Có thể dễ dàng tìm thấy các dòng dọc-ish liền kề với văn bản (ví dụ: lề trái). Đối với mỗi đường quét, ghi lại điểm ảnh đen đầu tiên. Đặt tất cả những người trong một hồi quy tuyến tính, và bạn sẽ nhận được một đường thẳng đứng gần. Đo góc của nó từ dọc thực và bạn sẽ có thể giải phóng văn bản. Bạn có thể tưởng tượng làm điều tương tự cho các bên trên, dưới và bên phải, và lấy trung bình.

2

Nếu nó nhận dạng dòng văn bản, sau đó cố làm mờ hình ảnh sao cho các đường hầu như chắc chắn và tìm hướng của đường kẻ (hoặc phân tích biến đổi Fourier hoặc bằng cách phát hiện sườn).

1

Nếu văn bản được định dạng như tài liệu được in (cột và dòng văn bản) thì bạn có thể tận dụng điều này.

Một cách tiếp cận mà tôi đã thường nhìn thấy lần sử dụng cho văn bản tài liệu là để làm hồ sơ dự:

  1. Quét tài liệu tại một định hướng cụ thể và tổng hợp số lượng điểm ảnh "đen" trên mỗi dòng quét (tạo một mảng đếm 1D, mỗi chỉ số đại diện cho toạ độ Y, cấu hình).
  2. Tính toán phương sai của số lượng (tiểu sử).
  3. Lặp lại nhiều góc, (có thể thực hiện theo kiểu tìm kiếm nhị phân để giảm chế biến)
  4. Góc kết quả là phương sai lớn nhất là góc chính xác (do dòng văn bản tạo ra các đỉnh lớn từ văn bản in) và thung lũng thấp do thiếu văn bản giữa các dòng)

Sau đó, sau khi tìm góc này, bạn có thể điều chỉnh hình ảnh phù hợp và thực hiện OCR tuyệt vời của mình.

0

Chúng tôi phải đối mặt với một vấn đề tương tự trước đây, và chúng tôi đã tìm kiếm một giải pháp dễ dàng và nhanh chóng, và chúng tôi đã sử dụng bộ công cụ thương mại (leadtools). Bạn có thể sử dụng nó để tự động xử lý ảnh trước khi OCR.Bạn có thể kiểm tra số help topic này để biết cách sử dụng bộ công cụ này để xử lý và quét hình ảnh.

+0

Trong khi liên kết này có thể trả lời câu hỏi, tốt hơn nên bao gồm các phần cần thiết của câu trả lời ở đây (và TẠI SAO nó thực sự trả lời câu hỏi trên * góc quay *) và cung cấp liên kết để tham khảo. Câu trả lời chỉ liên kết có thể trở thành không hợp lệ (và được giảm xuống) nếu trang được liên kết thay đổi. Xem [Cách trả lời] (http://superuser.com/questions/how-to-answer) vì lý do quan trọng. – bytebuster

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