Asked by PJM
on 27 Jul 2013

I have an image: http://img5.imageshack.us/img5/3617/clb1.jpg

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

----------

the result is this: http://img853.imageshack.us/img853/1299/3h2g.jpg

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.

Answer by Image Analyst
on 27 Jul 2013

Accepted 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

Show 2 older comments

ajinkya nikam
on 30 Mar 2014

i did not get anything. matlab only tells that CONTINUE ENTERING STATEMENT what should do

Image Analyst
on 30 Mar 2014

Answer by Elad
on 27 Jul 2013

I would try imfindcircles(), (or hough transform to find circles if you don't have the toolbox). You can adjust the sensitivity and edge until you find all the spots. Than you can calculate the average intesity in each circle and have full control on your results.

Here is an example in the image processing blog, using imfindcircles: http://imageprocessingblog.com/detecting-and-counting-objects-with-circular-features/

or at steve on image processing blog: http://blogs.mathworks.com/steve/2012/09/04/detecting-circular-objects-in-images/

Opportunities for recent engineering grads.

## 0 Comments