我有通过某种算法计算的光流,我希望通过我的流程从另一个获得新图像
我使用以下程序
def translateBrute(img, u, v):
res = np.zeros_like(img)
for i in xrange(img.shape[0]):
for j in xrange(img.shape[1]):
res[i, j] = takePixelInterpolated(img, i + v[i, j], j + u[i, j])
return res
其中takePixelInterpolated通过插值计算点(i + v [i,j],j + u [i,j])的像素值
def takePixel(img, i, j):
i = i if i >= 0 else 0
j = j if j >= 0 else 0
i = i if i < img.shape[0] else img.shape[0] - 1
j = j if j < img.shape[1] else img.shape[1] - 1
return img[i, j]
def takePixelInterpolated (img, x, y):
i, j = int(x), int(y)
dx, dy = x - i, y - j
p1 = takePixel(img, i, j)
p2 = takePixel(img, i+1, j)
p3 = takePixel(img, i, j+1)
p4 = takePixel(img, i+1, j+1)
return (p1 * (1 - dx) * (1 - dy) +
p2 * (dx) * (1 - dy) +
p3 * (1 - dx) * ( dy) +
p4 * (dx) * ( dy))
img是一些图像(形状为[高度,宽度,1或3]的numpy数组) u和v是浮点矩阵,其形状[高度,宽度]包含位移场的组件
但是这个程序性能不好。有没有办法通过NumPy(或opencv或smth)内置函数来实现?
PS抱歉我的英语不好