Перейти к содержимому
Compvision.ru

ok_demo

Пользователи
  • Количество публикаций

    10
  • Зарегистрирован

  • Посещение

Все публикации пользователя ok_demo

  1. Формат номерных автомобильных номерных знаков, а также перечень возможных символов, шрифт и т.д. определяется актами страны. Например, стандарт Беларуси: http://www.gosstandart.gov.by/txt/BDD_pdf/914.pdf
  2. Думаю, так просто, как Вы думаете, не получится. Более того, OpenCV, ИМХО, не обладает таким потенциалом в области OCR, как специализированные разработки. Сталкивался с tesseract - вполне себе понравилось, и лицензия хорошая.
  3. Да вроде как уже отделить серое от цветного не проблема. Проблема в том, что на иллюстрациях оказалось слишком много серого цвета, особенно на границах.
  4. Не очень понял логику алгоритма. Может быть, поэтому он мне не нравится? Куски мы определили. Далее вычисляем проекции. Сглаживаем обязательно! После этого ищем "пики наоборот". Пример определения можно подсмотреть в одном из известных проектов (прикрепляю два файла на джаве, логику работы там можно посмотреть, правда, джавовское расширение не хотело загружаться, пришлось файлы переименовать). Смотреть функцию BandGraph::findPeaks(); Graph.txt BandGraph.txt
  5. Тут скорее проблема будет даже не с тем, что их несколько, а с тем, как они расположены на странице (если они пересекаются горизонтально и вертикально, то алгоритм анализа диаграмм существенно усложнится) и какого они размера (достаточно небольшие иллюстрации при достаточно жирном шрифте могут "тонуть" на общей диаграмме, что усложнит их поиск). В общем, трудно сказать, не видя исходных изображений, нужно пробовать, что получится. Благо, все обсуждаемые алгоритмы просты и не требуют даже OpenCV.
  6. Как минимум, озадачивает уже этот код: Maximum := GetMaximum([abs(Row^[x].rgbtRed - Row^[x].rgbtGreen), abs(Row^[x].rgbtGreen - Row^[x].rgbtBlue), abs(Row^[x].rgbtRed - Row^[x].rgbtGreen)]); В третьей строчке явно нужно отнимать от синего красный (или наоборот). Ну и далее. "Слишком большой порог - области вне иллюстраций идеально белые, но и сами иллюстрации обрезаны". В смысле обрезаны? По краю идеально обрезаны? Т.е. у них по краям что-то типа заливки, близкой к оттенкам серого? И Вы хотите ее сохранить? В таком случае можно сделать, например, следующее. 1. Пропускаем изображение через данный алгоритм. 2. Определяем зоны иллюстраций. 3. Увеличиваем их на определенную величину (трудно сказать, какую, нужно оценить, думаю, процентов 30 будет достаточно). 4. Строим горизонтальную и вертикальную проекцию каждого куска на исходном изображении (суммируем интенсивность каждого столбца и строки), белый фон будет давать всплески, иллюстрация - провалы. На самом деле, можно попробовать обработать сразу п.4 все исходное изображение, я как-то сразу не подумал об этом, но алгоритм существенно усложнится, если на одной странице несколько иллюстраций и они расположены на ней произвольным образом. А так сначала определяем позицию каждой иллюстрации, а потом уточняем ее границы.
  7. А можно код увидеть? Я так понимаю, проблемы должны быть с самой иллюстрацией, ибо все остальное достаточно черно-белое и должно хорошо отсекаться. При увеличении порога на иллюстрации должны все более проявляться белые пятна (пиксели, достаточно близкие к оттенкам серого). Именно с ними возникают проблемы?
  8. ИМХО, для поставленной задачи это слишком громоздкое решение. Я бы попытался сделать проще. По крайней мере, для начала.
  9. Точно не скажу, какие конкретно функции могут помочь, но по Вашему описанию логика решения достаточно проста. В ч/б изображении значения RGB компонент равны, в отличие от цветного. Почему бы не использовать этот признак? Например, обходите изображение и помечаете все пиксели с равными (ну или приблизительно равными) RGB компонентами нолями, а прочие единицами. В результате получите маску цветных иллюстраций (вероятно, с некоторым шумом). P.S. В принципе, можно теперь открыть документацию OpenCV и поискать функцию, которая поможет нам провести подобную обработку, и избавиться при необходимости от возможного шума.
  10. Перекомпилировать придется, пересоздавать проекты нужды нет. В двух словах: 1. Открываете солюшен OpenCV, в нужных проектах выставляете цель линковки lib вместо dll. 2. Собственно, компилируете, ищете нужные файлы (к сожалению, пути настроены не совсем очевидным образом). 3. Кроме этого необходимо забрать скомпилированные lib-файлы для сторонних библиотек (libpng, libjpeg и пр.). 5. Также нам понадобится файл videoInput.lib, его можно найти в папке 3rdparty/lib. 7. Еще нужны файлы vfw32.lib и comctl32.lib (у меня они потащились из Platform SDK). 8. Берете из OpenCV папку include. 9. Последний штрих - кроме подключения всех этих библиотек, в Вашем компилируемом файле необходимо в список игнорируемых библиотек добавить файл atlthunk.lib (его будет пытаться тащить за собой упоминаемый выше videoInput.lib). Собственно, все достаточно просто. И теперь на выходе только один exe-файл. Очень удобно.
×