LINUX.ORG.RU

Нужен алгоритм для поиска объекта по растровому эталонному изображению


0

1

Решаю сейчас задачу, которую можно свести к следующей.
Есть однотонное (grayscaled) растровое изображение,
и есть эталонное изображение объекта.
Надо найти этот объект на «большом» изображении при условии, что:
1) заданы примерные координаты объекта, он располагается в пределах +/- 60 пикселов от этой точки;
2) объект может быть повёрнут под любым углом;
3) изображение объекта не является негативом , вариации яркости (отличие от эталона) не сильные, есть некоторые геометрические искажения, но также не сильные.

P.S. Решение задачи брутфорсом не допускается, так как
преобразование близко к линейному, но им не является.

Какие алгоритмы (не запатентованные) подскажете?

★★★★★

Последнее исправление: pacify (всего исправлений: 1)

Ты таки шоли спрашиваешь как тебе написать прошивку для головки наведения? ;)

Вобще глянь в сторону нейросетей, они на это часто используются.

aleks13
()
Ответ на: комментарий от aleks13

Хм-хм. Хорошо , попробую посмотреть нейросети - их я ещё не
изучал ни разу. Даже книжка у меня по ним есть бумажная ...

Нет, это не аэрофотосъемка. Это задача OCR.

pacify ★★★★★
() автор топика
Ответ на: комментарий от pacify

Насколько знаю OCR как раз нейросетями и делают. Только там ч/б изображения, а не монохром т.к. на них проще нейросети делать, но и точность страдает.

aleks13
()

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

prischeyadro ★★★☆☆
()

Сложная это задача. Если бы без вращения и масштабирования, то достаточно было бы скоррелировать изображение с объектом.

Если только с вращением — выбираем в объекте и в области изображения, где он находится, базовые точки и ищем наилучшее совпадение (я такой алгоритм реализовывал).

Если только с масштабированием — берем пару наиболее ярких базовых точек, расстояние между ними считаем базисом и проверяем на остальных.

В общем же случае нужно смотреть, что за объект. Скажем, если на нем есть четкие линии или окружности, можно попытаться привлечь Хафа. Если его можно выразить аналитической функцией — еще лучше.

Eddy_Em ☆☆☆☆☆
()

если нужный объект не масштабирован, то можно советовать пробежать по нужному региону скользящим окном, а внутри окна посчитать какой-нибудь LPB / HOG (http://en.wikipedia.org/wiki/Local_binary_patterns) ну и где гистограммы отличаются меньше всего - там наверно и есть ваш объект. Насчёт патентованности - хз ;)

nikitos ★★★
()

для поиска объекта по растровому эталонному изображению

Возможны разные варианты:
1. Ярославский Л.П. Цифровая обработка сигналов в оптике и голографии: введение в цифровую оптику.
Глава 8.2. Локализация точно известного объекта при пространственно-однородном критерии оптимальности.

2. Использовать инвариант группы аффинных преобразований. Например, преобразование Фурье-Меллина, обладающее инвариантностью к масштабированию, вращению и сдвигу объекта. Далее, обычный корреляционный анализ.

P.S. Для повышения надёжности локализации полезно выполнить разбеливание изображения (8.4. Ярославский).

quickquest ★★★★★
()

на хабре был цикл статей про распознавание автомобильных номеров.
кажется, прототип был на матлабе

aol ★★★★★
()
Ответ на: комментарий от aol

Это вообще старье из Гонсалеса&Вудса десятилетней давности.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от quickquest

Спасибо за толчок к развитию. Буду думать. :)

pacify ★★★★★
() автор топика
Ответ на: комментарий от power

И что? Заменяем пороговую функцию в нейроне, на более гладкую и всего-то делов.

aleks13
()

Берешь свое изображение, или какую-то его свертку(например, градиент). И потом берешь, да решаешь задачу image registration. В двух словах: фиксируешь класс трансформаций(только смещение, или поворот, или вообще афинные), вводишь метрику(mean squares в твоем случае), херачишь какой-нибудь метод оптимизации по параметрам введеной трансформации, он должен быть достаточно робастным тк, вообще говоря, твой функционал не будет выпуклым. Короче, man «image registration» в новом матлабе в CV toolbox есть даже функции для 2d регистрации.

Но, вообще, мне кажется, что это излишне мложно для вашей задачи. Если вам надо только сдвиг и вращение, то это rigid transform. +По каким-нибудь трешолдам ищете края и применяете вот это https://en.wikipedia.org/wiki/Orthogonal_Procrustes_problem для чего есть closed form solution

maggotroot
()
Ответ на: комментарий от maggotroot

Ах, да. Куча этих методов для 2 3 d одно- и много- модальных задач есть в таком монстре, который называется ITK. Если у вас не получится решить задачу более простыми методами, то я готов помочь чем могу в этой области. ЛИбо тут, либо в ЛС.

maggotroot
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.