필터 지우기
필터 지우기

how to interpolate to irregular mesh data

조회 수: 28 (최근 30일)
Jamal
Jamal 2017년 12월 3일
댓글: Image Analyst 2020년 4월 28일
I want to interpolate 2-D scattered data (24 points) which randomly scattered data on a non-uniform grid of query points. The non-uniform data are inside of a trapezoid. X, Y, and Z are vectors containing scattered (no uniform) sample points and data. (The green points are the scattered data and the red points are the non-uniform grid data inside of trapezoid (Attachment Image)). I defined a regular grid (160 mm *160 mm with space of 10 mm) and then separates the points which are inside of trapezoid. I tried to use "TriScatteredInterp"; however I received this error:
"Z must be a matrix, not a scalar or vector."
I want to know how interpolate the scattered data over the non- uniform grid ( for the trapezoid region)
% X coordinate of scatered data
X=[30 60 75 90 30 60 90 105 15 60 90 120 15 60 105 135 15 75 105 135 15 60 105 150];
% Y coordinate of scatered data
Y=[0 0 0 0 40 40 40 40 70 70 70 70 100 100 100 100 130 130 130 130 160 160 160 160];
% The Z value of scatered data
Z=[855.2 1172.1 1082.3 1078.5 795.9 1638.7 1610.8 1526.8 973.8 2778.9 2231.7 1789.9 1855.3 3852.8 2775.1 1903.7 1519.2 3002.0 2704.5 2226.1 1478.3 3186.9 2263.3 1982.0];
% meshgrid data
[xq,yq]= meshgrid(0:10:160,0:10:160);
% X coordinale of four vertices (trapezoid)
xv=[10 0 160 115 10];
% Y coordinate of of four vertices (trapezoid)
yv=[0 160 160 0 0];
% Supports non-convex and self-intersecting polygons.
in=inpolygon(xq,yq,xv,yv)
% Plot the trapezoid and the data inside of it
plot(xv,yv)
hold on
plot(X, Y,'ro','MarkerSize',10,...
'MarkerEdgeColor','r',...
'MarkerFaceColor',[0,1,0])
ylim([-5 190])
xlim([-5 190])
axis equal
hold on
plot(xq(in),yq(in),'r+')
hold on
plot(xq(~in),yq(~in),'bo')
hold off
% The X coordinates of the grid data inside of trapezoid
XGrid_in=xq(in);
% The Y coordinates of the grid data inside of trapezoid
YGrid_in=yq(in);
%-------------------------------------------------------------
%%Interpolation Method I
%-------------------------------------------------------------
% scattered data interpolant
% transpose the row matrix to vector on
X=X.';
Y=Y.';
Z=Z.';
F = TriScatteredInterp(X, Y, Z,'linear');
VGrid_in = F(XGrid_in,YGrid_in);
%VGrid_in=reshape(VGrid_in,[2898/3,3]);
VGrid_in=squeeze(VGrid_in);
mesh(XGrid_in,YGrid_in,VGrid_in);
colormap jet
shading interp
% hidden off
hold on; plot3(X,Y,Z,'ro'); hold off
s=surf(XGrid_in,YGrid_in,VGrid_in);
s.EdgeColor = 'none';
[C,h] =contourf(xq,yq,vq);
colormap(jet)
colorbar
w = h.LineColor;
h.LineColor = 'none';
set(gcf,'units','centimeters','position',[0 0 9 12])
c=colorbar;
xlim([0 160]);
xlabel('X (mm)')
ylim([0 160]);
ylabel('Y (mm)')

채택된 답변

Walter Roberson
Walter Roberson 2017년 12월 4일
You sampled F at a list of (X,Y) points, the column vectors XGrid_in, and YGrid_in, which are not grids (the name is confusing.) You get out the Z at those points. You cannot mesh() a list of scattered points.
To construct a mesh from a list of scattered points, you need to do a triangulation. Or you need to take advantage of any information you know about the connectivity of the points.
I would suggest to you that you should just go ahead and apply F to the full mesh (xq, yq), and then that you set any points that should not have been considered to nan.
  댓글 수: 3
Yue Liu
Yue Liu 2020년 4월 28일
Hello, I wonder what should I put for the v while applying F to the full mesh(xq,yq) as the Z provided by Jamal is only for the 24 scatterred points
Image Analyst
Image Analyst 2020년 4월 28일
See my attached demo for scatteredInterpolant.

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Interpolation에 대해 자세히 알아보기

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by