center of mass of binary image

96 ビュー (過去 30 日間)
Yeshudas Muttu
Yeshudas Muttu 2014 年 9 月 20 日
回答済み: gwoo 2019 年 3 月 21 日
hi , i want to know how to calculate center of mass of the binary image(silhouette).below is the image where i have crop the image basedon it boundary box

採用された回答

Image Analyst
Image Analyst 2014 年 9 月 20 日
  2 件のコメント
Yeshudas Muttu
Yeshudas Muttu 2014 年 9 月 24 日
thks for the help
Basically i have got centroid and bounding box using regionprop.. next i wanted to crop the image based on the bounding box ie
subImage =imcrop(BW,s.BoundingBox); figure(3); imshow(subImage) title('Cropped Image')
i get the crop part but without centroid marker on it.how do it get thr croppd image with the centroid marker on it?
<<
>>
Image Analyst
Image Analyst 2014 年 9 月 24 日
Yep, my code will do that. Did you see how if found each coin and cropped it out. I was hoping you could adapt it yourself after seeing how I used regionprops to ask for hte bounding box and then used this code to crop out all the blobs:
message = sprintf('Would you like to crop out each coin to individual images?');
reply = questdlg(message, 'Extract Individual Images?', 'Yes', 'No', 'Yes');
% Note: reply will = '' for Upper right X, 'Yes' for Yes, and 'No' for No.
if strcmpi(reply, 'Yes')
figure;
% Maximize the figure window.
set(gcf, 'units','normalized','outerposition',[0 0 1 1]);
for k = 1 : numberOfBlobs % Loop through all blobs.
% Find the bounding box of each blob.
thisBlobsBoundingBox = blobMeasurements(k).BoundingBox; % Get list of pixels in current blob.
% Extract out this coin into it's own image.
subImage = imcrop(originalImage, thisBlobsBoundingBox);
% Determine if it's a dime (small) or a nickel (large coin).
if blobMeasurements(k).Area > 2200
coinType = 'nickel';
else
coinType = 'dime';
end
% Display the image with informative caption.
subplot(3, 4, k);
imshow(subImage);
caption = sprintf('Coin #%d is a %s.\nDiameter = %.1f pixels\nArea = %d pixels', ...
k, coinType, blobECD(k), blobMeasurements(k).Area);
title(caption, 'FontSize', 14);
end
Did you actually download and run my demo? Do you think you'll be able to transfer that code to your program?

サインインしてコメントする。

その他の回答 (2 件)

gwoo
gwoo 2019 年 3 月 21 日
This is the fastest simpliest way I've seen to do it without regionprops:
[r, c] = find(binaryImage == 1);
rowcolCoordinates = [mean(r), mean(c)];

Guillaume
Guillaume 2014 年 9 月 20 日
編集済み: Guillaume 2014 年 9 月 20 日
You haven't attached any image.
If your image is a single connected blob, regionprops can give you the centre of mass with the centroid property.
If you want the centre of mass for the whole image, regardless of how many blobs are in it, it's fairly trivial:
[x, y] = meshgrid(1:size(img, 2), 1:size(img, 1));
weightedx = x .* img;
weightedy = y .* img;
xcentre = sum(weightedx(:)) / sum(img(:));
ycentre = sum(weightedy(:)) / sum(img(:));

カテゴリ

Help Center および File ExchangeImages についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by