2016-02-10 5 views
3

Étant donné une image d'une carte connect-4, j'aimerais reconnaître et afficher l'état de la carte (une matrice 6 par 7). La première approche que j'ai essayée a été basée sur la recherche des cercles et ensuite la recherche d'un motif de grille dans leurs centroïdes.Comment puis-je détecter une grille de cercles pleins?

C'est la fonction open-cv J'utilise:

circles = cv2.HoughCircles(bw_im, 
           cv2.cv.CV_HOUGH_GRADIENT, 
           dp=DP, 
           minDist=MIN_DIST, 
           minRadius=MIN_RADIUS, 
           maxRadius=MAX_RADIUS) 

-je ajouter une suppression non maximale, mais les résultats ne sont pas grands.

Y at-il une meilleure façon de traiter avec les milieux Hough directement, peut-être il y a une sorte de circularité rempli opération morphologique que je ne connais pas.

est ici une image d'entrée exemple:

enter image description here

Vous pouvez supposer que l'image d'entrée a été recadrée et a des marges similaires comme ci-dessus (j'ai un autre morceau de code qui se charge de cela).

+3

Cercles, pourquoi faut-il que ce soit des cercles? Peut-être plus simple de segmenter les blobs rouges/jaunes et d'utiliser leurs centroïdes. – kazemakase

+1

Jetez un oeil à 'cv2.inRange', par ex. [ici] (http://www.pyimagesearch.com/2014/08/04/opencv-python-color-detection/), Vous pouvez facilement segmenter le rouge et le jaune (et éventuellement le bleu) en convertissant d'abord votre image en HSV. – Miki

+0

je recommanderais l'espace de couleur de HSV aussi et la segmentation ou la détection de contour etc. – Micka

Répondre

0

Si Hough est pas une exigence, Id suggère la mise en œuvre d'un algorithme de coulée ray comme décrit ici: https://en.wikipedia.org/wiki/Point_in_polygon

Les étapes générales sont les suivantes:

  1. Créer un masque pour les cercles rouges
  2. Exécuter la projection de rayons sur les colonnes x espacées de y pour déterminer le nombre et la position des rouges
  3. Répéter les étapes 1 & 2 pour le jaune

Puisque vous travaillez en RVB, le contraste des couleurs devrait être suffisant pour vous donner de bons résultats.

0

En supposant que votre grille maintiendra sa position, le plus simple serait de configurer une région d'intérêt fixe pour chaque emplacement et de mesurer leurs valeurs de teinte chaque fois que vous changez quelque chose.