MATLAB: Help with “imfindcircles”

Image Processing Toolboximage segmentationimfindcircles

Hello! i am having trouble finding the centroid of this petri dish.
when i run my code, matlab finds 12 centroids and when i use 'viscircles' its showing me 12 rings on top of each other. could this be a sensitivity issue? are there other ways i can eliminate the other circles and only detect the boundary of the petri dish?
here is my code and i have also attached the image im analyzing and the resultant image after running the code
for i = 1:numI
file = images(i).name;
img = imread(file);
imshow(file)
% d = drawline;
% pos = d.Position;
% diffPos = diff(pos);
% diameter = hypot(diffPos(1),diffPos(2));
[C,R] = imfindcircles(img,200,'ObjectPolarity','dark','Sensitivity',1);
end
v = viscircles(C,R);

Best Answer

Post your original image, rather than a screenshot.
For one thing, your image capture conditions are horrible. You need to have lights on both sides to get rid of that bad shadow that is essentially the same darkness as your petri dish. If you had that, you could simply threshold and call regionprops:
mask = grayImage < someThresholdValue;
% Take largest blob.
mask = bwareafilt(mask, 1);
% Fill holes
mask = imfill(mask, 'holes');
% Find centroid
props = regionprops(mask, 'Centroid', 'EquivDiameter')
xCenter = props.Centroid(1)
yCenter = props.Centroid(2)
diameter = props.EquivDiameter