niello 0 Жалоба Опубликовано December 26, 2010 Доброго дня всем. Я новичок в компьютерном зрении. Встала задача - распознать на статическом изображении определенные объекты. Объекты всегда выглядят одинаково или меняются достаточно незначительно, но их точная позиция неизвестна. Могут представлять собой текстово-числовые строки или заданные образцами битмэпы на достаточно однородном (надеюсь, но не могу гарантировать) фоне. Всего порядка 60-70 разных битмэпов плюс символы 1-2 шрифтов (заглавные и строчные буквы, цифры, пробелы(?)). Прошу подсказки, каким вообще методом и какими алгоритмами решать такую задачу? Пока из похожего нашел только классификаторы Хаара, но предпочитаю сначала убедиться, они ли мне нужны. Если кто-то сможет поделиться полезными ссылками, статьями, примерами кода или даже собственным опытом, буду очень благодарен. Как дополнительная информация - реализовать придется на C#, думаю использовать EmguCV, или на крайний случай присоединю к C# интерфейсу С++ DLL с алгоритмом. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Nuzhny 243 Жалоба Опубликовано December 27, 2010 Если искомые образы меняются слабо, то можно с помощью преобразования Фурье перейти в частотную область и там считать корреляцию. В Матлабе есть готовый пример - если подойдёт, то в OpenCV его реализовать тоже можно. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Art!P 0 Жалоба Опубликовано December 27, 2010 Сделайте комбинированный поиск с помощью cvTemplateMatch и cvminmaxloc для определения координат наиболее подходящего обьекты (возможно придется использовать моменты), задать область интереса (ROI) и в новых пределах обьекта поискать буквы. Далее ресет ROI и следующий битмап, если объектов на интересующей области не один. Конечно проще было бы если известны "слова", т.е. последовательность. Можно было бы создать библиотеку готовых объектов и слов. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Nuzhny 243 Жалоба Опубликовано December 27, 2010 Сделайте комбинированный поиск с помощью cvTemplateMatch и cvminmaxloc для определения координат наиболее подходящего обьекты (возможно придется использовать моменты), задать область интереса (ROI) и в новых пределах обьекта поискать буквы. Далее ресет ROI и следующий битмап, если объектов на интересующей области не один. Немного оффтопика: чем мне не нравится SetImageROI, так это своей жуткой тормознутостью. На каждый ROI выделяется память, после копируется и удаляется. Бррр! Будто нельзя было сделать без копирования. Поэтому ради быстродействия мне приходится переписывать под себя кучу всего готового, что есть в OpenCV - лишь бы не использовать SetImageROI. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Art!P 0 Жалоба Опубликовано December 29, 2010 нормально все) я тут видео с рабочего стола обрабатываю, делал РОИ, потом отдельные участки РОИл ) всего 5 областей интересов ищу по 10-15 объектов, и в секунду кадров 20-30 выходило. Нормально в целом тянет. Правда нагрузка на проц не слабая оказалась. ядро до 30% (у мну Intel e4300 1.8Ghz) поднималось. Мне много не нужно оставил 2-3 к/с, нагрузка 4-5%. Ну а если производительность позволяет почему бы нет? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
niello 0 Жалоба Опубликовано January 7, 2011 ) Стоило уйти читать про преобразование Фурье, как тут ещё ответили. Уточнил задачу. Слова заранее неизвестны. Известно, что это либо числа в десятичной системе, иногда с запятой через 3 разряда, либо недлинные строки из произвольных символов алфавита. (русские и английские буквы, цифры, запятая). Плюс достаточно крупные картинки, которые от эталонов если вообще отличаются, то на несколько пикселей. К сожалению, не могу исключить масштабирование, но для начала и без него отлично пойдет. Если что, буду масштабировать элементы до размера эталона, если соотношение сторон совпадает. Шрифт везде один и тот же, размер шрифта тоже, но есть полужирные символы. Фоны либо очень монотонные, либо вообще одноцветные, хорошо контрастируют с объектами, никаких намеренных шумов и искажений, скорее даже наоборот. Вспомнил, что в ещё университете мы распознавали буквы и цифры с помощью нейросети. Но там был какой-то готовый пакет, возможно, самописный. Мне же нужно создать DLL, работающую без дополнительных внешних зависимостей (.NET не в счет). Имеет ли смысл смотреть нейросети? cvTemplateMatch, судя по названию, мог бы быть полезен, почитаю про него подробнее. Спасибо всем за советы. Думаю, такими темпами скоро разберусь. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
niello 0 Жалоба Опубликовано January 7, 2011 Надеюсь, здесь разрешено постить ссылки. Нашел почти что 1 в 1 то, что мне нужно. Для тех, у кого сходные задачи, вдруг поможет: http://nashruddin.com/searching-icons-in-a-screenshot-using-template-matching.html Плюс на том же сайте несколько хороших статеек про сопутствующие вещи. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах