首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将Matlab interp2移植到SciPy interp2d中的问题

将Matlab interp2移植到SciPy interp2d中的问题
EN

Stack Overflow用户
提问于 2014-05-09 14:33:58
回答 1查看 5.8K关注 0票数 1

我正在用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"。怎么啦?非常感谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-05-09 14:59:03

在查看文档时,您应该注意到以下几点:

  1. 如果x和y表示规则网格,请考虑使用RectBivariateSpline.
  2. xy应该是一维向量,与Matlab不同,它们与Matlab的xy匹配,而不是xiyi匹配。那些晚些时候才来。
  3. SciPy将返回一个函数,用于以后的插值。Matlab立即对插值向量进行复述。

您已经在Matlab中使用了它,但隐含地假设

代码语言:javascript
运行
复制
[X, Y] = meshgrid(1:size(I,1), 1:size(I,2))
gt= interp2(X, Y, I(:,:,i)',xi,yi,'cubic')';

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

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

代码语言:javascript
运行
复制
x = arange(1, img.shape[0]+1)
y = arange(1, img.shape[1]+1)
f = interpolation.interp2d(x, y, img.T)

然后当你想做插值时:

代码语言:javascript
运行
复制
gt = f(xi, yi)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23567252

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档