How to detect the circle-ish shape in an image
4 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Faraz
el 14 de Jul. de 2014
Comentada: Image Analyst
el 16 de Jul. de 2014
I have this image:
And I wanted to detect the circle shape from it. So simple enough I used regionprops and area
CC = im2bw(temp);
L = bwlabel(CC);
props = regionprops(L, 'Area');
idx = find( [props.Area] == max([props.Area]));
BW2 = ismember(L,idx);
The above produced image BW2 singled out the circle perfectly, but it does not work every time.
When I applied the same code to this image(which is another sample in my dataset):
It picked up not the circle but the big blob connected component in the middle. Which makes sense as it has the biggest area.
Judging by this I found that area is not the best option.
How can I single out the circle type shape in my images?
Thank you
0 comentarios
Respuesta aceptada
Image Analyst
el 14 de Jul. de 2014
Compute the circularities:
labeledImage = bwlabel(binaryImage);
measurements = regionprops(labeledImage, 'Area', 'Perimeter');
allAreas = [measurements.Area];
allPerims = [measurements.Perimeter];
circularities = allPerims .^ 2 ./ (4*pi*allAreas);
Look at my Image Segmentation Tutorial to find out how to use ismember() to extract out round blobs. Round blobs will have a circularity less than about 2 or 3 or so.
4 comentarios
Image Analyst
el 16 de Jul. de 2014
You need to combine both criteria:
keeperIndexes = find(cicularities < 2 & allBlobAreas > 2000);
Más respuestas (0)
Ver también
Productos
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!