2013-03-11 2 views
3

У меня есть вектор двумерных точек, я пытаюсь использовать алгоритм с помощью метода для обнаружения нескольких режимов в данных, но я немного смущен сигнатурой метода.OpenCV, C++: Как использовать cv :: Meanshift

1) Могу ли я передать в свой вектор (если да, в какой форме), или мне нужно преобразовать в cv :: Mat (если так, как? Если у меня есть точки с отрицательными значениями).

2) Как извлечь несколько режимов, от того, что я могу видеть только функция возвращает Int

Благодаря

ответ

4

реализация OpenCV по среднему сдвигу для отслеживания одного объекта (как часть CamShift algorithm), и поэтому я не верю, что он был расширен для отслеживания нескольких объектов с использованием мультимодальных распределений. Это даст вам ограничительную рамку с центром в режиме вероятностного изображения (возвращаемого опорным проходом cv::Rect window).

Представлены ли ваши данные в виде смеси гауссова (или какого-либо другого симметричного распределения)? Если это возможно, вы можете использовать кластеризацию k-means, чтобы найти средства для вашего распределения (которое будет режимом для симметричного распределения), хотя выбор k будет проблематичным.

В качестве альтернативы взлома, который может включать отслеживание нескольких объектов (или поиск нескольких режимов), может включать повторное вызов этой функции, извлечение режима и затем обнуление этого раздела с обратной проекционной гистограммы.

Что касается формы данных, вход функции осуществляется через cv::Mat, поэтому вам придется конвертировать ваши данные. Однако вы утверждаете, что имеют отрицательные значения, и эта функция opencv ожидает гистограммы вероятности (которая обычно вы рассчитываете из изображения с использованием cv::calcBackProject()), поэтому я ожидаю, что он пожалуется, если вы попытаетесь передать ему cv::Mat, содержащий отрицательные значения.

Смежные вопросы