Я застрял здесь на некоторое время.Я не могу понять, что я делаю неправильно, вычисляя векторы смещения вдоль оси x и оси y, используя метод Lucas Kanade .
Я реализовал это, как указано в приведенной выше ссылке на Википедию.Вот что я сделал:
import cv2
import numpy as np
img_a = cv2.imread("./images/1.png",0)
img_b = cv2.imread("./images/2.png",0)
# Calculate gradient along x and y axis
ix = cv2.Sobel(img_a, cv2.CV_64F, 1, 0, ksize = 3, scale = 1.0/3.0)
iy = cv2.Sobel(img_a, cv2.CV_64F, 0, 1, ksize = 3, scale = 1.0/3.0)
# Calculate temporal difference between the 2 images
it = img_b - img_a
ix = ix.flatten()
iy = iy.flatten()
it = -it.flatten()
A = np.vstack((ix, iy)).T
atai = np.linalg.inv(np.dot(A.T,A))
atb = np.dot(A.T, it)
v = np.dot(np.dot(np.linalg.inv(np.dot(A.T,A)),A.T),it)
print(v)
Этот код выполняется без ошибок, но печатает массив из 2 значений!Я ожидал, что матрица v
будет того же размера, что и изображение.Почему это происходит?Что я делаю неправильно?
PS: Я знаю, что есть методы, напрямую доступные в OpenCV, но я хочу написать этот простой алгоритм (как также дано в ссылке на Википедию, которой я поделился выше) сам.