matlab interp2 插值,在Matlab中使用interp2对特定点进行立方插值(Cubic interpolation for specific points using interp2 ...

2023-05-16

在Matlab中使用interp2对特定点进行立方插值(Cubic interpolation for specific points using interp2 in Matlab)

鉴于以下示例是否有一种方法可以实现双三次插值而不会生成整个精细间隔的网格?:

years = [5,10,20,25,40];

service = 1:3;

wage = [50 99 787.685

779 795 850

803 779 388

886 753 486

849 780 598];

w = interp2(service,years,wage,1.5,37.5,'cubic')

警告:“立方”方法要求网格具有均匀的间距。 将方法从“立方体”切换为“样条”,因为不满足此条件。

我理解警告的原因。 因此希望通过指定特定点来找到解决方案,而不必生成整个等间距的表面(可用数据不等间隔)。 不一定必须是interp2。 我将不得不为数百个表面和数百个查询点运行它,因此返回“w”时需要非常快。 有任何想法吗?

Given the following example is there a way to achieve bicubic interpolation without generating an entire finely-spaced grid?:

years = [5,10,20,25,40];

service = 1:3;

wage = [50 99 787.685

779 795 850

803 779 388

886 753 486

849 780 598];

w = interp2(service,years,wage,1.5,37.5,'cubic')

Warning: The 'cubic' method requires the grid to have a uniform spacing. Switching the method from 'cubic' to 'spline' because this condition is not met.

I understand the reason for the warning. So wish to find a solution by specifying particular points without having to generate an entire equally spaced surface (the data available is not equally spaced). Does not necessarily have to be interp2. I will have to run this for hundreds of surfaces and hundreds of query points so would need to be quite fast at returning "w". Any ideas?

原文:https://stackoverflow.com/questions/43758184

更新时间:2020-02-22 07:03

最满意答案

如果你坚持使用'cubic'插值方法,你可以使用griddata指定用于插入散乱数据,即未在均匀间隔网格上定义的数据:

years = [5,10,20,25,40];

service = 1:3;

wage = [50 99 787.685

779 795 850

803 779 388

886 753 486

849 780 598];

w = griddata(service,years,wage,1.5,37.5,'cubic')

If you insist on using 'cubic' interpolation method you can use griddata which is designated for interpolating scattered data, i.e. data which is not defined on uniform spaced grid:

years = [5,10,20,25,40];

service = 1:3;

wage = [50 99 787.685

779 795 850

803 779 388

886 753 486

849 780 598];

w = griddata(service,years,wage,1.5,37.5,'cubic')

2017-05-03

相关问答

ZI=interp2(X,Y,Z,XI,YI,method), 其中X和Y为由自变量组成的数组,X与Y尺寸相同,Z为2维函数数组。 XI和YI为插值点的自变量数组,method为插值方法选项,提供了4种方法;‘nearest’、‘linear’、‘spline’、‘cubic’等。 二维插值主要应用于图形图像处理和三维曲线拟合等领域。

imresize从interp2获取不同的输入。 使用interp2您无法指定一个简单的乘法因子,您希望通过imresize的方式缩放图像。 interp2执行2D插值,而不是缩放输入,您需要为其提供要插入的像素之间的点的xy坐标。 imresize内部使用插值,但它事先进行了大量的其他处理和计算。 imresize还允许你缩小你的图像,这只是使用interp2而不是那么简单。 在内部,他们将使用相同的数学, imresize只是让你更容易调整图像大小的任务。 imresize takes dif

...

大范围的问题是你正在查看文档,但你并没有试图理解它。 如果您在模块scipy.interpolate使用特定函数interp2d ,那么请查看函数的文档 ,如@pv在评论中也建议的那样 。 你在这个地方抛出争论的事实清楚地表明你正在尝试使用基于猜测的函数。 它不起作用:一个函数是用给定的语法实现的,它只会像那样工作。 那么看看函数的签名: class scipy.interpolate.interp2d(x,y,z,kind ='linear',copy = True,bounds_error =

...

Z是3D矩阵, interp2仅适用于2D矩阵。 所以你必须分别对每种颜色进行插值,并重新组合它们: %Interpolation

Zir = interp2(X, Y, Z(:,:,1), Xi, Yi);

Zig = interp2(X, Y, Z(:,:,2), Xi, Yi);

Zib = interp2(X, Y, Z(:,:,3), Xi, Yi);

Zi = cat(3, Zir, Zig, Zib);

Z is a 3D matrix and interp2 only works

...

如果您还没有找到答案,这就是您应该如何使用它。 remap(f,f2,x2,y2,CV_INTER_CUBIC);

函数重映射假设您正在精确处理定义了f的网格,因此无需传递x,y单调坐标。 我几乎可以肯定矩阵不能是CV_64F(双),所以考虑到这一点。 In case you didn't find your answer yet, this is how you should use it. remap(f,f2,x2,y2,CV_INTER_CUBIC);

The function rem

...

结果的差异与c ++和MATLAB之间的索引差异有关,分别是0和1。 interp2(U,X,Y,'linear',NaN)与interp2(1:3,1:3,U,X,Y,'linear',NaN)将其更改为interp2(0:2,0:2,U,X,Y,'linear',NaN)您将获得与OpenCV相同的结果。 如果您希望重remap结果与interp2结果相同,您可以将xmesh和ymesh向后移一步并搜索负位置以生成nan值。 #include

//...

//...

for (

...

感谢木片的答案,我找到了他的inpaint_nans ,解决方案确实很简单: C = nan(size(A)+size(B));

C(1:2:end, 1:2:end) = A;

C(2:2:end, 2:2:end) = B;

C = inpaint_nans(C);

Thanks to woodchips' answer here I found his inpaint_nans, the solution is indeed simple: C = nan(size(A)+size(B))

...

查看文档,您应该注意以下几点: 如果x和y表示常规网格,请考虑使用RectBivariateSpline 。 x和y应该是1D向量,与Matlab不同,它们与Matlab的x和y匹配,而不与xi和yi匹配。 那些来晚了。 SciPy将返回一个稍后用于插值的函数。 Matlab立即返回插值向量。 你已经在Matlab中使用过它,但隐含地假设了这一点 [X, Y] = meshgrid(1:size(I,1), 1:size(I,2))

gt= interp2(X, Y, I(:,:,i)',xi,y

...

如果你坚持使用'cubic'插值方法,你可以使用griddata指定用于插入散乱数据,即未在均匀间隔网格上定义的数据: years = [5,10,20,25,40];

service = 1:3;

wage = [50 99 787.685

779 795 850

803 779 388

886 753 486

849 780 598];

w = griddata(service,years,wage,1.5,37.5,'cubic')

If you insis

...

答案很简单,只需反转矩阵,interp2用于imresize The answer is simple, just reverse the matrix, interp2 is used for imresize

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

matlab interp2 插值,在Matlab中使用interp2对特定点进行立方插值(Cubic interpolation for specific points using interp2 ... 的相关文章

随机推荐