NumPy根据位移场移动图像

时间:2015-01-20 12:27:33

标签: python opencv numpy

我有通过某种算法计算的光流,我希望通过我的流程从另一个获得新图像

我使用以下程序

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抱歉我的英语不好

0 个答案:

没有答案