J'ai une image qui ressemble à celle ci-dessous:
J'essaie de trouver le rayon (ou le diamètre) du cercle. J'ai essayé d'utiliser la transformation circulaire de Hough (via matlab imfindcircles(bw,[rmin rmax],'ObjectPolarity','bright')
), et en s'adaptant à un cercle ou une ellipse (fonction maison qui fonctionne plutôt bien pour des données moins bruyantes, voir ci-dessous).
J'ai également essayé un traitement d'image pour obtenir un cercle plus clair, par exemple, voir ci-dessous:
se = strel('disk', 2);
bw = imdilate(bw, se);
bw = bwareaopen(bw,100000);
bw = edge(bw);
Cependant, lorsque j'alimente l'image traitée à l'une ou l'autre des techniques (ajustement de Hough et cercle \ ellipse), aucune d'entre elles ne parvient à détecter le cercle de manière décente.
Voici un extrait de code du chercheur de cercle que j'ai écrit (matlab) [row col] = find (bw); contour = bwtraceboundary (bw, ligne (1), col (1)], 'N', connectivité, num_points);
x = contour(:,2);
y = contour(:,1);
% solve for parameters a, b, and c in the least-squares sense by
% using the backslash operator
abc = [x y ones(length(x),1)] \ -(x.^2+y.^2);
a = abc(1); b = abc(2); c = abc(3);
% calculate the location of the center and the radius
xc = -a/2;
yc = -b/2;
radius = sqrt((xc^2+yc^2)-c);
Des approches alternatives seront appréciées ...
Réponses:
Voici ma solution, elle est proche de l'idée de @ Yoda, mais j'ai changé quelques étapes.
Voici le code Matlab pertinent. J'utilise Hough transform pour les cercles .m fichier dans mon code.
la source
Il est assez simple de le faire en utilisant le traitement d'image. Ce qui suit est une preuve de concept dans Mathematica . Vous devrez le traduire dans MATLAB.
img
.Binarisez l'image et dilatez-la, suivie d'une transformation de remplissage. Je supprime également les petits composants parasites qui ne sont pas connectés au blob principal. Cela devrait vous donner quelque chose comme ceci:
Ensuite, trouvez le centroïde de ce blob et le rayon de disque équivalent du blob (openCV, MATLAB ont tous des commandes équivalentes pour le faire)
C'est ça! Tracez maintenant l'image d'origine et un cercle avec le centre et le rayon ci-dessus pour voir comment elle s'adapte:
la source