How to find coordinates of two corner points in an image without using ginput?

2 views (last 30 days)
I have two corner points (I marked them in red so you can see it) in black and white image. I want to find coordinates of the points automatically without using 'ginput'.
I used the 'bwlabel' and 'regionprops' functions to crop an original image to find my region of interest (ROI).
im = imread('LA_shape1.jpg');
LA = im2bw(im, graythresh(im));
[Clab num] = bwlabel(LA);
props = regionprops(Clab);
LABox = imcrop(LA,[props.BoundingBox]);
figure; imshow(LABox);
Here is the result after cropping:
Is there any one who can kindly help me to find the coordinates of two corner points without using ginput? Thanks so much!

Accepted Answer

Image Analyst
Image Analyst on 7 Dec 2014
No need to crop, label, call regionprops. Why bother if all you want are the endpoints? Simply use bwmorph()
skelImage = bwmorph(binaryImage, 'skel', inf);
endPoints = bwmorph(skelImage, 'Endpoints');
[rows, columns] = find(endPoints);
  3 Comments
Image Analyst
Image Analyst on 7 Dec 2014
It looks like there are actually 2 endpoints per endpoint. That's because when you skeletonize a rectangle, you get s branch going into each corner. Zoom in and you'll see what I mean. I think it would be fine to just average the x and y points to get one point that is halfway in between the two points.
Ivan Shorokhov
Ivan Shorokhov on 21 Jan 2015
Edited: Ivan Shorokhov on 21 Jan 2015
Thank you, I did as you suggested!
But what if I have a lot of endpoints, as in the following case, what can I do to find coordinates of two corner points?
Code:
clear all; clc; close all; workspace; format long g; format compact;
im = imread('LA.jpg');
figure; imshow(im,[]);
LA= im2bw(im, graythresh(im));
% Filtering from noize by measuring blow
[Clab num] = bwlabel(LA);
props = regionprops(Clab);
% [maxValue,index] = max([props.Area]);
CC = bwconncomp(LA);
[~,idx] = max(cellfun(@numel,CC.PixelIdxList));
L=labelmatrix(CC);
LA=L==idx;
figure; imshow(LA);
skelImage = bwmorph(LA, 'skel', inf); %
endPoints = bwmorph(skelImage, 'Endpoints'); %
[rows, columns] = find(endPoints); % Find coordinates of the End Points
figure; imshow(LA); hold on;
plot(columns,rows,'g*');

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!