How to interpolate a cloud of points?

5 次查看(过去 30 天)
Hello all,
I have an set of 2D mean values from which I would like to compute the largest values. My 2D matrix is store so:
[rows, columns, count_there] = find(store == max(store));
By plotting rows vs columns I get the following picture:
I was wondering if there is any way to interpolate these data to get something like:
and to compute the length of it.

采纳的回答

Matt J
Matt J 2022-7-25
编辑:Matt J 2022-7-25
I've no way of testing this without your row/column data, but:
[rows, columns, count_there] = find(store == max(store));
[idx,edges]=discretize(columns,20);
edgectr=conv2(edges,[1,1]/2,'valid')';
G=findgroups(idx);
rowctr=splitapply(@median,rows,G);
colctr=splitapply(@(x) x(1),edgectr(idx),G);
scatter(rows,columns); hold on
plot(rowctr, colctr,'k-o','LineWidth',3); hold off
Length=sum(vecnorm(diff([rowctr(:),edgectr(:)]),2,2))
  11 个评论
Matt J
Matt J 2022-7-26
编辑:Matt J 2022-7-26
This File Exchange file seems to do a decent job,
load store
[rows, columns, count_there] = find(store == max(store));
[idx,edges]=discretize(columns,20);
edgectr=conv2(edges,[1,1]/2,'valid')';
G=findgroups(idx);
rowctr=splitapply(@median,rows,G);
colctr=splitapply(@(x) x(1),edgectr(idx),G);
scatter(rows,columns); hold on
plot(rowctr, colctr,'k-o','LineWidth',3);
verticals=[600,700,800];
for i=1:numel(verticals)
[x0,y0]=intersections(rowctr,colctr,verticals(i)*[1,1],[0,1000]);
plot(x0,y0,'x--r');
valuesum(i)=sum(y0);
end; hold off
valuesum
valuesum = 1×3
1.0e+03 * 1.0162 1.0008 1.0144
Francesco Pignatelli
Just tested and it is amazing! Thanks @Matt J, you helped me a lot! :)

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Matrix Indexing 的更多信息

产品


版本

R2018b

Community Treasure Hunt

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

Start Hunting!

Translated by