klenov 0 Жалоба Опубликовано September 20, 2012 Наверное вопрос совсем наивный, но хочется понять в каком направлении двигаться. Мне нужно определять координаты (x,y) небольшого предмета относительно плоскости стены. Собираюсь для этого opencv использовать, хотя опыта нет. Как лучше это сделать? Какой использовать алгоритм? Я разместил на предмете светодиод и попробовал CamShift'ом его отслеживать, работает быстро, но иногда ошибается. Светодиод из-за того, что возможно понадобиться отслеживать в условиях плохой освещенности. Предмет будет двигаться относительно стены плавно и медленно. Буду рад любым рекомендациям. К примеру, лучше использовать диод или диодную ленту, имеет ли значение цвет свечения? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
ArtemBogatov 2 Жалоба Опубликовано September 21, 2012 Наверное вопрос совсем наивный, но хочется понять в каком направлении двигаться. Мне нужно определять координаты (x,y) небольшого предмета относительно плоскости стены. Собираюсь для этого opencv использовать, хотя опыта нет. Как лучше это сделать? Какой использовать алгоритм? Я разместил на предмете светодиод и попробовал CamShift'ом его отслеживать, работает быстро, но иногда ошибается. Светодиод из-за того, что возможно понадобиться отслеживать в условиях плохой освещенности. Предмет будет двигаться относительно стены плавно и медленно. Буду рад любым рекомендациям. К примеру, лучше использовать диод или диодную ленту, имеет ли значение цвет свечения? Для алгоритма CamShift цвет имеет принципиальное значение. Если на фоне есть объекты с похожей гистограммой, алгоритм может ошибаться. Если объект, за которым Вы хотите следить имеет особенности (углы, выраженные границы, перепады яркости), то Вам скорее всего поможет детектор ключевых точек (GoodFeatureToTrack, FastFeatureDetector и т.п) и разреженный оптический поток Лукаса-Канаде (PyrOpticalFlowLK). Пример реализации можно найти в папке opencv\samples\cpp\lkdemo.cpp. Судя по тому, что объект движется медленно и плавно, Вам, возможно, стоит ещё посмотреть в сторону шаблонов движения. Пример реализации в opencv\samples\c\motempl.c. Где-то на форуме Smorodov выкладывал статью на русском с теорией по шаблонам движения. 2 Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано September 21, 2012 Еще здесь неплохо бы применить какой нибудь фильтр по координатам. То есть если вы знаете, что скорость объекта не может быть выше известного значения, то зачем искать по всему изображению? Нужно искать объект в некоторой окрестности его текущего положения. Наиболее вероятным положением в следующий момент времени будет его текущее положение плюс его текущая скорость умноженная на время. Лучше всего этой идеологии соответствуют фильтр частиц (Particle filter),фильтр Кальмана, MeanShift и CamShift. MeanShift и CamShift не учитывают скорость, это просто алгоритмы поиска ближайшего локального максимума функции распределения вероятности (ведь похожесть цвета это только функция распределения вероятности нахождения объекта). 1 Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах