Question

Ce que je veux faire, c'est une reconnaissance d'image pour une application simple:

  1. image donnée (500 x 500) pxs (arrière-plan 1 couleur)
  2. l’image ne comportera qu’une figure géométrique (triangle ou carré ou petite figure :)) de (50x50) px.
  3. python fera la reconnaissance de la figure et affichera celle-ci.

des liens? des allusions? toute API? merci:)

Était-ce utile?

La solution

Une chaîne d'outils python typique serait:

Pour autant que différencie les formes , j'obtiendrais sa silhouette en regardant la forme de l'arrière-plan. Je détecterais ensuite le nombre de coins à l’aide d’un algorithme de détection de coin (par exemple, Harris). Un triangle a 3 coins, un carré 4 et un smiley aucun. Voici une python implémentée dans la détection de coins de Harris avec Scipy .

Modifier:

Comme vous l'avez mentionné dans les commentaires, l'article de blog ne présentait pas la fonction qui produit un noyau gaussien nécessaire à l'algorithme. Voici un exemple d’une telle fonction tirée du Livre de recettes Scipy (excellente ressource, en passant):

def gauss_kern(size, sizey=None):
    """ Returns a normalized 2D gauss kernel array for convolutions """
        size = int(size)
        if not sizey:
            sizey = size
        else:
            sizey = int(sizey)
        x, y = mgrid[-size:size+1, -sizey:sizey+1]
        g = exp(-(x**2/float(size)+y**2/float(sizey)))
        return g / g.sum()

Autres conseils

OpenCV possède des outils d'analyse des objets blob, qui vous donneront des métriques sur la forme que vous pouvez utiliser. nourrir pour votre algorithme de reconnaissance de modèle préféré :) Par exemple. Le rectangle a un rapport de 1,0 pour l'aire / (hauteur * largeur), lorsque le rapport du cercle est d'environ 0,78.

Vous indiquez que la figure géométrique est 50x50 px. Si la taille et l'orientation des figures géométriques sont résolues , vous rencontrez un problème de correspondance de modèle classique, adapté au méthode de corrélation . Vous pouvez appliquer le modèle correspondant à l'image d'origine ou à une sortie de détection de bordure.

Sinon, si la taille (échelle) et / ou l'orientation sont arbitraires, les descripteurs de Fourier peuvent être appliqués. Ces descripteurs sont des invariants de rotation et d’échelle.

Toutes ces méthodes peuvent être codées avec OpenCV, NumPy ou SciPy.

Si vous connaissez l'espace d'état de vos données, vous pouvez utiliser l'analyse en composantes principales. Avec PCA, tous les objets doivent être posés (au centre de l'écran). La PCA ne détectera pas, mais séparera les objets en couches uniques dans lesquelles vous pourrez vous identifier en tant que triangle, etc. Remarque: il ne s'agit pas d'un invariant d'échelle ou de rotation.

[Je ne me souviens plus comment cette technique s'appelle, mais elle est similaire à la façon dont le bureau de poste ne recopie pas] Si vous ne pouvez gérer que les courbes courbes, vous pouvez effectuer une détection des contours, puis effectuer un échantillonnage aux intersections pour obtenir une approximation de la similarité.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top