MATLAB: Find spots in image

imageimage processImage Processing Toolbox

and I use the code, then I can find the spots.
———-
clear all;
Cimg=imread('CropTest1.jpg','jpg');
Gimg=rgb2gray(Cimg);
BW=Gimg>150;
rp=regionprops(BW,Gimg,'WeightedCentroid');
disp('Centroiding is done.');
figure(1); image(Cimg); axis image; hold on;
n=numel(rp);
for i=1:n
plot(rp(i).WeightedCentroid(1), rp(i).WeightedCentroid(2), 'r*')
end
———-
and I have coordinates of all spots.
then I want to do these
– express Center spot -> (0,0)
– find missing spots (-1,3),(5,1),(1,-5) and output the message: '(-1,3),(5,1),(1,-5) are missing!'
– delete one spot in double spots that use this idea: distance of two spots(well, I seem to be able to do this.)
thank you for your advice and help.

Best Answer

I can't see your images, though I'm in Beijing this week and imageshack.us seems to be another domain in a long list of web sites I've encountered that are banned by the government of China. Nonetheless, I'll try to help as best I can without seeing your images. I'm assuming that you have a 10 by 10 array of possible locations of the circles. You first define a logical array initialized to false that says whether or not you have a circle there. Then set it to true when you find a circle there. Try something like this (untested)
circlePresent = false(10,10);
% Then loop over circles you have found setting the array to true.
centroids = [rp.WeightedCentroid];
[rows, columns] = size(BW);
for k = 1 : length(rp)
if centroids(k, 2) < rows/10
row = 1;
elseif centroid(k, 2) < 2*rows/10
row = 2;
elseif centroid(k, 2) < 3*rows/10
row = 3;
% and so on up to 10.
% Then do the same for columns.
if centroids(k, 1) < columns/10
column = 1;
% etc.
% Now set the array to true for this circle
circlePresent(row, column) = true;
end
% Now find missing elements
[missingRows, missingColumns] = find(~circlePresent);
% Print out all the missing circles array locations.
for k = 1 : length(missingRows)
fprintf('There is a circle missing at row %d, column %d.\n', ...
missingRows(k), missingColumns(k));
end