How to calculate the length of image?

Hi
Regarding the image below:
I want to calculate the length of the large black region, i.e., the perimeter of this region plus the length of the small white objects within it. How may I do so?
I know there are some functions for calculating the perimeter, but how to include the small objects?
Also please note that this is a binary image, but I can also do the calculations on grayscale image, if needed.
Thanks so much.
Steven

 Accepted Answer

Something is wrong with that image. I saved it but when I read it in it looks totally different. Anyway, you need to get the perimeters of everything with regionprops and sum them
measurements = regionprops(binaryImage, 'Perimeter');
allPerimeters = [measurements.Perimeter];
theSum = sum(allPerimeters);
But make sure the big perimeter is the inside one and not the outer edge of the image. If it is, then invert the image and fill holes before calling regionprops
binaryImage = imfill(~binaryImage, 'holes');
measurements = regionprops(binaryImage, 'Perimeter');
theBigPerimeter = measurements.Perimeter;
I can't really test it because, like I said, it seems the image is messed up.

4 Comments

Steven
Steven on 22 Dec 2013
Edited: Steven on 26 Apr 2016
Thanks for your reply and sorry for the problematic image.
Regarding your comment, what I want is the length that I have specified by RED line in the following image (I have done this funny thing in Paint, so that I can show you what I want, sorry for the mess!)
So, how may I do so now? shall I invert it? (your second code or first code?)
By the way! when I invert the image, will I use any data?
Is there anyway for calculating the perimeter without inverting?
Thanks so much!
Steven
How about just simply doing
totalPerimeter = sum(bwperim(binaryImage));
Thanks again.
I get (naturally!) three wide different values from three different codes.
How can I know which one is correct? (because yet I have no idea of the scales)
Thanks.
Steven
There are different algorithms. Summing bwperim just sums up the pixels. regionprops computes the perimeter by calculating the distance between each adjoining pair of pixels around the border of the region. So the first method would have two pixels at 45 degrees to each other as a length of 2 while regionprops would give a distance of sqrt(2). You can use whichever method you like better. Optically the regionprops method is probably more accurate.

Sign in to comment.

More Answers (0)

Asked:

on 22 Dec 2013

Edited:

on 26 Apr 2016

Community Treasure Hunt

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

Start Hunting!