9
votes

Comment filtrer les contours en cercles qui se chevauchent dans OpenCV

Je travaille, en utilisant le cadre OpenCV / C ++, sur un programme qui comptent essentiellement des objets elliptiques pouvant se chevaucher.

Après seuil l'image et rechercher des contours de tous les objets

Ma prochaine étape implique l'exclusion de l'objet qui ne sont pas faits de ellipses qui se chevauchent (je vais segmenter les autres plus tard).

Je me retrouve avec des objets tels que ceux-ci:

Entrez la description de l'image ici

Dans cet exemple d'image, tous les objets de droite sont négatifs tandis que ceux de gauche sont valides.

Mon filtre actuel exclut l'objet principalement sur le terrain de leur Quient isopérimétrique . Cependant, comme j'ai des objets avec différentes tailles et bruit, je ne suis pas toujours satisfait de cette approche.

Idéalement, j'aimerais avoir une mesure supplémentaire pour augmenter l'efficacité de mon filtre actuel.

Puisque je dois répéter cette analyse sur de nombreux contours, cela ne devrait pas être coûteux.

J'ai pensé aux approches telles que:

  • Quelque chose basé sur un histogramme de la valeur de l'angle entre tous les triplets de points successifs dans le contour?
  • ajustement mathématiquement une "poly-ellipse" (je n'aurais aucune idée de la façon de faire ça)?
  • Match Freeman chaînes?

    Mais je suis convaincu que j'ai manqué quelque chose d'évident qui est plus efficace et moins désordonné. Avez-vous des suggestions, Merci:),

    EDIT: Comme Regis suggéra à juste titre, toute forme pourrait en fait être constituée d'un nombre suffisant de cercles. Par conséquent, afin de rendre mon problème résolutable, j'ajouterai les hypothèses suivantes:

    1. Pas plus de 16 ellipses / objet.
    2. Les ellipses ne peuvent pas être à plat: axe majeur / axe mineur <3.
    3. Dans un objet, la zone de la plus grande ellipse sur la zone du plus petit doit être inférieure à 10.

0 commentaires

3 Réponses :


2
votes

Une possibilité serait d'essayer:

  1. Extraire des contours d'objets
  2. Points d'échantillonnage à l'espacement régulier le long du contour
  3. Utilisez ces points pour déterminer la direction à l'espacement régulier (il peut être préférable d'utiliser un nombre complexe pour exprimer cette direction pour éviter les problèmes enveloppants)
  4. Utilisez ces instructions pour calculer la courbure à l'espacement régulier
  5. Base une métrique sur cette courbure, par ex. Recherchez des objets qui ont plus de 80% des échantillons de courbure dans la plage correcte.

    Le graphique que vous attendez à voir pour la courbure est une série de valeurs constantes (ou variant lentement si la forme est une ellipse au lieu d'un cercle), avec des discontinuités soudaines où elle change d'un cercle à un autre.

    Si votre image est bruyante, vous souhaiterez peut-être d'abord filtrer les valeurs de courbure.

    Les formes à base de cercles / ellipses auront principalement une courbure significative tout autour du périmètre, tandis que les formes fabriquées à des bords droits auront des parties de la faible courbure.


1 commentaires

Que vous, je vais essayer de me faire la tête autour de cela. Avez-vous un lien que je pourrais commencer?



0
votes

Je soupçonne que n'importe quelle forme peut être créée à partir d'un ensemble suffisamment grand d'ellips qui se chevauchent et que vous avez un problème mal défini sur vos mains. Sauf si j'ai mal compris votre déclaration de problème.


1 commentaires

Merci, vous avez raison, un nombre suffisant de petits cercles / ellipses pourraient en effet définir une forme. J'aurais dû dire des hypothèses supplémentaires (qui sont justes pour mon problème) tels que: 1) Il est très peu probable que cela observe plus de 10 cercles qui se chevauchent. 2) Dans de la même forme, la zone de la plus petite ellipse ne sera pas inférieure à une dixième de la zone du plus grand.



0
votes

Avez-vous regardé dans Hough-Transformations pour les cercles et les ellipses? Il y a même un implémentation OpenCV pour les cercles disponibles. Ces transformations doivent être appliquées aux contours de vos objets.


1 commentaires

Merci, j'ai vraiment essayé, merci: d. Pour moi, cela a mal fonctionné sur des objets serrés ... Je cherche maintenant l'approche suivante: 1) Faire une bibliothèque d'échantillons positifs vs négatifs. 2) Calcul des fonctionnalités des images binaires. 3) Utiliser des techniques d'apprentissage machine pour former un classificateur ...