Remove centroid locations of objects that are too close
    15 views (last 30 days)
  
       Show older comments
    
Hi, I have a list of centroid locations of spots in an image (xf, yf). The spots are randomly distributed.  I want to remove the centroid locations that are too close to each other, or say within a distance of d.  I've got to the following but not sure what to do next.  Also is there a better way to do this ratrher than use loops?
%using a loop
M=[];
for j=1:length(xf)
    for i=1:length(xf)
        dx=xf(j)-xf(i);
        dy=yf(j)-yf(i);
        dr=sqrt(power(dx,2)+power(dy,2));
        M(j,1)=xf(j);
        M(j,2)=yf(j);
        M(j,3)=xf(i);
        M(j,4)=yf(i);
        M(j,5)=dr;    
    end    
end
2 Comments
  Matt J
      
      
 on 9 Aug 2022
				If two spots are less than d apart should both be removed? If not, by what criterion do you decide which spot remains?
  Image Analyst
      
      
 on 9 Aug 2022
				Accepted Answer
More Answers (1)
  yanqi liu
      
 on 9 Aug 2022
        yes,sir,may be use pdist2, such as
xf = rand(1, 10);
yf = rand(1, 10);
%using a loop
M=[];
for j=1:length(xf)
    for i=1:length(xf)
        dx=xf(j)-xf(i);
        dy=yf(j)-yf(i);
        dr=sqrt(power(dx,2)+power(dy,2));
        M(end+1,1)=xf(j);
        M(end,2)=yf(j);
        M(end,3)=xf(i);
        M(end,4)=yf(i);
        M(end,5)=dr;
    end
end
% second method
A=[xf(:) yf(:)];
B=pdist2(A,A);
C=B';
C=C(:);
isequal(M(:,end),C)
0 Comments
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!



