Каковы хорошие алгоритмы обнаружения автомобильных номерных знаков?

Фон

Для моего окончательного проекта в университете я разрабатываю приложение для регистрации номерного знака. Я считаю себя промежуточным программистом, однако в моем математическом знании нет ничего выше средней школы, что делает производство правильных формул более сложным, чем это, вероятно, должно быть.

Я потратил много времени на изучение научных статей, таких как:

Когда дело доходит до математики, я теряюсь. Из-за этого тестирования различные графические изображения оказались результативными, например:

alt text

к

alt text

Однако этот подход работал только на этом конкретном изображении, и если бы методы были применены к разным изображениям, я уверен, что произойдет меньшее преобразование. Я читал о формуле, называемой "преобразованием морфологии нижней шляпы", которая делает следующее:

В основном, преобразование сохраняет все темные детали изображения и устраняет все остальное (в том числе большие темные области и светлые области).

Я не могу найти много информации об этом, однако изображение в документации в конце отчета показывает его эффективность.

Другие ограничения

  • Разработка в С#
  • Ограничение проекта только на регистрационных таблицах Великобритании
  • Я могу выбрать изображения для преобразования в качестве демонстрации

Вопрос

Мне нужен совет о том, какие методы трансформации я должен сосредоточить на разработке, и какие алгоритмы могут мне помочь.

РЕДАКТИРОВАТЬ: Новая информация, присутствующая на Продолжение - Обнаружение номерного знака автомобиля

Ответ 1

Есть несколько подходов, которые вы можете предпринять, но первая стратегия, которая появляется в виду, заключается в следующем:

  • Discovery/research: Определите набор цветов и шрифтов, которые вам могут понадобиться идентифицировать. Если ваш образец изображения является представителем большинства британских тарелок, ваша работа становится проще. Например. Простой, сингулярный шрифт и черная надпись на белом фоне.
  • Код: Попытка идентифицировать прямоугольную область изображения, где цвета преимущественно белые и черные. Это не ужасная проблема с математикой, и она должна дать вам область номерного знака, чтобы сосредоточиться.
  • Код: немного очистите на своей субрегионе такое преобразование в чистое черно-белое (монохромное) и, возможно, масштабирование/смещение в красивый, плотный прямоугольник.
  • Использовать API: Затем используйте существующий алгоритм распознавания OCR (оптического распознавания символов) в вашем выбранном регионе изображения, чтобы увидеть, можете ли вы прочитать текст.

Как я уже сказал, это одна стратегия для многих, но это приходит на ум, поскольку требуется минимальное количество тяжелой математики... то есть если вы можете найти реализацию OCR, которая будет работать на вас.

Ответ 3

Я сделал аналогичный проект несколько лет назад на Java, сначала я применил оператор Sobel и затем замаскировал все изображение с изображением (с приложением оператора Собеля). Область максимального совпадения - это место, где находится пластина. Затем примените OCR к выбранной области, чтобы получить номер.

Ответ 4

Вот как я предлагаю вам выполнить эту задачу. Прочтите мой подробный ответ здесь.

  • Преобразовать в оттенки серого.
  • Гауссовское размытие с фильтром 3x3 или 5x5.
  • Применить фильтр Sobel, чтобы найти вертикальные края.

    Sobel(gray, dst, -1, 1, 0)

  • Порог результирующего изображения для получения двоичного изображения.
  • Применить морфологическую операцию закрытия с использованием подходящего структурирующего элемента.
  • Найдите контуры результирующего изображения.
  • Найти minAreaRect каждого контура. Выберите прямоугольники на основе соотношения сторон и минимальной и максимальной областей.
  • Для каждого выбранного контура найдите плотность края. Установите порог плотности краев и выберите прямоугольники, которые пробивают этот порог как возможные области плитки.
  • После этого останется несколько прямоугольников. Вы можете отфильтровать их на основе ориентации или любых критериев, которые вы считаете подходящими.
  • Закрепите эти обнаруженные прямоугольные части изображения после adaptiveThreshold исходного (полутонового) изображения и примените OCR.

Ответ 5

Это, очевидно, проблема компьютерного зрения. Взгляните на OpenCV. Это на С++, но, вероятно, вы сможете с ним каким-то образом.

Ответ 6

Он точно описывает, как вычислить преобразование нижней шляпы (вроде бы похоже на инвертированное градуированное пороговое преобразование).

Первое, что нужно сделать, это реализовать две функции расширения морфологии и эрозию.

Для этого вам понадобятся ваши f и b, после чего вы вычисляете функцию над небольшой областью изображения в точке, содержащей наибольшее найденное значение.

(f ⊕ b)(s, t) = max{f (s − x, t − y) + b(x, y)
|(s − x), (t − y) ∈ Df ; (x, y)∈Db}

Что это говорит, возьмите максимум выражения над всеми точками области области (например, небольшой прямоугольник, центрированный в вашей точке (s, t).

простой псевдокод будет

max = -infinity // for the point (s,t) on the image, must compute this for all points
for(x = -5 to 5)
for(y = -5 to 5)
max = Max(max, f(s - x, t - y) + b(x,y))

мы теперь имеем новое изображение максимальных значений.

Это на самом деле довольно просто, поэтому не делайте его сложнее, чем это (мы просто добавляем b (x, y) в каждую точку в области и выясняем, какой из них дает максимальное значение).

вы делаете то же самое для эрозии (очень похоже на выше)

Теперь открытие и закрытие - это состав двух

Вы можете думать об этом сначала как о продолжении дилатации, а затем об эрозии для открытия.

Он говорит, что, наконец, вычитает закрытие с исходного изображения, и вы должны иметь свое преобразование.

Ответ 7

В Великобритании уже есть система, которая делает это. Я помню, что видел телешоу, в котором они продемонстрировали, что они могут найти автомобиль в Лондоне в течение 10 минут (при условии, что они знают, что номер и автомобиль едут) Простое чтение Wikipedia дает вам указатели, которые вам нужно начать думать о проблеме: http://en.wikipedia.org/wiki/Automatic_number_plate_recognition

Ответ 8

Если вас интересует проблема обнаружения наличия номерного знака (в отличие от его распознавания), вам следует, вероятно, посмотреть на обнаружение текста на изображениях, поскольку оно связано с тем, что вы делаете.

Этот вопрос связан с вашим: Алгоритм обнаружения наличия текста на изображении

Ответ 9

вы можете использовать обнаружение прямоугольника в opencv или тренировать хара как функции для обнаружения пластинок, которые также присутствуют в opencv

Ответ 10

Вы также можете обратиться к Автоматическая библиотека распознавания лицензий и этот запрос. Это также даст вам некоторое представление о том, как подойти к вещам и как существуют существующие решения.

Но как ответил Пауль, сначала попробуйте найти прямоугольную номерную табличку из полного изображения, а затем разбить на две части, а затем использовать доступные библиотеки OCR (рекомендуется Tesseract)

Вы можете ссылаться на ссылку , которая поможет вам найти прямоугольную пластину. Вам нужно использовать библиотеки openCV, поэтому вам не понадобится много математики, но да, базовое понимание того, что происходит за кулисами, поможет вам лучше решить проблему.

Ответ 11

Вы можете проверить www.openalpr.com как отправную точку. Он использует ряд методов для поиска и анализа номерного знака.