Нарисуйте эллипсы на людях, использующих максимизацию ожиданий с OpenCV
У меня есть несколько сомнений относительно того, как приблизиться к моей цели. У меня есть внешняя камера, которая записывает людей, и я хочу нарисовать эллипс на каждом человеке.
Прямо сейчас я делаю, чтобы получить характерные точки людей из кадра (я получаю их, используя маску, чтобы иметь только характерные точки на людях), установить алгоритм EM и обучить его с моими образцами (выделенные характерные точки), Количество кластеров в два раза больше количества людей на изображении (я получаю его перед запуском алгоритма EM, используя другие методы, такие как подсчет пикселей с помощью кодовой книги).
Мой вопрос
- (а) Нужно ли обучать его только для первого кадра, а затем использовать прогнозирование в следующих кадрах? или же,
- (б) использовать поезд с характерными точками в каждом кадре?
Прямо сейчас я делаю вариант б) (я не использую прогноз), потому что я действительно не знаю, как использовать прогноз.
Если я сделаю а), можете ли вы помочь мне с этим, а после этого как нарисовать эллипсы? Если я сделаю б), можете ли вы помочь мне нарисовать эллипс для каждого человека? Так как правильно знаю, я получил разные эллипсы для одного и того же человека, используя cov, mean и т. Д. (Один для руки, например).
Чего я хочу добиться, так это использования гауссовой модели: http://ieeexplore.ieee.org/xpl/login.jsp?tp=&arnumber=5580105&tag=1&url=http%3A%2F%2Fieeexplore.ieee.org%2Fxpls%2Fabs_all.jsp%3Farnumber%3D5580105%26tag%3D1
2 ответа
Если бы вы рисовали ограничивающие рамки, а не эллипсы, вы могли бы использовать функцию groupRectanlges для объединения различных ограничивающих рамок.
Но, что более важно - для обнаружения людей вы можете просто использовать детектор человека openCV (на основе HOG) или скрытый svm-детектор с моделью человека.
В любом случае вам следует выполнить б), так как в противном случае вы попытаетесь сопоставить ключевые точки с кластерами (людьми) в первом кадре. Через несколько секунд это не будет актуально.
Представляется разумным предположить, что от кадра к кадру изменение не будет слишком сложным, поэтому повторное использование результатов обучения в кадре N-1 является хорошим начальным фактором для обучения в кадре N, которое может быстрее сходиться, чем запуск EM с нуля. каждый кадр.
чтобы нарисовать эллипсы, вы можете использовать смесь гауссовского примера в привязках python:
https://github.com/opencv/opencv/blob/master/samples/python/gaussian_mix.py
Обратите внимание, что если вы используете диагональную ковариационную матрицу, ваши эллипсы будут выровнены "по прямой", а их собственные оси выровнены по осям X и Y рамки, вы можете пропустить вычисление угла эллипса