How to get centroid specific part of an image

I am intended to compute centroid of a part of image. I am getting centroid of all parts of the image which makes me confused of selecting the right one. my code is:
I = imread('Murine_Tibia_Crosssection.png')
Ibw = im2bw(I);
Ibw = imfill(Ibw,'holes');
Ilabel = bwlabel(Ibw);
stat = regionprops(Ilabel,'centroid');
imshow(I); hold on;
for x = 1: numel(stat)
plot(stat(x).Centroid(1),stat(x).Centroid(2),'ro');
end
please help me to get the right one.

댓글 수: 2

I formatted your question. Please have a look at Markup Help.
Ajay Goyal
Ajay Goyal 2015년 3월 11일
Christiaan Sir, Your help is deeply appreciated. You made my day since I was working on this problem for last 3 days. I have made some amendments in your code to get it fit to my need. clc;clear all;close all; J = imread('final1.jpg'); figure(1) imshow(J) I=imcomplement(J); figure(2) imshow(I) stat = regionprops(I,'centroid'); h = fspecial('unsharp'); I_filtered = imfilter(I,h); figure(3) imshow(I_filtered) level = graythresh(I_filtered); BlackWhite = im2bw(I_filtered, level); figure(4) imshow(BlackWhite); original = BlackWhite; filled = imfill(original, 'holes'); holes = filled & ~original; bigholes = bwareaopen(holes, 500); smallholes = holes & ~bigholes; new = original | smallholes; figure(5) imshow(new); stat = regionprops(new,'centroid'); hold on; for x = 1: numel(stat) plot(stat(x).Centroid(1),stat(x).Centroid(2),'b*','linewidth',2); end Thanks Again

댓글을 달려면 로그인하십시오.

 채택된 답변

Christiaan
Christiaan 2015년 3월 10일
편집: Christiaan 2015년 3월 10일

0 개 추천

Dear Ajay,
If an image shows multiple centroids, there are some tricks to still determine the centroid. First you can filter the image using the function medfilt2. Then you can make the image black and white with the function im2bw. Finally you can fill holes when the size of the hole is smaller than a specific size with the function bwareaopen.
See the code below for an example:
clc;clear all;close all;
I = imread('Murine_Tibia_Crosssection.png');
figure(1)
imshow(I)
stat = regionprops(I,'centroid');
I_filtered = medfilt2(I, [12 12]);
figure(2)
imshow(I_filtered)
level = graythresh(I_filtered)
BlackWhite = im2bw(I_filtered, level);
figure(3)
imshow(BlackWhite);
original = BlackWhite;
filled = imfill(original, 'holes');
holes = filled & ~original;
bigholes = bwareaopen(holes, 500);
smallholes = holes & ~bigholes;
new = original | smallholes;
figure(4)
imshow(new);
stat = regionprops(new,'centroid');
hold on; for x = 1: numel(stat)
plot(stat(x).Centroid(1),stat(x).Centroid(2),'ro','linewidth',5);
end
hold off
Good luck! Christiaan

추가 답변 (2개)

Ajay Goyal
Ajay Goyal 2015년 3월 11일

0 개 추천

Christiaan Sir, Your help is deeply appreciated. You made my day since I was working on this problem for last 3 days. I have made some amendments in your code to get it fit to my need. clc;clear all;close all; J = imread('final1.jpg'); figure(1) imshow(J) I=imcomplement(J); figure(2) imshow(I) stat = regionprops(I,'centroid'); h = fspecial('unsharp'); I_filtered = imfilter(I,h); figure(3) imshow(I_filtered) level = graythresh(I_filtered); BlackWhite = im2bw(I_filtered, level); figure(4) imshow(BlackWhite); original = BlackWhite; filled = imfill(original, 'holes'); holes = filled & ~original; bigholes = bwareaopen(holes, 500); smallholes = holes & ~bigholes; new = original | smallholes; figure(5) imshow(new); stat = regionprops(new,'centroid'); hold on; for x = 1: numel(stat) plot(stat(x).Centroid(1),stat(x).Centroid(2),'b*','linewidth',2); end Thanks Again

카테고리

도움말 센터File Exchange에서 Statistics and Machine Learning Toolbox에 대해 자세히 알아보기

질문:

2015년 3월 9일

댓글:

2015년 3월 11일

Community Treasure Hunt

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

Start Hunting!

Translated by