Matlab从查询表内插值

时间:2019-01-10 14:39:50

标签: matlab interpolation lookup-tables

我正在编写一个工具,该工具将构建一种包含测量样本的查找表(两个),然后我要给自己一个度量,在查找表中检查最接近的一个,然后将提取的结果退还给我值。我希望得到的结果与手工传递给工具的值相同。 假设我将坐标系X,Y定义为网格后,建立了两个包含两个测量值的查询表矩阵。

x = rand(101); y = rand(101);
[X,Y] = meshgrid(x,y);

enter image description here

每个点(Xi,Yi)对应一对测量值(Ai,Bi)

A = rand(101); B = rand(101);

通过这种方式,我得到了一些可以映射我的测量值(对于A和B)

enter image description here

现在,我想给出一个手动重新计算测量值的方向,将x = rand(1)y = rand(1)对应于a,b对,它们不必等于这样的地图点

enter image description here

将这些值与A,B中的值进行比较并打印。从理论上讲,如果对a,bA,B的特定元素完全对应,则意味着我可以提取地图的对应点。

我以这种方式做类似的事情

row = (size(A,1)+1)/2;
col = (size(B,2)+1)/2;

[~,m] = min(abs(A(row,:)-a));
[~,n] = min(abs(B(:,col)-b));

x_estimated = X(n,m);
y_estimated = Y(n,m);

尝试提取地图上与我手动放置的一组值最接近的点,从而 enter image description here

如您所见,此代码的实际点和提取点之间存在采样错误。我需要的是,激发点(浅绿色)等于“手动”计算的点(粉红色)。

因此,我认为我需要一种加权提取,而不需要检查最接近的一组值。

在Matlab(基本上是插值)中是否存在类似的东西会自动执行?如果没有,您能建议我一个简单的方法来提取这些值吗?

编辑: 按照建议,我尝试了interp2这样的

x_estimation = interp2(A,B,X,a,b);
y_estimation = interp2(A,B,Y,a,b);

但是给我“不是有效的MESHGRID”的编译错误,因此我尝试使用scatteredInterpolant这样

F_x = scatteredInterpolant(X(:),Y(:),A);
x_estimation = F_x(a,b);

但是给我一个完全错误的值

EDIT2 因此,我试图使自己对我的问题更加清楚。 我将XY定义为我的坐标系,以构建一个网格,其中我计算的所有内容都在该网格内。

然后,我首先以某种方式AB进行完整的测量计算,从而得出两个方向之一的测量结果。因此,我需要他们两个人都有两个方向的信息。

到目前为止,我已经在这两个矩阵中进行了抽样测量。然后,我手动给出一个进行测量的固定位置(该位置仍在我的网格中,但在任意位置),重新计算测量值,获得两个标量ab并从矩阵{{ 1}}和A中最接近B对的元素。结果应该与我在例程开始时手工给出的结果相同,并且误差很小(尽可能小,希望为0)

0 个答案:

没有答案