cv::remap (in opencv) and interp2 (matlab)

4
我正在寻找一个与interp2相等的OpenCV函数,我知道cv::remap是实现此目的的好方法。
然而,如果我有以下内容:
f2 = interp2(x, y, f, x2, y2, 'bicubic');
其中x,y,x2和y2都是(比如说m x n)矩阵,我不确定如何使用cv :: remap进行处理。
我该怎样使用remap?我知道我必须将其转换为映射...但是我无法做到这一点。
是否还有其他方法可以像Matlab函数那样使用interp2?
2个回答

2
如果您仍未找到答案,这是您应该使用它的方法。
remap(f,f2,x2,y2,CV_INTER_CUBIC);

函数remap假设您正在完全定义f的网格上工作,因此无需传递x,y单调坐标。我几乎可以确定矩阵不能是CV_64F(双精度),所以请考虑这一点。

我无法得到与Matlab给我的相同结果,我仍在努力弄清楚(我正在进行一个将Matlab代码转换为OpenCV代码的项目,我需要在OpenCV中获得相同的结果以进行下一步操作)。 - Saeed Masoomi

0

interp2是插值器 - 如果您获得了某些网格的x、y和f值,则可以为x2和y2提供值f2。

remap - 通过根据变形映射移动x和y坐标来包装网格。

如果要插值规则网格,则使用缩放(例如cv::resize)。

如果数据是分散的,则可以使用Delaunay三角剖分,然后作为一种变体使用重心插值或反距离加权


1
我在Matlab中使用了interp2函数,根据旋转和平移矩阵将一幅图像扭曲成另一幅图像。现在,我想在OpenCV中做同样的事情。 - Alice
那么也许您需要使用http://docs.opencv.org/modules/imgproc/doc/geometric_transformations.html#warpaffine warpAffine或warpPerspective函数? - Andrey Smorodov
我的“warp”和“warpAffine”的区别在于,“warpAffine”会拉伸图像,而我的“warp”会缩小它,给定一个矩阵A(旋转),例如[4,0; 0,4]。 - Alice
也许我没有完全理解你的问题(没有图片很难),但是你尝试使用可选标志WARP_INVERSE_MAP了吗?这意味着M是反向变换。 - Andrey Smorodov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接