clc;
close all;
clear;
workspace;
format long g;
format compact;
fontSize = 22;
folder = pwd;
baseFileName = 'image.jpeg';
fullFileName = fullfile(folder, baseFileName);
if ~exist(fullFileName, 'file')
fullFileNameOnSearchPath = baseFileName;
if ~exist(fullFileNameOnSearchPath, 'file')
errorMessage = sprintf('Error: %s does not exist in the search path folders.', fullFileName);
uiwait(warndlg(errorMessage));
return;
end
end
grayImage = imread(fullFileName);
[rows, columns, numberOfColorChannels] = size(grayImage);
if numberOfColorChannels > 1
grayImage = rgb2gray(grayImage);
end
subplot(2, 2, 1);
imshow(grayImage, []);
title('Original Grayscale Image', 'FontSize', fontSize, 'Interpreter', 'None');
impixelinfo;
hFig = gcf;
hFig.WindowState = 'maximized';
drawnow;
binaryImage = imbinarize(grayImage);
binaryImage = imclearborder(binaryImage);
binaryImage = imfill(binaryImage, 'holes');
subplot(2, 2, 2);
imshow(binaryImage, []);
impixelinfo;
title('Binary Image', 'FontSize', fontSize, 'Interpreter', 'None');
impixelinfo;
labeledImage = bwlabel(binaryImage);
props = regionprops(labeledImage, 'Centroid', 'BoundingBox');
xy = vertcat(props.Centroid);
x = xy(:, 1);
xCenter = mean(x)
y = xy(:, 2);
yCenter = mean(y)
for k = 1 : length(props)
deltax = x(k) - xCenter;
deltay = y(k) - yCenter;
radius(k) = sqrt(deltax^2 + deltay^2);
end
radius = radius(:);
[indexes, meanRadius] = kmeans(radius, 2);
if meanRadius(1) < meanRadius(2)
keepers = find(indexes == 1);
else
keepers = find(indexes == 2);
end
innerBlobs = ismember(labeledImage, keepers);
subplot(2, 2, 3);
imshow(innerBlobs, []);
impixelinfo;
title('Inner Blobs', 'FontSize', fontSize, 'Interpreter', 'None');