How do you find a centroid of an image?
    29 views (last 30 days)
  
       Show older comments
    
I am trying to find the centroid of a binary image using region props but I keep receiving the error "Field reference for multiple structure elements that is followed by more reference blocks is an error". Here is my code for finding the centroid:
 measurements = regionprops(bw, 'Centroid');
  hold on;
  plot(measurements.Centroid(1), measurements.Centroid(2), 'r+', 'MarkerSize', 120, 'LineWidth', 1);
hold off;
imshow(bw)
Any help would be appreciated thank you
1 Comment
  Image Analyst
      
      
 on 6 Aug 2014
				Do you want the centroid of the whole, entire image, or of individual blobs in the image? You asked about the whole image but your code seems to indicate you maybe want centroids of individual blobs. Of course the centroid of the whole image is at the center, and the "Weighted centroid" depends on the gray levels in the image.
Accepted Answer
  Image Analyst
      
      
 on 5 Aug 2014
        Maybe try
centroids = [measurements.Centroid];
xCentroids = centroids(1:2:end);
yCentroids = centroids(2:2:end);
plot(xCentroids, yCentroids, .............
2 Comments
  Image Analyst
      
      
 on 6 Aug 2014
				
      Edited: Image Analyst
      
      
 on 6 Aug 2014
  
			If you want the markers to be over the image, put "hold on" before plot(). You must have removed it for some reason.
hold on; % Prevent plot() from blowing away image.
plot(..........., 'r+'........
It looks like you used 'b-' in your call to plot because I see blue lines instead of red plus signs.
More Answers (6)
  Nade Sritanyaratana
    
 on 5 Aug 2014
        The example at the end of the regionprops documentation has an elegant use of the cat function, which might be able to fix the error you are getting.
measurements = regionprops(bw, 'Centroid');
imshow(bw); 
centroids = cat(1,measurements.Centroid);
hold on;
plot(centroids(:,1), centroids(:,2), 'r+', 'MarkerSize', 120, 'LineWidth', 1);
hold off;
4 Comments
  Image Analyst
      
      
 on 7 Feb 2016
				You can't do that because centroids is [x1,y1,x2,y2,x3,y3,x4,y4,.....] You need to extract x and y separately:
xCenters = centroids(1:2:end);
yCenters = centroids(2:2:end);
Then you can pick out which two blobs you want to find the midpoint between and average them. For example
xMid = (xCenters(1)+xCenters(2))/2;
yMid = (yCenters(1)+yCenters(2))/2;
hold on;
plot(xMid, yMid, 'r+', 'LineWidth', 2, 'MarkerSize', 20);
  hallouma amari
 on 12 May 2015
        
      Edited: Image Analyst
      
      
 on 12 May 2015
  
      help me too please
this is my error
Field reference for multiple structure elements that is followed by more reference blocks is an error.
img2=imread('56.png');
se=strel('disk',3);
J=imclose(img2,se);
J=rgb2gray(J);
M=imadjust(J);
B=0; %initialisation
[R C]=size(J);
measurements = regionprops(J, 'Centroid');
x2=measurements.Centroid(1);
y2=measurements.Centroid(2);
bw = bwboundaries(J);
boundary = bw{1};
x1=boundary(:,1);
y1=boundary(:,2);
x1 = x1-x2;
y1 = y1-y2;
1 Comment
  Image Analyst
      
      
 on 12 May 2015
				Try like what I showed:
centroids = [measurements.Centroid];
xCentroids = centroids(1:2:end);
yCentroids = centroids(2:2:end);
% Compute distances of perimeter to centroid of blob #1
bw = bwboundaries(J);
boundary = bw{1};
x1=boundary(:,1);
y1=boundary(:,2);
deltaXs = x1 - xCentroids(1);
deltaYs = y1 - yCentroids(1);
  somia gupta
 on 10 May 2016
        i want to find the centroid of an image in matlab ??? need help for the code for head pose detection
1 Comment
  Image Analyst
      
      
 on 10 May 2016
				See my Image Segmentation Tutorial in my File Exchange http://www.mathworks.com/matlabcentral/fileexchange/?term=authorid%3A31862 It goes over that plus more.
  vinoba
 on 11 Mar 2017
        How to find centroid of each and every blob(objects) in a binary image?
1 Comment
  Image Analyst
      
      
 on 11 Mar 2017
				See my Image Segmentation Tutorial in my File Exchange: http://www.mathworks.com/matlabcentral/fileexchange/?term=authorid%3A31862
Basically
[labledImage, numBlobs] = bwlabel(binaryImage);
props = regionprops(labeledImage, 'Centroid', 'WeightedCentroid');
You get a structure array with both types of centroids for every region.
  tanuwyot
 on 25 Oct 2017
        How to locate the nucleus centroid and extract the seven HU moments value ? Please help me
1 Comment
  Image Analyst
      
      
 on 25 Oct 2017
				Use regionprops(). See http://www.mathworks.com/matlabcentral/fileexchange/25157-image-segmentation-tutorial
I don't have code for Hu's moments.
See Also
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!







