Image Processing Toolbox, Circular Hough Transform imfindcircles. R2012a, , , .
, , . , . , Hough Transform, . Hough - , .
, . , , , . imfindcircles :
[centers,radii] = imfindcircles(A, radiusRange);
A , radiusRange - , , . :
centers: N x 2, (x,y) , , - x, , y .radii: , . N x 1.
imfindcircles, , Sensitivity. , , , , , . , . 0,85. 0,9, . , , , 50 150 . :
im = im2bw(imread('http://dennlinger.bplaced.net/t06-4.jpg'));
[centers,radii] = imfindcircles(im, [50 150], 'Sensitivity', 0.9);
StackOverflow. logical true black white, uint8. im. imfindcircles .
, , imshow, , viscircles .
imshow(im);
viscircles(centers, radii, 'DrawBackgroundCircle', false);
viscircles . , , . , :

, centers radii. centers , radii , .
, , regionprops, , . , - :
[X,Y] = meshgrid(1:size(im,2), 1:size(im,1));
IDs = zeros(size(im));
for idx = 1 : numel(radii)
r = radii(idx);
cen = centers(idx,:);
loc = (X - cen(1)).^2 + (Y - cen(2)).^2 <= r^2;
IDs(loc) = idx;
end
, meshgrid ID , . , , , , . ID . IDs , bwlabel. , , idx, :
cir = IDs == idx;
, , [0-255] :
imshow(IDs, []);

, imfindcircles.
, , , , . , , - ID. cool, + 1 . - :
cmap = cool(numel(radii) + 1);
RGB = ind2rgb(IDs, cmap);
imshow(RGB);
, cool. , ind2rgb, .
, :
