Задание 1. Распознавание цифр номера.

Введение

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

Обязательная часть задания

Реализовать два метода распознавания основных цифр номера и применить их к номерам из базы std (снятых днём). Первый метод использует классификатор, основанный на инвариантных признаках. Во втором методе распознавание цифр производится с помощью сопоставления с шаблоном.

Описание первого метода

Примерный алгоритм выглядит так:

  1. Бинаризация изображения и поиск трех цифр номера (упражнения 1 и 2)
  2. Описание каждой цифры с помощью инвариантных признаков, рассмотренных на третьей лекции (многие полезные признаки можно получить с помощью функции regionprops)
  3. Ручной подбор решающих правил, позволяющих лучше всего разделить цифры (для упрощения процедуры подбора рекомендуется воспользовать графическим анализом признаков, функции scatter, bar, bar3)

Описание второго метода

Примерный алгоритм выглядит так:

  1. Построение шаблона для каждой цифры путём усреднения изображений
  2. Бинаризация изображения и поиск трех цифр номера (упражнения 1 и 2)
  3. Распознавание цифр с помощью сопоставления с шаблоном. Шаблон может быть создан на основе интенсивностей. Далее можно напрямую сопоставлять шаблон на интенсивностях с вырезанной цифрой, либо сделать distance transform и проводить сопоставление с помощью chamfer или hausdorff distance

Реализация

Концептуально работа алгоритма выглядит следующим образом: на вход подаётся файл с изображением и набор параметров. На выходе - три распознанные цифры номера. При этом пользователь может выбрать один из двух алгоритмов распознавания (или третий бонусный алгоритм опционально). Также, пользователь может выбрать опцию отображения результатов, в этом случае должно быть отображено изображение номера с тремя выделенными на нём цифрами:
nomer
Конкретнее, алгоритм должен быть реализован в виде функции со следующей сигнатурой:
three_numbers = CarNumberRecognition(filename, show, recognition_method), где

  • filename - имя файла с изображением знака
  • show - флаг, указывающий нужно ли отображать результаты работы, т.е. показывать номер и три ограничивающих прямоугольника вокруг найденных цифр (true - отображать, false - не отображать)
  • recognition_method - метод распознавания (0 - на основе инвариантов, 1 - на основе шаблонов, 2 - ваш собственный вариант)
  • three_numbers - массив, содержащий три цифры номера

Параметры входных данных:

  • Изображения номеров являются полутоновыми и сделаны с небольшим запасом
  • Цифры и буквы на номерах размещены последовательно (в виде одной строки)
  • Отношение высоты к ширине видимых на изображении символов не обязательно совпадает с тем, которое задается ГОСТом; отличия могут достигать 25%

Бонусная часть задания

  1. В качестве бонуса предлагается решить задачу, состоящую из снимков, сделанных ночью. В этом случае одна и та же функция должна работать как на дневных, так и на ночных данных
  2. Решить задачу поиска цифр с использованием плавающего окна и сопоставления с шаблоном. Шаблон может быть составлен на основе интенсивностей. Либо можно применить более робастную технику на основ chamfer или Hausdorff distance
  3. Предложить свой метод распознавания знаков или поиска ограничивающих прямоугольников, который будет работать не хуже базовых

Оценка

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

Содержание архива с выполненным заданием

Архив должен содержать файл readme, со следующей информацией:

Общая информация:

  1. ФИО: <Фамилия Имя Отчество> Группа: <номер группы>
  2. Задание: <номер задания> / <название задания>
  3. Система: <система программирования> ОС: <операционная система>
  4. Комментарии: <комментарии по реализации / пожелания / впечатления и т.д.>

Базовая часть:

  • Краткое описание метода бинаризации
  • Описание использованных инвариантных признаков
  • Какой метод сопоставления с шаблоном был выбран? (сопоставление по интенсивности, с помощью distance transform, другой). Если были реализованы два метода, то какой из них показал лучший результат?
  • Какой точности удалось достичь на выданных дневных данных?

Бонусная часть (описание только частей, которые были реализованы):

  • Какой точности удалось достичь на выданных ночных данных?
  • Насколько хорошо работает поиск цифр на основе скользящего окна и сопоставления с шаблоном (по сравнению с бинаризацией-выделением связанных компонент-минимизацией функционала)? Предпочтительнее количественное сравнение, то есть подсчет точности двух методов. Точность может выражаться количеством верно найденных ограничивающих прямоугольников
  • Если предложен свой метод, то вставить его подробное описание и возможное обоснование, почему он работает лучше

Материалы

© Лаборатория компьютерной графики при ВМиК МГУ