Вычислить глобальное движение opencv 2.4.x Переполнение стека

Вот два изображения, одно из которых было сделано до того, как хирург совершил какое-то действие, а другое — после.

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

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

Разница: (После — До) + 128. (Добавление 128 — только для лучшего изображения)
введите описание изображения здесь

Как указывают белые стрелки, произошло глобальное движение, затрагивающее все объекты.

Итак, мне нужно оценить это, чтобы получить более ценную информацию о том, что происходит на сцене.

Я уже знал что OpenCV 3.0 Помогает в этом контексте, где реализованы некоторые методы, которые оценивают доминирующее движение между двумя изображениями или двумя списками точек. Но я пользуюсь пока OpenCV 2.4.x потому что у меня есть зависимости с библиотеками, уже установленными на моем компьютере, поэтому я ищу альтернативные решения или любой другой код, который делает то, что я хочу.

4

Решение

Вы ищете плотный оптический поток алгоритм:

Результат для

cv::calcOpticalFlowFarneback(img1, img2, flowField, 0.5, 3, 10, 5, 5, 1.1)

это следующее поле потока, где вы четко видите изменения: введите описание изображения здесь

Что касается глобального обнаружения движения:

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

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]