2011-01-18 16 views
9

Tiếp tục từ chủ đề này:Tiếp - Xe Giấy phép tấm Detection

What are good algorithms for vehicle license plate detection?

tôi đã phát triển kỹ thuật xử lý ảnh của tôi để nhấn mạnh các tấm giấy phép càng nhiều càng tốt, và nhìn chung, tôi đang hạnh phúc với nó, đây là hai mẫu.

alt text

alt text

Bây giờ đến phần khó khăn nhất, thực sự phát hiện biển số xe. Tôi biết có một vài phương pháp phát hiện cạnh, nhưng toán học của tôi khá kém nên tôi không thể dịch một số công thức phức tạp thành mã.

Ý tưởng của tôi cho đến nay là lặp qua mọi pixel trong hình ảnh (đối với vòng lặp dựa trên chiều rộng img chiều cao &) Từ này so sánh từng pixel với danh sách màu, từ thuật toán này được kiểm tra xem phân biệt giữa tấm giấy phép màu trắng và màu đen của văn bản. Nếu điều này xảy ra đúng thì các pixel này được xây dựng thành bitmap mới trong bộ nhớ, sau đó quét OCR được thực hiện khi mẫu này đã ngừng phát hiện.

Tôi đánh giá cao một số đầu vào về điều này vì đây có thể là ý tưởng sai lầm, quá chậm hoặc quá sâu.

Cảm ơn

+3

Bạn sẽ cho tôi một vé giao thông khi tôi lái xe bằng một trong các máy của bạn? – DOK

+0

hah, nah đây chỉ là một dự án uni, may mắn thay tôi chọn hình ảnh tôi thử :) – Ash

Trả lời

5

Phương pháp "xem liệu màu sắc có giữ sự khác biệt giữa biển số giấy phép hay không và màu đen của văn bản" về cơ bản là tìm kiếm các khu vực có cường độ pixel thay đổi từ đen sang trắng và ngược lại nhiều lần. Phát hiện cạnh có thể thực hiện cùng một điều cơ bản. Tuy nhiên, việc thực hiện các phương pháp của riêng bạn vẫn là một ý tưởng tốt bởi vì bạn sẽ học được rất nhiều trong quá trình này. Heck, tại sao không làm cả hai và so sánh đầu ra của phương pháp của bạn với một số thuật toán phát hiện cạnh làm sẵn?

Tại một thời điểm nào đó, bạn sẽ muốn có hình ảnh nhị phân, có pixel đen tương ứng với nhãn "không phải một ký tự" và các pixel màu trắng tương ứng với nhãn "là một ký tự". Có lẽ cách đơn giản nhất để làm điều đó là sử dụng chức năng thresholding. Nhưng điều đó sẽ chỉ hoạt động tốt nếu các nhân vật đã được nhấn mạnh theo một cách nào đó.

Là một đề cập trong chủ đề khác, bạn có thể làm điều đó bằng cách sử dụng toán tử mũ đen, mà kết quả trong một cái gì đó như thế này:

image after black hat operation

Nếu bạn ngưỡng hình ảnh trên với, nói, phương pháp Otsu của (có thể tự động xác định mức ngưỡng toàn cầu), bạn có được điều này:

alt text

có một số cách để làm sạch hình ảnh đó. Ví dụ, bạn có thể tìm thấy các thành phần kết nối và vứt bỏ những người mà là quá nhỏ, quá lớn, quá rộng hoặc quá cao để trở thành một nhân vật:

alt text

Kể từ khi nhân vật trong hình ảnh của bạn là tương đối lớn và hoàn toàn kết nối phương pháp này hoạt động tốt.

Tiếp theo, bạn có thể lọc các thành phần còn lại dựa trên các thuộc tính của hàng xóm cho đến khi bạn có số lượng thành phần mong muốn (= số ký tự). Nếu bạn muốn nhận ra ký tự, bạn có thể tính toán các tính năng cho mỗi ký tự và nhập chúng vào một trình phân loại, thường được xây dựng với việc học có giám sát.

Tất cả các bước trên chỉ là một cách để thực hiện điều đó, tất nhiên.

Nhân tiện, tôi đã tạo các hình ảnh trên bằng cách sử dụng OpenCV + Python, đây là một sự kết hợp tuyệt vời cho tầm nhìn máy tính.

+0

Cảm ơn bạn đã trả lời của bạn, thực sự đánh giá cao nó. OpenCV trông tuyệt vời, nhưng tôi muốn lấy một cái gì đó đi từ điều này hơn là gọi một vài chức năng thư viện heh. Bạn đã cho tôi một số sự tự tin để thực sự đi cho nó. Đơn giản chỉ cần đảo ngược hình ảnh của tôi cũng tạo ra kết quả rất tốt đẹp vì vậy tôi có thể đi ra rằng một khi tôi đã hoàn thành các phương pháp thao tác hình ảnh :). – Ash

3

Màu sắc, có vẻ tốt, sẽ trình bày một số thách thức với điều kiện ánh sáng và bóng. Phụ thuộc vào thực sự bạn muốn làm cho nó mạnh mẽ như thế nào nhưng các trường hợp thế giới thực phải đối phó với các vấn đề như vậy.

Tôi đã thực hiện nghiên cứu về cảnh đường (xem trang tiểu sử của tôi và xem tại đây cho sample) và thấy rằng cảnh đường thế giới thực rất ồn ào về điều kiện ánh sáng và màu sắc của bạn có thể thay đổi từ Nâu sang Trắng một tấm lưng màu vàng.

Hầu hết các thuật toán đều sử dụng tính năng phát hiện đường và cố gắng tìm một hộp có tỷ lệ khung hình trong phạm vi có thể chấp nhận được.

Tôi đề nghị bạn xem xét tài liệu về chủ đề nhưng điều này đã đạt được vào năm 1993 (nếu tôi nhớ chính xác) vì vậy sẽ có hàng nghìn bài viết.

Đây là một tên miền khoa học nên chỉ cần một thuật toán sẽ không giải được và bạn sẽ cần nhiều bước xử lý trước/sau.

Tóm lại, đề xuất của tôi là sử dụng biến đổi Hough để tìm các dòng và sau đó cố tìm các hình chữ nhật có thể tạo tỷ lệ khung hình có thể chấp nhận được.

Phát hiện tính năng Harris có thể cung cấp các cạnh quan trọng nhưng nếu ô tô có màu sáng thì điều này sẽ không hoạt động.

+0

Chúc mừng cho câu trả lời, tôi vẫn có thể đưa ra phương pháp được mô tả ở trên, vì tôi không thể tìm thấy bất kỳ mã giả nào liên quan đến Phương pháp biến đổi Hough. Dù sao cũng cảm ơn! – Ash

+0

Bạn không phải tự mình thực hiện - sử dụng OpenCV, mặc dù tôi đã từng làm điều đó cho một bài tập. Tôi nghĩ nếu bạn cần quan tâm đến Computer Vision, bạn phải suy nghĩ về việc sử dụng OpenCV, nó rất dễ sử dụng và thực hiện Hough, và rất nhiều thứ hữu ích khác và nhanh đến vậy. – Aliostad

+0

Vâng tôi muốn tránh xa việc sử dụng thư viện nhưng tôi đoán là tôi không có nhiều lựa chọn. – Ash

1

Nếu bạn có nhiều mẫu, bạn có thể thử kiểm tra phương pháp phát hiện khuôn mặt được phát triển bởi Paul Viola và Michael Jones. Nó rất tốt cho việc phát hiện khuôn mặt, có thể nó sẽ làm tốt với phát hiện tấm giấy phép (đặc biệt nếu kết hợp với một số phương pháp khác)

+0

Tôi không hiểu tại sao điều này lại bị downvoted, về cơ bản Tomasz là đúng, có một bài viết hay cho một hệ thống được thực hiện bằng cách sử dụng phát hiện đối tượng viola và jones [Nhận dạng bản quyền thời gian thực trên Embedded DSP-Platform] (http: // www.icg.tu-graz.ac.at/publications/pdf/arth_-_real-time_license_plate_recognition_ecw07.pdf). Ví dụ trong opencv [ở đây] (http://docs.opencv.org/trunk/doc/py_tutorials/py_objdetect/py_face_detection/py_face_detection.html) – Mantas