我正在用Python语言重写Matlab的代码。在Matlab代码中,我有这样的函数:gt= interp2(I(:,:,i)',xi,yi,'cubic')';
,其中I
是RGB图像,xi
和yi
是定义x和y坐标的形状相同的2D矩阵。在我为边界外的值设置gt(isnan(gt))=0;
之后。该函数在Matlab上运行良好。
我用Python编写了以下代码:gt=interpolate.interp2d(x,y,img.T,kind='cubic',fill_value=0)
,其中x
和y
与Matlab中的xi
和yi
相同,img是一幅灰度图像。无论如何,我得到了以下例外:"Invalid length for input z for non rectangular grid") ValueError: Invalid length for input z for non rectangular grid"
。怎么啦?非常感谢。
发布于 2014-05-09 14:59:03
在查看文档时,您应该注意到以下几点:
x
和y
应该是一维向量,与Matlab不同,它们与Matlab的x
、y
和匹配,而不是与xi
和yi
匹配。那些晚些时候才来。您已经在Matlab中使用了它,但隐含地假设
[X, Y] = meshgrid(1:size(I,1), 1:size(I,2))
gt= interp2(X, Y, I(:,:,i)',xi,yi,'cubic')';
实际上,需要传递给X
和Y
的是interpolation.interp2d,而不是xi
和yi
,它们稍后才会出现。
在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)
https://stackoverflow.com/questions/23567252
复制相似问题