How to interpolate a cloud of points?
    7 views (last 30 days)
  
       Show older comments
    
    Francesco Pignatelli
 on 25 Jul 2022
  
    
    
    
    
    Commented: Francesco Pignatelli
 on 26 Jul 2022
            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.
0 Comments
Accepted Answer
  Matt J
      
      
 on 25 Jul 2022
        
      Edited: Matt J
      
      
 on 25 Jul 2022
  
      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 Comments
  Matt J
      
      
 on 26 Jul 2022
				
      Edited: Matt J
      
      
 on 26 Jul 2022
  
			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
More Answers (0)
See Also
Categories
				Find more on Multidimensional Arrays in Help Center and File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!





