0% found this document useful (0 votes)
73 views2 pages

Identifying Round Object

This document outlines 5 steps to analyze an image of pills: 1. Read and display the RGB image and convert it to grayscale 2. Apply a threshold to the grayscale image to create a binary image 3. Remove noise from the binary image by removing small objects and filling gaps 4. Find the boundaries of the remaining objects in the binary image 5. Determine which objects are round by calculating a metric based on each object's area and perimeter, and marking round objects.

Uploaded by

yulda
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
73 views2 pages

Identifying Round Object

This document outlines 5 steps to analyze an image of pills: 1. Read and display the RGB image and convert it to grayscale 2. Apply a threshold to the grayscale image to create a binary image 3. Remove noise from the binary image by removing small objects and filling gaps 4. Find the boundaries of the remaining objects in the binary image 5. Determine which objects are round by calculating a metric based on each object's area and perimeter, and marking round objects.

Uploaded by

yulda
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 2

Step 1: Read Image

RGB = imread('pillsetc.png');
imshow(RGB);

Step 2: Threshold the Image


I = rgb2gray(RGB);
threshold = graythresh(I);
bw = im2bw(I,threshold);
imshow(bw)

Step 3: Remove the Noise


% remove all object containing fewer than 30 pixels
bw = bwareaopen(bw,30);

% fill a gap in the pen's cap


se = strel('disk',2);
bw = imclose(bw,se);

% fill any holes, so that regionprops can be used to estimate


% the area enclosed by each of the boundaries
bw = imfill(bw,'holes');

imshow(bw)

Step 4: Find the Boundaries


[B,L] = bwboundaries(bw,'noholes');

% Display the label matrix and draw each boundary


imshow(label2rgb(L, @jet, [.5 .5 .5]))
hold on
for k = 1:length(B)
boundary = B{k};
plot(boundary(:,2), boundary(:,1), 'w', 'LineWidth', 2)
end

Step 5: Determine which Objects are Round


metric = 4*pi*area/perimeter^2.

stats = regionprops(L,'Area','Centroid');

threshold = 0.94;

% loop over the boundaries


for k = 1:length(B)

% obtain (X,Y) boundary coordinates corresponding to label 'k'


boundary = B{k};

% compute a simple estimate of the object's perimeter


delta_sq = diff(boundary).^2;
perimeter = sum(sqrt(sum(delta_sq,2)));

% obtain the area calculation corresponding to label 'k'


area = stats(k).Area;

% compute the roundness metric


metric = 4*pi*area/perimeter^2;

% display the results


metric_string = sprintf('%2.2f',metric);

% mark objects above the threshold with a black circle


if metric > threshold
centroid = stats(k).Centroid;
plot(centroid(1),centroid(2),'ko');
end

text(boundary(1,2)-35,boundary(1,1)+13,metric_string,'Color','y',...
'FontSize',14,'FontWeight','bold');

end

title(['Metrics closer to 1 indicate that ',...


'the object is approximately round']);

You might also like