36 votes

reconnaissance d'images en python

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

  1. image donnée (500 x 500) pxs ( fond 1 couleur )
  2. l'image ne doit comporter qu'une seule figure géométrique (triangle, carré ou petite face :) ) de (50x50) pxs.
  3. python fera la reconnaissance de la figure et affichera ce qu'est la figure géométrique.

des liens ? des conseils ? une API ? merci :)

32voto

Ivan Points 4558

Un exemple typique chaîne d'outils python serait :

Aussi loin que différencier les formes J'obtiendrais sa silhouette en regardant la forme de l'arrière-plan. Je détecterai ensuite le nombre de coins en utilisant un algorithme de détection des coins. détection des angles algorithme (par exemple, Harris). Un triangle a 3 coins, un carré 4, et un smiley aucun. Voici un python implémentation de la détection des coins de Harris avec Scipy .

Edit :

Comme vous le mentionnez dans les commentaires, l'article du blog ne présente pas la fonction qui produit un noyau gaussien nécessaire à l'algorithme. Voici un exemple d'une telle fonction à partir de l'article de blog. Livre de cuisine Scipy (excellente ressource, d'ailleurs) :

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()

10voto

Harriv Points 3625

OpenCV a des outils d'analyse des blobs, il vous donnera des métriques sur la forme que vous pouvez utiliser pour votre algorithme de reconnaissance des formes préféré :) Par exemple, le rectangle a un rapport de 1,0 pour la surface / (hauteur * largeur), alors que le rapport du cercle est d'environ 0,78.

3voto

TH. Points 945

Vous indiquez que la figure géométrique est de 50x50 px. Si taille et orientation des figures géométriques sont Correction de vous avez un classique problème de correspondance des modèles qui convient à la méthode de corrélation . Vous pouvez appliquer la correspondance des modèles sur l'image originale ou sur une sortie de détection des bords.

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

Toutes ces méthodes peuvent être codées à l'aide d'OpenCV, NumPy ou SciPy.

2voto

monksy Points 8788

Si vous connaissez l'espace d'état de vos données, vous pouvez utiliser l'analyse en composantes principales. Avec l'ACP, tous les objets doivent être posés (au centre de l'écran). L'ACP ne fera pas de détection, mais elle séparera les objets en couches uniques que vous pourrez identifier comme étant un triangle, etc. Notez également que cette méthode n'est pas invariante en termes d'échelle ou de rotation.

[Je ne me souviens pas du nom de cette technique, mais elle est similaire à la façon dont le bureau de poste fait de l'écriture manuscrite]. Si vous ne pouvez manipuler que des surfaces courbes non courbes, vous pourriez faire de la détection de bord, puis faire un échantillonnage aux intersections pour obtenir une approximation de la similarité.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X