Оценка 2D движения с использованием фильтрации Python, OpenCV и Kalman

У меня есть набор изображений, и я хотел бы рекурсивно предсказать, где в следующем изображении будет куча пикселей. Я использую Python, OpenCV, и считаю, что фильтрация Калмана может быть способом продвижения вперед, но я борюсь с реализацией. Для простоты приведенный ниже код открывается, а изображение и извлекает только один цветной канал, в этом случае красный.

До сих пор я использую оптический поток для определения движения между изображениями в X и Y для каждого пикселя. После каждой итерации я хотел бы использовать последние N итераций и с помощью движений X / Y, найденных каждый раз, вычислять скорость пикселя и предсказать, где он будет в следующем кадре. Группа пикселей, на которые я буду смотреть и предсказать, не указан, но не подходит для примера. Это будет просто массив Numpy (x, y).

Любая помощь будет принята с благодарностью. Упрощенный фрагмент кода ниже:

import numpy as np import cv2 from PIL import Image imageNames = ["image1.jpg", "image2.jpg", "image3.jpg", "image4.jpg", "image5.jpg"] for i in range(len(imageNames)): # Load images and extract just one colour channel (eg, red) image1 = Image.open(imageNames[i]) image2 = Image.open(imageNames[i+1]) image1R = np.asarray(image1[:,:,0]).astype(np.uint8) image2R = np.asarray(image2[:,:,0]).astype(np.uint8) # Get optical flow flow = cv2.calcOpticalFlowFarneback(image1R, image2R, 0.5, 1, 5, 15, 10, 5, 1) change_in_x = flow[:,:,0] change_in_y = flow[:,:,1] # Use previous flows to obtain velocity in x and y # For a subset of the image, predict where points will be in the next image # Use Kalman filtering? # Repeat recursively 

One Solution collect form web for “Оценка 2D движения с использованием фильтрации Python, OpenCV и Kalman”

Я не уверен, могу ли я объяснить это здесь; но у меня будет выстрел. Фильтр Калмана – это не что иное, как цикл, основанный на предсказании-измерении (коррекции).

У вас есть начальное состояние (положение и скорость) после двух изображений:

 X0 = [x0 v0] 

где v0 – поток между изображением1 и изображением2.

и x0 – позиция на изображении2.

Сделайте предположение (например, модель с постоянной скоростью). По предположению постоянной скорости вы прогнозируете, что этот объект переместится в X1 = A * X0, где A находится из уравнений с постоянной скоростью:

 x1 = x0 + v0*T v1 = v0 => X1 = [x1 v1] = [1 T ; 0 1] * [x0 v0] = [1 T ; 0 1] * X0 

T – время выборки (обычно используется как частота кадров, если используется с камерами). Вы должны знать разницу во времени ваших изображений здесь.

Позже вы исправите это предположение со следующим измерением (загрузите изображение3 здесь и получите v1 'из потока image2 и image3. Также возьмите x1' из image3).

 X1' = [x1' y1'] 

Для более простой версии KF найдите среднюю точку в качестве оценки, т. Е.

 ~X1 = (X1 + X1')/2. 

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

Найденный вами ~ X1 приведет вас к началу. Замените начальное состояние на ~ X1 и перейдите к той же процедуре.

Если вы проверите opencv doc , этот алгоритм может быть уже использован для вас.

Если вы не собираетесь использовать камеры и opencv методы; Я предлагаю вам использовать MATLAB только потому, что там легче манипулировать матрицами.

  • Изображение обложки Opencv Python с использованием массива Numpy
  • попытка заставить OpenCV 3.2.0 работать с virtualenv
  • Как удалить дефекты выпуклости на площади Судоку?
  • Открыть видео DivX / XVID в OpenCV Python
  • Обнаружение функции OpenCV Python: как обеспечить маску? (ПРОСЕЯТЬ)
  • Выберите ошибку тайм-аута на BeagleBone Black
  • Python opencv и многопроцессорность
  • Как получить оценку для cv2.CascadeClassifier.detectMultiScale ()?
  • запись надежного (определение цвета и размера) обнаружения круга с помощью opencv (на основе преобразования Hough или других функций)
  • неразрешенный импорт в образцах python opencv
  • Как визуализировать сопоставление дескрипторов с использованием opencv-модуля в python
  •  
    Interesting Posts for Van-Lav

    Как может базовый класс python определить, переопределил ли подкласс его методы?

    python 3.5 – django 1.10 – ошибка установки mysqlclient windows 7

    время ожидания приложения колбы с балансиром нагрузки амазонки

    Приложение Django перестает работать при развертывании в Apache (выполняется подпроцесс, но не выполняется)

    Определить комбинацию клавиш в Linux с помощью Python?

    Проблема с Django ImageField

    Как перезагрузить приложение Flask каждый раз при его доступе

    Python: форматирование даты, времени

    почему scikitlearn говорит, что оценка F1 плохо определена с FN больше 0?

    как иметь диалоговое окно каталога в Pyqt

    Python: заменить теги, но сохранить внутренний текст?

    Проблема с sklearn: обнаружены массивы с непоследовательным числом выборок при выполнении регрессии

    Как использовать модуль электронной почты Python 3.2 для отправки сообщений Unicode, закодированных в utf-8, с кавычками?

    Список Python как имя переменной

    Cython компилируется в exe, Windows

    Python - лучший язык программирования в мире.