Why does bwperim give wrong perimeter?

2 visualizaciones (últimos 30 días)
Steven
Steven el 15 de Abr. de 2014
Respondida: Walter Roberson el 15 de Abr. de 2014
I wanted to get the perimeter of the following circle. I used two methods, but got completely different results!
1. I used bwperim (after getting binary):
%% BW is the binary image of original greyscale image
BW_perim = bwperim(BW);
L = sum(sum(BW_perim));
I got this:
2. I used imfindcircle:
[centers,radius] = imfindcircles(greyscale);
L2 = 2*pi*radius
and I got this:
The results are completely different. The first one value is about 7 times the second one (in dimensional domain, the second one is reasonable).
I do not know why! Interesting is that the area is almost correct and the results are similar, but the perimeter is not!
1. What is wrong with the first method? Because my other images are not full circles and I have to use bwperim to get the perimeter.
Thanks so much!

Respuesta aceptada

Anand
Anand el 15 de Abr. de 2014
Editada: Anand el 15 de Abr. de 2014
The circle you are trying to measure is not a perfect circle, so technically you can't use 2*pi*radius as the formula for perimeter. Moreover, even what bwperim returns is an approximation that is dependent on the connectivity used, the resolution of the image and how perimeters of small line segments in the binary image are computed.
I would continue using bwperim.
  1 comentario
Steven
Steven el 15 de Abr. de 2014
Thanks Anand. So which one is the closest to the true value?
How can I get almost the accurate perimeter?
Thanks!
Steven

Iniciar sesión para comentar.

Más respuestas (1)

Walter Roberson
Walter Roberson el 15 de Abr. de 2014
Consider using imclose() on the labeled image and then taking the perimeter.

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by