2017-10-16 3 views
2

Mon but est d'essayer d'isoler le tribunal dans le cadre ci-dessous et de décrire ce: enter image description hereComment puis-je isoler plus efficacement un terrain de basket en utilisant OpenCV?

J'utilise OpenCV pour Python et voici mes résultats après avoir pris les mesures suivantes:

  1. convertir l'image à HSV
  2. pixels d'isolement dans une plage de teinte donnée
  3. le développement d'un masque binaire
  4. -ET
  5. Utilisation de détection de bord de Canny

Voici mon masque: enter image description here

Et voici le résultat de mon détecteur de Canny: enter image description here

Comme vous pouvez le voir, mon détecteur Canny effectué très mal et il y a beaucoup de le bruit dans mon masque. J'ai essayé certaines techniques, notamment l'érosion et la dilatation, mais elles n'ont pas beaucoup aidé. Que puis-je faire d'autre pour être sûr que lorsque je passerai le masque sur le transformateur Hough Line, je pourrai détecter les bords du court?

Voici un code de référence:

img = cv2.imread('imgs/bulls.jpg') 
hsv_img = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) 

court_color = np.uint8([[[160,221,248]]]) 
hsv_court_color = cv2.cvtColor(court_color, cv2.COLOR_BGR2HSV) 
hue = hsv_court_color[0][0][0] 

# define range of blue color in HSV 
lower_color = np.array([hue - 10,10,10]) 
upper_color = np.array([hue + 10,255,255]) 

# Threshold the HSV image to get only blue colors 
mask = cv2.inRange(hsv_img, lower_color, upper_color) 

# Bitwise-AND mask and original image 
res = cv2.bitwise_and(img,img, mask= mask) 

plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB)), plt.title('Original Image'), plt.show() 
plt.imshow(mask, cmap='Greys'), plt.title('Mask'), plt.savefig('imgs/mask.jpg'), plt.show() 

# Erosion 
kernel = np.ones((2,2),np.uint8) 
erosions2 = cv2.erode(mask,kernel,iterations = 5) 

# Dilation 
dilation = cv2.dilate(mask,kernel,iterations = 3) 

# Opening 
opening = cv2.morphologyEx(mask, cv2.MORPH_OPEN, kernel) 

# Closing 
closing = cv2.morphologyEx(mask, cv2.MORPH_CLOSE, kernel) 

EDIT: Je cherche à reproduire cette recherche: web.stanford.edu/class/ee368/Project_Spring_1415/Reports/.... Je veux isoler le terrain en détectant les lignes droites qui le délimitent afin que je puisse éventuellement utiliser l'homographie pour trouver les coordonnées des joueurs sur le terrain.

+0

Qu'est-ce que vous voulez réellement obtenir à la fin? Avez-vous besoin d'un masque pour le cadre? –

+0

@SergAnuke Je tente de reproduire cette recherche: https://web.stanford.edu/class/ee368/Project_Spring_1415/Reports/Cheshire_Halasz_Perin.pdf. Je veux isoler le terrain en détectant les lignes droites qui le délimitent afin que je puisse éventuellement utiliser l'homographie pour trouver les coordonnées des joueurs sur le terrain. – haroon7

Répondre

1

La détection de lignes Hough sur l'image est votre meilleure option dans ce cas, car les couleurs du court peuvent changer d'un endroit à l'autre et également les paramètres de l'appareil photo. Détecter les lignes, et un traitement supplémentaire en utilisant des patchs de couleur uniforme devrait vous permettre de segmenter la région de la cour avec une certaine précision.

+0

Le seul problème est qu'il y a beaucoup de bruit à moins que je ne sois capable d'isoler le court du reste du cadre autant que possible. Je travaille actuellement à trouver les meilleurs moyens d'isoler le terrain et j'ai de la difficulté à me débarrasser du bruit de la foule et d'autres objets non pertinents dans chaque image. – haroon7