взять центр масс или среднее значение для совпадающих элементов

У меня есть приложение для отслеживания, тогда у меня будет объект игрока, как показано на следующей фотографии. Мне нужно сделать следующее:

1- обнаруживать особенности из каждого кадра и сопоставлять их со следующим кадром, я использую SURF

2- вычислить среднюю точку по характерным точкам, которые я оценил на шаге 1

3- вычислить расстояние между средней точкой, оцененной на шаге 2, между каждыми двумя кадрами.

тогда я могу сохранить местоположение для совпадающих функций,

surfPoints.Location

но все же я не знаю, как лучше всего получить центр масс для этих точек или взять для них среднее значение?

Также как отфильтровать пропущенные совпавшие точки, я вижу, что есть функция estimateGeometricTransform, но эта функция удаляет много точек из совпавших! есть ли для этого хороший подход?

введите описание изображения здесь


person Community    schedule 03.06.2015    source источник
comment
Не совсем по теме, но иметь только 3+ балла от Харриса немного странно? Вы пробовали немного снизить порог для выбора точки?   -  person Jiby    schedule 06.06.2015


Ответы (2)


Итак, позвольте мне подвести итог:

У вас есть два массива ключевых точек и функция сопоставления, которая дает вам индексы совпадений в обоих списках («ключевая точка 7 в исходном списке ~ соответствует ключевой точке 12 во втором»)

Итак, теперь ваш вопрос состоит в том, чтобы оценить глобальный сдвиг от этих локальных смещений с учетом выбросов?

В этом случае (подходя к модели с учетом выбросов) вам действительно стоит изучить песню RANSAC (и вечно забавную песня RANSAC)

Хотя алгоритм отлично работает, он недетерминирован (так как он будет включать опробование моделей на основе случайных выборок и оценку количества выбросов).


Я позволю вам прочитать теорию RANSAC (простая статистика), теперь давайте посмотрим, как использовать RANSAC в вашем случае:

Таким образом, ваша проблема: учитывая список 2D-векторов, найдите лучший 2D-вектор, который минимизирует количество «выбросов»

Затем на этапе подгонки модели просто выбирается вектор из списка векторов.

Выбросы - это векторы, которые идут «БЕЗУМНО НЕПРАВИЛЬНО» по направлению или норме.

Кроме того, RANSAC, объясненный Mathworks

person Jiby    schedule 05.06.2015

Сложность здесь в том, что у вас нежесткое движение. estimateGeometricTransform отлично, когда движение можно описать аффинным или проективным преобразованием. Однако, поскольку вы отслеживаете сложный шарнирный объект, например человека, движение намного сложнее. Вот почему estimateGeometericTransform отклоняет множество совпадений как выбросы.

Вы можете попробовать несколько вещей. Один из них - попробовать использовать vision.PointTracker для отслеживания точек. Он использует алгоритм KLT (Канаде-Лукас-Томази).

В качестве альтернативы, если ваша камера неподвижна, вы можете попробовать использовать vision.ForegroundDetector, который реализует вычитание фона. Это даст вам двоичную маску, показывающую все движущиеся объекты.

person Dima    schedule 24.02.2016