Détecter une forme circulaire à l'intérieur de l'image dans MATLAB
Quel est le moyen le plus rapide pour détecter ces formes circulaires dans une image?
Le rayon est toujours entre(80-100 mm). Arrière-plan est toujours blanc. Et le cercle sera toujours au centre.
J'ai essayé Hough Transformer mais je ne pouvais pas vraiment le faire fonctionner. Je suis nouveau à cela, et j'ai comme une sensation Hough Transformer est un overkill pour ce. Veuillez me suggérer la bonne approche pour ce faire.
Mise à JOUR
Voici ce que j'ai obtenu après application de la transformation de hough.
J'ai utilisé l'algorithme mentionné ici.
Voici le code à partir de la plus grande algorithme
% applying Hough Below
[accum, circen, cirrad] = ...
CircularHough_Grd(gR, [89 93],...
17.4, 13, 1); % this executes in 0.72 sec
% Lets see what we got
imshow(gR);
hold on;
plot(circen(:,1), circen(:,2), 'r+');
for ii = 1 : size(circen, 1)
rectangle('Position',[circen(ii,1) - cirrad(ii), circen(ii,2) - cirrad(ii), 2*cirrad(ii), 2*cirrad(ii)],...
'Curvature', [1,1], 'edgecolor', 'b', 'linewidth', 1.5);
end
hold off;
Significative du cercle est le cercle au milieu.
Pouvez-vous s'il vous plaît montrer votre propre tente en premier?
OriginalL'auteur vvy | 2013-12-05
Vous devez vous connecter pour publier un commentaire.
Voici ce que je propose:
1. convertir image en nuances de gris, l'amélioration de la "différence" du blanc"
2. Seuil d'enlever la partie blanche de la zone
3. Obtenez région et le centre de gravité porperties de régions de l'image
4. sélectionnez juste assez grandes régions
5. calculer région de la distance au centre de l'image
6. choisissez la région la plus proche du centre de
7. Créer un masque
Vous pouvez également envisager d'utiliser d'autres propriétés de la région (par exemple,
'Eccentricity'
) pour mieux rejeter les régions qui ne sont pas circulaires.C'est un $niper shot. Le cercle est de ne pas savoir quoi hit em. Il faut 0.04 sec seulement(trop moins par rapport à la transformation de hough chose que j'ai fait)! Comme prochaine étape, je vais placer le blanc imparfaite cercle à l'intérieur d'un carré et d'obtenir son centre et se rapprocher d'un mieux cercle, et de l'utilisation de ce cercle, comme un masque, puis essayer d'obtenir la couleur du cercle. Cette approche est-elle de droite? ou est-il un ready_made méthode pour faire cela ?
jetez un oeil à
regionprops
et ce qu'il peut vous offrir. Dans mon code que vous avez déjà le centre du cercle dans'Centroid'
champ dest
struct tableau. En fonction de la précision que vous vous aurez à trouver une méthode pour estimer le rayon du cercle. Si c'est la couleur que vous voulez, alors vous n'avez pas besoin d'estimer un cercle - le masqueres
est tout ce dont vous avez besoin:t = reshape( img, [], 3); c = mean( t(res,:), 1 )
vous donnera la moyenne de la couleur des pixels masqués.img, [], 3) lance Produit de dimensions connues, 3, pas divisible en nombre total d'éléments, 450800. d'erreur. Je pense que je vais avoir besoin de tronquer ou des trucs du img array pour faire de sa taille divisible par 3.
si le nombre d'éléments de votre couleur l'image n'est pas divisible par 3, alors c'est bizarre: vous devriez avoir une 3ème dimension de la taille de 3 correspondant à R, G et B éléments de chaque pixel.
OriginalL'auteur Shai
Si votre matlab version est R2012a ou plus tard, la boîte à outils de traitement d'image comprend la fonction
imfindcircles
qui est utilisé pour détecter des cercles dans l'image.Le résultat:
En fait, cette fonction s'applique également Hough transformer, je pense que c'est similaire à la vôtre. Une chose que vous devez noter est, le seuil correspondant à la sensibilité de Hough a un grand impact sur le résultat de la détection. Trop grande sensibilité conduit à la détection de plus de cercles, dont la faiblesse ou partiellement obscurcie, au risque d'une hausse des taux de fausse détection, ce qui était exactement ce que vous avez obtenu.
J'ai R2010a. Puis-je obtenir
imfindcircles
pour ma libération ? Combien de temps est-ce script prend pour obtenir le cercle?il devrait être inclus dans le traitement de l'imagerie boîte à outils puis. Je prend ~0,7 s pour mettre en œuvre imfindcircles, tandis que ~0,05 s pour regionprops. Donc, si vous avez une énorme quantité d'images à traiter, la vitesse peut être beaucoup plus lent.
OriginalL'auteur lennon310