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

Распознание заданного набора объектов

Recommended Posts

Доброго дня всем.

Я новичок в компьютерном зрении. Встала задача - распознать на статическом изображении определенные объекты. Объекты всегда выглядят одинаково или меняются достаточно незначительно, но их точная позиция неизвестна. Могут представлять собой текстово-числовые строки или заданные образцами битмэпы на достаточно однородном (надеюсь, но не могу гарантировать) фоне. Всего порядка 60-70 разных битмэпов плюс символы 1-2 шрифтов (заглавные и строчные буквы, цифры, пробелы(?)).

Прошу подсказки, каким вообще методом и какими алгоритмами решать такую задачу? Пока из похожего нашел только классификаторы Хаара, но предпочитаю сначала убедиться, они ли мне нужны. Если кто-то сможет поделиться полезными ссылками, статьями, примерами кода или даже собственным опытом, буду очень благодарен.

Как дополнительная информация - реализовать придется на C#, думаю использовать EmguCV, или на крайний случай присоединю к C# интерфейсу С++ DLL с алгоритмом.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Если искомые образы меняются слабо, то можно с помощью преобразования Фурье перейти в частотную область и там считать корреляцию. В Матлабе есть готовый пример - если подойдёт, то в OpenCV его реализовать тоже можно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Сделайте комбинированный поиск с помощью cvTemplateMatch и cvminmaxloc для определения координат наиболее подходящего обьекты (возможно придется использовать моменты), задать область интереса (ROI) и в новых пределах обьекта поискать буквы. Далее ресет ROI и следующий битмап, если объектов на интересующей области не один.

Конечно проще было бы если известны "слова", т.е. последовательность. Можно было бы создать библиотеку готовых объектов и слов.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Сделайте комбинированный поиск с помощью cvTemplateMatch и cvminmaxloc для определения координат наиболее подходящего обьекты (возможно придется использовать моменты), задать область интереса (ROI) и в новых пределах обьекта поискать буквы. Далее ресет ROI и следующий битмап, если объектов на интересующей области не один.

Немного оффтопика: чем мне не нравится SetImageROI, так это своей жуткой тормознутостью. На каждый ROI выделяется память, после копируется и удаляется. Бррр! Будто нельзя было сделать без копирования. Поэтому ради быстродействия мне приходится переписывать под себя кучу всего готового, что есть в OpenCV - лишь бы не использовать SetImageROI.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

нормально все) я тут видео с рабочего стола обрабатываю, делал РОИ, потом отдельные участки РОИл ) всего 5 областей интересов ищу по 10-15 объектов, и в секунду кадров 20-30 выходило. Нормально в целом тянет. Правда нагрузка на проц не слабая оказалась. ядро до 30% (у мну Intel e4300 1.8Ghz) поднималось. Мне много не нужно оставил 2-3 к/с, нагрузка 4-5%. Ну а если производительность позволяет почему бы нет?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

:)) Стоило уйти читать про преобразование Фурье, как тут ещё ответили.

Уточнил задачу.

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

Плюс достаточно крупные картинки, которые от эталонов если вообще отличаются, то на несколько пикселей. К сожалению, не могу исключить масштабирование, но для начала и без него отлично пойдет. Если что, буду масштабировать элементы до размера эталона, если соотношение сторон совпадает. Шрифт везде один и тот же, размер шрифта тоже, но есть полужирные символы.

Фоны либо очень монотонные, либо вообще одноцветные, хорошо контрастируют с объектами, никаких намеренных шумов и искажений, скорее даже наоборот.

Вспомнил, что в ещё университете мы распознавали буквы и цифры с помощью нейросети. Но там был какой-то готовый пакет, возможно, самописный. Мне же нужно создать DLL, работающую без дополнительных внешних зависимостей (.NET не в счет). Имеет ли смысл смотреть нейросети?

cvTemplateMatch, судя по названию, мог бы быть полезен, почитаю про него подробнее.

Спасибо всем за советы. Думаю, такими темпами скоро разберусь.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Надеюсь, здесь разрешено постить ссылки. Нашел почти что 1 в 1 то, что мне нужно.

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

http://nashruddin.com/searching-icons-in-a-screenshot-using-template-matching.html

Плюс на том же сайте несколько хороших статеек про сопутствующие вещи.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте учётную запись или войдите для комментирования

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

Создать учётную запись

Зарегистрируйтесь для создания учётной записи. Это просто!

Зарегистрировать учётную запись

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу

×