【发布时间】:2019-07-17 23:50:00
【问题描述】:
我已经被困在这里一段时间了。我不明白我在使用Lucas Kanade 方法计算沿 x 轴和 y 轴的位移向量时做错了什么。
我按照上面的维基百科链接实现了它。这是我所做的:
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 有直接可用的方法,但我想自己编写这个简单的算法(也可以在上面共享的 Wikipedia 链接中给出)。
【问题讨论】:
-
因为只有两个未知数?也许您必须为每个像素及其邻域建立这样一个方程组?
-
@CrisLuengo 你能举个小例子吗?
标签: python numpy opencv computer-vision