我有一组图像,并且想递归地预测一堆像素在下一张图像中的位置。我正在使用 Python、OpenCV,并相信卡尔曼滤波可能是前进的方向,但在实现上却在苦苦挣扎。为简单起见,下面的代码打开并仅提取一个颜色通道,在本例中为红色通道。
到目前为止,我正在使用光流来确定每个像素的 X 和 Y 图像之间的运动。每次迭代后,我想使用最后 N 次迭代,并通过使用每次找到的 X/Y 运动,计算像素的速度,并预测它将在下一帧中结束的位置。我将查看和预测的像素组未指定,但与示例无关。它只是一个 (x,y) 值的 Numpy 数组。
任何帮助将不胜感激。下面的简化代码片段:
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 (e.g., 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