How to detect circle in this pic?
1 Ansicht (letzte 30 Tage)
Ältere Kommentare anzeigen
I want detect every circle in this pic using this code. But, I detect only four.
so, How to detect every circle in this pic? what's wrong my code?
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/253008/image.png)
clear
clc
image = imread('example5.PNG');
image = edge(imgaussfilt(rgb2gray(image), 2), 'Canny');
[x y] = find(image == 1);
pindex = cat(2, y, x);
hough_matrix = zeros(1000, 1000);
rad = [55 56 64 65 51 52];
pindex = pindex + 245;
for k = 1 : 7
for p=1:size(pindex, 1)
center = pindex(p, :);
% 모든 허프 matrix에 대한 이중 for문
for i = center(1)-rad(k):center(1)+rad(k)
x = i - center(1);
for j = center(2)-rad(k):center(2)+rad(k)
y = j - center(2);
if round(sqrt(x*x + y*y)) == rad(k)
hough_matrix(j, i) = hough_matrix(j, i) + 1;
end
end
end
end
[x y] = find(hough_matrix == max(hough_matrix, [], 'all'));
center = cat(2, y, x);
center = center - 245;
if k==1
figure;imshow(image);
else
viscircles(center, rad(k));
end
end
0 Kommentare
Antworten (1)
Shashank Gupta
am 9 Dez. 2019
Hi Kim,
Looks like you are trying to implement a Hough transform algorithm from the scratch. MATLAB already has the function “imfindcircles” which detect the circle in the image given a range of radius. Also this function uses the same Hough transform algorithm. But before using the function you need to do some pre-processing, I am following up your code to find the edge, now use this edged image to fill up the holes and now you can use “imfindcircle” function. This might help you.
I am also attaching a snippet of the code for the reference
image = imread('image.png');
image = edge(imgaussfilt(rgb2gray(image), 2), 'Canny');
img = imfill(image,'holes');
imshow(img);
0 Kommentare
Siehe auch
Kategorien
Mehr zu 객체 분석 finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!