2016-04-11 15 views
7

È possibile rilevare il lato superiore di un dado? Mentre questo sarà un compito facile se guardi dall'alto, da molte prospettive sono visibili più lati.Rilevamento del lato superiore di un dado

Ecco un esempio di un dado, si sentono liberi di prendere le tue foto: enter image description here

di solito si vuole conoscere il punteggio che hai raggiunto. È facile per me estrarre TUTTI i punti, ma come estrarli solo in alto? In questo caso speciale, il lato superiore è il più grande, ma questo potrebbe non essere sempre vero. Sto cercando qualcosa che valuti la distorsione del quadrato superiore (o cerchio in questo caso, che posso estrarre) in relazione alla prospettiva data dalla griglia in basso.

Il programma di esempio con alcuni risultati è riportato di seguito.

import numpy as np 
import cv2 

img = cv2.imread('dice.jpg') 


# Colour range to be extracted 
lower_blue = np.array([0,0,0]) 
upper_blue = np.array([24,24,24]) 

# Threshold the BGR image 
dots = cv2.inRange(img, lower_blue, upper_blue) 

# Colour range to be extracted 
lower_blue = np.array([0,0,0]) 
upper_blue = np.array([226,122,154]) 

# Threshold the BGR image 
upper_side_shape = cv2.inRange(img, lower_blue, upper_blue) 

cv2.imshow('Upper side shape',upper_side_shape) 
cv2.imshow('Dots',dots) 

cv2.waitKey(0) 
cv2.destroyAllWindows() 

Alcune immagini risultanti: enter image description here

+1

Il modo più semplice è quello di definire l'area qualificato di ciascun punto bianco. In sostanza, il punto bianco dovrebbe essere di almeno 40-50 px o qualcosa del genere. Questo è un approccio. – Adib

+1

Penso di vedere cosa intendi: il tuo punto è che, indipendentemente dalla prospettiva, all'interno di un lato, la dimensione dei punti sarebbe sempre quasi uniforme. Se poi cerco il punto che si trova nella posizione più alta, dovrei solo contare tutti i punti che sono di uguaglianza di "uguale" dimensione essendo definiti dalla distanza delle dimensioni rispetto agli altri punti e appartengono a un motivo a punti distorto che – tfv

+0

Questo è corretto.È possibile basare le cose sulla tolleranza rispetto al punto più grande.Ad esempio, se il punto più grande è 45px, è possibile impostarlo come massimo, e quindi è possibile impostare la tolleranza di -2. i tuoi punti dovrebbero essere nel range di 44-45 (dato che 45 è massimo) – Adib

risposta

1

La soluzione migliore è dimensione dei punti, di cui ho parlato nel commento. Si trova il punto più grande, lo si considera come massimo e quindi si crea un livello di tolleranza.

Ma cosa succede se tutti i punti sono quasi uguali (osservandolo dal bordo ad angolo che rende le cose equidistanti), o anche troppo piccolo? La soluzione migliore è creare un confine per catturare i punti. Ciò richiede l'analisi del bordo del dado (fondamentalmente il rilevamento dei bordi), ma una volta definito il limite, sei solido.

Tutto ciò che serve è catturare i bordi dei dadi dalla prospettiva che stai vedendo.

Ecco un esempio visivo:

enter image description here

Dal momento che si dispone di un set di confine virtuale, sarà sufficiente misurare punti sopra di un punto specifico sulla y.

1

La dimensione del punto è un buon euristico, ma aggiungerei anche la rotondità del punto: se si calcola il secondo ordine image moments dei punti binarizzati, più il momento xey è simile, più arrotondato alla cifra. Questo naturalmente fallirà, come le dimensioni, per una vista laterale, ma cosa significa "top-side" significa davvero se non riesci a percepire la gravità ..

0

perché provare a tagliare l'immagine? in base a quali numeri vedi a lato puoi dedurre quale numero è in alto. i tuoi numeri di parte possono essere utilizzati come assegno per convalidare la tua ipotesi.

nota che dovrete stare attenti a manualità (vedi: http://mathworld.wolfram.com/Dice.html)

Problemi correlati