Здравствуйте. Есть задача написать прграмму по сортировке фотографий по номерам машин. Почитал различную литературу и в итоге наваял приложение. С распознованием самих символов инфы полно к этому вопросов нету, а вот нахождение номерной пластины на фотографии... с этим получилась загвоздка. толковых материалов нету. нашел какой то английский документ где все было более менее красиво описано с точки зрения математики... написал .. в итоге имеем результат:
полосы на фотографии которые показывают места вероятно содержащие номер.
и вот теперь вопрос: Как среди этих полос отсеять лишние, которые не содержат номера.
я делаю вертикальную проекцию цвета, в результате чего получаем графики полос.
картинки прилагаю в файле. отметил там сегмент функции который повторяется на всех полосах которые содержат
номер. каждый график отображает проекцию своей полосы. Подскажите пожалуйста как этот сегмент выделить?? уже месяц мучаю код и ничего не выходит...
Спасибо.
Уважаемый WMC, для того чтобы найти номер на изображении, нужно разобраться в природе изображения самого номера, выявить его отличительные особенности и найти преобразование (функцию), которая с высокой степенью вероятности даст верный результат поиска. Например ваш график покажет совсем другие результаты, если эта же машина будет в поле с травой, а не на асфальте - в этом случае "номер машины" будет на протяжении всего графика.
Разпознавание изображений - одна из труднейших задач в области программирования, на данный момент стараются использовать отличительные особенности объектов и анализируют их в двух измерениях.
Для начала определимся с параметрами входного изображения и его разрешения. Насколько я понял, изображение будет монохромным (т.е. не содержать данных о цвете) и довольно низкого разрешения.
Номер автомобиля представляет собой контрастные буквы черного цвета на сплошном белом фоне (если не брать в расчет рамку). Поскольку буквы на фоне сильно контрастируют, то нам может помочь построчный частотный анализ. Если интерпретировать каждый пиксел, как градации серого, то исходя из формата данных - каждая строка есть серия чисел от 0 до 255, количество которых есть горизонтальное разрешение фотки. Буквы номера будут давать числа в диапазоне примерно от 0 до 40, фон номера от 220 до 255. Применяя частотный анализ (преобразование фурье) эти буквы на фоне дадут высокие всплески в области средней частоты.
Затем составляем карту всплесков построчно, отсеиваем низкие и высокие частоты (опытным путем можно установить точные диапазоны частот для номера). Количество вертикальных карт и стартовая позиция дадут вертикальное расположение номера.
После этого выделенный вертикальный участок анализируется тем же способом, только не построчно, а "поколоночно". Опять составляются частотные карты, ищутся начало и конец всплесков - получаем прямоугольник с расположением номера.
It's a long way to the top if you wanna rock'n'roll
Тебе помочь в этом может библиотека OpenCV - это библиотека алгоритмов так называемого "компьютерного зрения", которая предоставляется с открытым кодом на С++.
Взять её можешь отсюда: http://sourceforge.net/projects/opencvlibrary
По поводу OpenCV знаю .. есть и у меня эта штука. я уже чувствую что придется ее освавать ... хотя видел пару проектов где обходились без нее.
Уважаемый somewhere, по поводу травы и асфальта есть условия. для той сферы для которой разрабатывается программа четко определено что машина должна быть сфотографирована на спец.стоянке. и номер будет в более высоком качестве. в моем случае понижение качества (downsample) это вынужденная операция. так как на изображениях с высоким разрешением скорость и производительность алгоритма падает.
а откуда вы взяли ваш ответ??? вы занимаетесь распознаванием или это из книги какой нибудь??? можете кинуть пару ссылок??