MATLAB函数的Python中的等价函数是什么interp2?
VqR = interp2(rR, fx(:), fy(:));
这是我试图移植到python的MATLAB代码
function res = imgMeshWarp( img, flowmap )
img = im2double(img);
rR = img(:, :, 1);
rG = img(:, :, 2);
rB = img(:, :, 3);
fx = flowmap(:, :, 1); fy = flowmap(:, :, 2);
VqR = interp2(rR, fx(:), fy(:));
VqG = interp2(rG, fx(:), fy(:));
VqB = interp2(rB, fx(:), fy(:));
res = cat(3, VqR, VqG, VqB);
res = reshape(res, size(flowmap, 1), size(flowmap, 2), []);
end
编辑1:我正在使用numpy。在matlab代码中,img是图像,流程图是变形网格。我正在尝试使用flowmap来扭曲图像。
编辑2:我正在添加从matlab翻译的python代码。
def image_warp(img, fm):
img = img[:,:, ::-1]
rR = img[:, :, 0]
rG = img[:, :, 1]
rB = img[:, :, 2]
fx = fm[:, :, 0]
fy = fm[:, :, 1]
VqR = scipy.ndimage.map_coordinates(rR, [fx.ravel(), fy.ravel()], order=1, mode='constant', cval=np.nan).reshape(rR.shape)
VqG = scipy.ndimage.map_coordinates(rG, [fx.ravel(), fy.ravel()], order=1, mode='constant', cval=np.nan).reshape(rG.shape)
VqB = scipy.ndimage.map_coordinates(rB, [fx.ravel(), fy.ravel()], order=1, mode='constant', cval=np.nan).reshape(rB.shape)
res = np.dstack((VqR, VqG, VqB))
res = np.reshape(res, (fm.shape[0], fm.shape[1], -1))
我的问题是根据随机变形的变形网格使图像变形。所以我做了一个UV贴图来纹理网格。flowmap就是这个映射。它以下列方式生成。我有一个稀疏的uv映射(例如,网格上的顶点[0 0]对应于图像的像素坐标[0 0],即左上角)。那么问题是如何找出网格中的所有其他像素。对于每个四边形(4个顶点),您可以通过求解齐次坐标中的最小二乘问题来计算从这些顶点到纹理图像的变换矩阵。然后,对于四边形内的每个像素,我们可以将其坐标与变换矩阵相乘,以找到纹理图像中的像素坐标。
scipy.interpolate.interp2d是你在找什么。使用此功能的设置略有不同。首先,您需要定义原始的x,y坐标。此外,根据具体情况flowmap,您可能需要在那里进行调整(尽管它看起来很适合)。对于您的一个颜色通道,可能会看起来像这样:
from scipy import interpolate
dy, dx = rR.shape
f = interpolate.interp2d(np.arange(dx), np.arange(dy), rR)
VqR = f(new_x, new_y)
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。