2017-06-14 7 views
1

Étant donné une image en échiquier, la fonction OpenCV (Matlab et etc.) peut détecter très précisément les coins de l'échiquier.Comment détecter un coin d'échiquier?

Maintenant, je n'ai qu'un seul coin en forme de damier (voir les deux images ci-jointes), comment puis-je détecter précisément le point d'angle? Y a-t-il des fonctions disponibles?

Si ce n'est pas le cas, quelqu'un pourrait-il me dire les détails de l'implémentation de la recherche de coins d'échiquier dans OpenCV? Peut-être que je peux utiliser l'idée similaire pour implémenter moi-même la détection d'un seul échiquier.

Merci.

enter image description here

enter image description here

+1

avez-vous essayé la fonction [findChessboardCorners] (http://docs.opencv.org/2.4/modules/calib3d/doc/camera_calibration_and_3d_reconstruction.html#findchessboardcorners) d'OpenCV? – api55

+0

Cela ne fonctionne pas, car ce n'est pas un échiquier. –

+0

Il n'a pas besoin d'être un échiquier, de toute façon, vous pouvez essayer la méthode qui se trouve derrière, le [détecteur de coin harris] (http://docs.opencv.org/2.4/modules/imgproc/doc/feature_detection. html # cornerharris), puis utilisez [cornerSubPix] (http://docs.opencv.org/2.4/modules/imgproc/doc/feature_detection.html#cornersubpix) pour obtenir une position plus précise de celui-ci (sous-pixel) – api55

Répondre

1

Vous pouvez utiliser le Harris Corner detector pour trouver le coin de l'image. Si vous avez la boîte à outils de traitement d'image MATLAB vous pouvez utiliser la fonction corner() pour détecter le coin: https://uk.mathworks.com/help/images/ref/corner.html

code Matlab pour détecter le coin:

image = imread('E8UD1.png'); 
imageGray = rgb2gray(image); 
C = corner(imageGray); 
imshow(imageGray); 
hold on; 
plot(C(:,1), C(:,2), 'r*'); 

Mise à jour après commentaire

Le corner() fonction fait un travail décent dans la détection des coins, mais vous avez raison, vous obtenez des valeurs aberrantes, je recommanderais plutôt un algorithme plus élaboré, il est appelé Shi-Tomasi Corner Detector & Good Features to Track

Voici les résultats que je reçois quand je lance la nouvelle image:

enter image description here

pas encore parfait, mais vous pouvez jouer avec les paramètres de la fonction goodFeaturesToTrack()

Voici le code:

import numpy as np 
import cv2 

filename = 'ddNNZ.jpg' 
img = cv2.imread(filename) 
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) 

corners = cv2.goodFeaturesToTrack(gray,1,0.01,10) 
corners = np.int0(corners) 

for i in corners: 
    x,y = i.ravel() 
    cv2.circle(img,(x,y),3,255,-1) 

cv2.imwrite('result.png',img) 
+0

Le coin () peut détecter le point d'intersection dans l'image de très haute qualité. Cependant, pour l'image normale (j'ai ajouté une nouvelle image), la fonction de coin ne peut pas détecter le point d'intersection. En fait, il détecte deux points d'angle entre la région d'intersection des deux rectangles noirs. Peut-être avons-nous besoin d'une méthode pour fusionner les deux points d'angle. –

+0

C'est étrange parce que quand j'exécute l'image par la fonction 'corner()' je reçois un seul pixel retourné, que vous pouvez dessiner en utilisant cette ligne de code 'plot (C (:, 1), C (:, 2), 'r *'); 'en supposant que C contienne les coordonnées X et Y du coin. Je vais éditer la réponse avec un peu de code. –

+0

S'il vous plaît tester de nouvelles images que je viens d'ajouter. Ces images sont des images prises par des caméras. L'image précédente est l'image parfaite générée par la fonction dans l'écran. –