how can i get each coordinates of binary image

 Accepted Answer

Find the centroid with regionprops(). See my Image Segmentation Tutorial if you don't know how. Then convert the centroid to integer to get the row and column.
centroidColumn = int32(centroid(1)); % "X" value
centroidRow = int32(centroid(2)); "Y" value.
Then extract a row or column and use find to find the first and last element that's set:
middleColumn = binaryImage(:, centroidColumn);
topRowY = find(middleColumn, 1, 'first'); % Find top.
bottomRowY = find(middleColumn, 1, 'last'); % Find bottom.
middleRow = binaryImage(centroidRow, :);
leftColumnX = find(middleRow, 1, 'first'); % Find left.
rightColumnX= find(middleRow, 1, 'last'); % Find right.

5 Comments

Adhi
Adhi on 23 Nov 2012
Edited: Adhi on 23 Nov 2012
its really helpful
thanks Image Analyst
I did already. Hence, my edited answer - it's not the same as before (I guess you didn't notice).
its working for top and bottom, but why its not working for right and left.? always get the wrong result. i got the centroid from your image segmentation tutorial as well.
centroidColumn = int32(blobCentroid(1)); % "X" value
centroidRow = int32(blobCentroid(2)); %"Y" value.
Then extract a row or column and use find to find the first and last element that's set:
middleColumn = J(:, centroidColumn);
topRowY = find(middleColumn, 1, 'first') % Find top.
bottomRowY = find(middleColumn, 1, 'last') % Find bottom.
middleRow = J(:, centroidRow);
leftColumnX = find(middleRow, 1, 'first') % Find left.
rightColumnX= find(middleRow, 1, 'last') % Find right.
and i added this code for mark the coordinate:
line(centroidColumn, centroidRow, 'Marker', '*', 'MarkerEdgeColor', 'r')
line(centroidColumn, topRowY, 'Marker', '*', 'MarkerEdgeColor', 'r')
line(centroidColumn, bottomRowY, 'Marker', '*', 'MarkerEdgeColor', 'r')
line(leftColumnX, centroidRow, 'Marker', '*', 'MarkerEdgeColor', 'r')
line(rightColumnX, centroidRow, 'Marker', '*', 'MarkerEdgeColor', 'r')
i dont know how to move my post to comments, so i deleted and moved my last post to this comments section. but i can't move yours.
and your answers works perfectly, thanks.
middleRow should be defined like this:
middleRow = binaryImage(centroidRow, :);
and line() takes 2 x and 2 y coords:
line([x1, x2], [y1 y2]........ Or line([col1, col2], [row1, row2], ......
and I'd recommend using more descriptive names than single letters, for maintainability of the code.
Glad it's finally working for you.

Sign in to comment.

More Answers (0)

Community Treasure Hunt

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

Start Hunting!