Using the concept of roundness to detect a circular object, the table tennis ball in mid air or in palm is detected.
FLOW CHART:
1. Read input image
· Read a RGB image with ball in mid air or ball in palm.
MATLAB CODE:
%Read the input image
Img=imread(Filename);
axes('Position',[0 .1 .74 .8],'xtick',[],'ytick',[]);
imshow(Img);title('Original Image');
2. Image Pre-processing
· Convert the RGB image to grayscale image.
· Apply median filter
· Adjust the brightness and contrast of the image using ‘imadjust’ function.
MATLAB CODE:
I=rgb2gray(Img); % Converting RGB Image to
% Gray Scale Image
I=im2double(I); % Converting Gray scale Image
% to Double type
J = medfilt2(I,[3 3]); % Median Filter ,
% 3x3 Convolution
% on Image
I2 = imadjust(J); % Improve to quality of Image
% and adjusting
% contrast and brightness values
3. Threshold the image
· The pixel value greater than the threshold value is converted to one else zero.
MATLAB CODE:
Ib = I2> 0.9627;
4. Image Labeling
· Label the connected components using ‘bwlabel’ function
· Remove components that are smaller in size.
MATLAB CODE:
%Labelling
[Label,total] = bwlabel(Ib,4); % Indexing segments by
% binary label function
%Remove components that is small and tiny
for i=1:total
if(sum(sum(Label==i)) < 500 )
Label(Label==i)=0;
end
end
5. Find the image properties: Area, Perimeter and Centroid
· Using ‘regionprops’ function, find the Area, Perimeter, Bounding Box and Centroid.
MATLAB CODE:
%Find the properties of the image
Sdata = regionprops(Label,'all');
6. Calculate the Roundness
· Roundness = 4*PI*A/P^2
MATLAB CODE:
%Find the components number
Un=unique(Label);
my_max=0.0;
%Check the Roundness metrics
%Roundness=4*PI*Area/Perimeter.^2
for i=2:numel(Un)
Roundness=(4*pi*Sdata(Un(i)).Area)/Sdata(Un(i)).Perimeter.^2;
my_max=max(my_max,Roundness);
if(Roundness==my_max)
ele=Un(i);
end
end
7. Find the component with the maximum roundness value
· Find the max of the Roundness value for all the labeled components
8. Show the detected table tennis ball
· Use the ‘BoundingBox’ values to plot rectangle around the ball
· Mark the centroid of the ball
MATLAB CODE:
%Draw the box around the ball
box=Sdata(ele).BoundingBox;
box(1,1:2)=box(1,1:2)-15;
box(1,3:4)=box(1,3)+25;
%Crop the image
C=imcrop(Img,box);
%Find the centroid
cen=Sdata(ele).Centroid;
%Display the image
axes('Position',[0 .1 .74 .8],'xtick',[],'ytick',[])
imshow(Img);
hold on
plot(cen(1,1),cen(1,2),'rx');%Mark the centroid
9. Generate report
· Find the radius using the Equidiameter obtained using ‘regionprops’ function.
· Display the radius,Area,Perimeter and Centroid of the ball.
· Show the Binary and Original image of the cropped ball.
MATLAB CODE:
Rad=(sdata(ele).EquivDiameter)/2;
Rad=strcat('Radius of the Ball :',num2str(Rad));
Area=sdata(ele).Area;
Area=strcat('Area of the ball:',num2str(Area));
Pmt=sdata(ele).Perimeter;
Pmt=strcat('Perimeter of the ball:',num2str(Pmt));
Cen=sdata(ele).Centroid;
Cent=strcat('Centroid:',num2str(Cen(1,1)),',',num2str(Cen(1,2)));
BALL IN MID AIR: