is there any way to draw a vertical and horizontal line that pass through blobs centroid ?
1 view (last 30 days)
Show older comments
I have a task of locating the upper lower and right and left cornet of a blob like this image where i have marked the points as red points
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/153533/image.jpeg)
now i can plot centroid like this
s = regionprops(binaryImage, 'centroid');
centroids = cat(1, s.Centroid);
figure,imshow(binaryImage);hold(imgca,'on'); plot(imgca,centroids(:,1), centroids(:,2), 'r*','MarkerSize', 10, 'LineWidth', 3);
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/153534/image.jpeg)
is it possible to find the other four points like drawing a line vertically and horizontally and some how find the intersecting points like this image and plot the four points
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/153535/image.jpeg)
please help me any one ...i am not much good in math so code example will be helpful..
1 Comment
Pradeeba
on 3 Mar 2014
This is works only for 1 dimensional matrix. how it is suitable for binary image because it consists of only two values such as 0 and 1. if it is possible, please put up the code.
Answers (2)
Image Analyst
on 9 Dec 2013
Round the centroid to the nearest integer row and column, then extract that and use find
centroidColumn = round(xCentroid);
centroidRow = round(yCentroid);
% Extract
oneColumn = binaryImage(:, centroidColumn);
% Get top and bottom row
topRow = find(oneColumn, 1, 'first');
bottomRow = find(oneColumn, 1, 'last');
% Extract
oneRow = binaryImage(centroidRow, :);
% Get left and right columns.
leftColumn = find(oneRow, 1, 'first');
rightColumn = find(oneRow, 1, 'last');
3 Comments
Image Analyst
on 9 Dec 2013
Does your image have a white boundary around it? It looks like it might. What are the values of topRow, etc.? I think you need to review this link first http://blogs.mathworks.com/videos/2012/07/03/debugging-in-matlab/
Image Analyst
on 3 Mar 2014
Anandkumar: See the answer I gave in http://www.mathworks.com/matlabcentral/answers/118197#answer_125775, which is a more complete program. It should help you. Also, don't forget to see Jos's answer (scroll below).
Jos (10584)
on 3 Mar 2014
Here is one approach:
s = regionprops(binaryImage, 'centroid');
centroids = cat(1, s.Centroid);
columndata = binaryImage(:,centroids(:,1)) ;
ix = 1:numel(columndata)-1 ;
Ypos = find(columndata(ix) ~= columndata(ix+1))
Ypos = Ypos + [1 0] % correct for offset?
figure,
imshow(binaryImage);
hold on(imgca,'on');
plot(imgca,centroids(:,1), centroids(:,2), 'r*','MarkerSize', 10, 'LineWidth', 3);
plot(imgca, centroids(:,1),Ypos,'rs','markersize',10,'markerfacecolor','r') ;
0 Comments
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!