How to detect the circle-ish shape in an image
1 次查看(过去 30 天)
显示 更早的评论
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 个评论
采纳的回答
Image Analyst
2014-7-14
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 个评论
Image Analyst
2014-7-16
You need to combine both criteria:
keeperIndexes = find(cicularities < 2 & allBlobAreas > 2000);
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Image Data Workflows 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!