【问题标题】:Problems porting Matlab interp2 to SciPy interp2d将 Matlab interp2 移植到 SciPy interp2d 的问题
【发布时间】:2014-06-27 08:23:13
【问题描述】:

我正在用 Python 语言重写 Matlab 的代码。 在 Matlab 代码中,我有这个函数:gt= interp2(I(:,:,i)',xi,yi,'cubic')';,其中I 是 RGB 图像,xiyi 是具有相同形状定义 x 和 y 坐标的 2D 矩阵。 在我为边界外的值设置gt(isnan(gt))=0; 之后。 该函数在Matlab上运行完美。

在Python中我写了如下代码:gt=interpolate.interp2d(x,y,img.T,kind='cubic',fill_value=0),其中xy与Matlab中的xiyi相同,img是灰度图像。 无论如何,我得到以下异常:"Invalid length for input z for non rectangular grid") ValueError: Invalid length for input z for non rectangular grid"。 怎么了? 非常感谢。

【问题讨论】:

  • 我不知道您的代码有什么问题,但过去我将interp2 移植到scipy 为interpolate.RectBivariateSpline 而不是interpolate.interp2d。但我发现,与其将XY 作为meshgrid 的矩阵输出,它只需要单行单列向量。

标签: python matlab numpy scipy interpolation


【解决方案1】:

查看documentation 你应该注意几点:

  1. 如果 x 和 y 表示规则网格,请考虑使用 RectBivariateSpline

  2. xy 应该是与 Matlab 不同的一维向量,它们与 Matlab 的 xyNOTxiyi 匹配。这些会在以后出现。

  3. SciPy 将返回一个函数,用于稍后进行插值。 Matlab 立即重新调整插值向量。

你已经在 Matlab 中使用过它,但隐含地假设

[X, Y] = meshgrid(1:size(I,1), 1:size(I,2))
gt= interp2(X, Y, I(:,:,i)',xi,yi,'cubic')';

所以实际上需要传递给 interpolation.interp2d 的 XY 而不是 xiyi,它们稍后会出现。

在 SciPy 中,您实际上可以跳过 meshgrid 步骤,只使用正常范围,但它也会输出一个函数供以后使用,而不是当场执行插值(注意我的 x 定义中可能存在小错误还有y,我对arange不太熟悉):

x = arange(1, img.shape[0]+1)
y = arange(1, img.shape[1]+1)
f = interpolation.interp2d(x, y, img.T)

然后当你想做插值时:

gt = f(xi, yi)

【讨论】:

  • 如何将 interp2 函数用于闭合轮廓?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-03-27
  • 1970-01-01
  • 2017-12-21
  • 1970-01-01
  • 1970-01-01
  • 2011-10-10
  • 2011-08-31
相关资源
最近更新 更多