interpolate_through_H.py 文件源码

python
阅读 25 收藏 0 点赞 0 评论 0

项目:mrflow 作者: jswulff 项目源码 文件源码
def compute_derivs_through_H(I, H):
    """ Compute derivatives after additional homography step.

    For J(x,y) = I( H (x,y) ), compute dJ/dx and dJ/dy.
    """

    h,w = I.shape[:2]

    Hinv = np.linalg.inv(H)
    H_xp1_only = np.array([[1.0,0,-1.0],[0.0,1.0,0.0],[0.0,0.0,1.0]])
    H_xm1_only = np.array([[1.0,0,1.0],[0.0, 1.0, 0.0], [0.0, 0.0, 1.0]])
    H_yp1_only = np.array([[1.0, 0, 0], [0.0, 1.0, -1.0], [0.0, 0.0, 1.0]])
    H_ym1_only = np.array([[1.0, 0, 0], [0.0, 1.0, 1.0], [0.0, 0.0, 1.0]])

    H_only_array = [H_xp1_only, H_xm1_only, H_yp1_only, H_ym1_only]
    [H_xp1, H_xm1, H_yp1, H_ym1] = [Hinv.dot(H_).dot(H) for H_ in H_only_array]

    y,x = np.mgrid[:h,:w]
    xy_ar = np.c_[x.flatten(), y.flatten()].astype('float')

    # Compute displacements of finite difference samples.
    xy_ar_xp1 = ptransform(xy_ar, H_xp1)
    xy_ar_xm1 = ptransform(xy_ar, H_xm1)
    xy_ar_yp1 = ptransform(xy_ar, H_yp1)
    xy_ar_ym1 = ptransform(xy_ar, H_ym1)

    d_xp1 = np.linalg.norm(xy_ar - xy_ar_xp1, axis=1).reshape((h,w))
    d_xm1 = np.linalg.norm(xy_ar - xy_ar_xm1, axis=1).reshape((h,w))
    d_yp1 = np.linalg.norm(xy_ar - xy_ar_yp1, axis=1).reshape((h,w))
    d_ym1 = np.linalg.norm(xy_ar - xy_ar_ym1, axis=1).reshape((h,w))

    if I.ndim > 2:
        d_xp1 = d_xp1[:,:,np.newaxis]
        d_xm1 = d_xm1[:,:,np.newaxis]
        d_yp1 = d_yp1[:,:,np.newaxis]
        d_ym1 = d_ym1[:,:,np.newaxis]

    I_xp1 = cv2.warpPerspective(I, H_xp1, (w,h), borderMode=cv2.BORDER_REPLICATE)
    I_xm1 = cv2.warpPerspective(I, H_xm1, (w,h), borderMode=cv2.BORDER_REPLICATE)
    I_yp1 = cv2.warpPerspective(I, H_yp1, (w,h), borderMode=cv2.BORDER_REPLICATE)
    I_ym1 = cv2.warpPerspective(I, H_ym1, (w,h), borderMode=cv2.BORDER_REPLICATE)

    dx = 0.5 * ((I_xp1 - I) * d_xp1 + (I - I_xm1) * d_xm1)
    dy = 0.5 * ((I_yp1 - I) * d_yp1 + (I - I_ym1) * d_ym1)
    return dx,dy
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号