IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

OpenCV Discussion :

Image Matching difficulté


Sujet :

OpenCV

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Expert sécurité informatique
    Inscrit en
    Juillet 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Expert sécurité informatique

    Informations forums :
    Inscription : Juillet 2018
    Messages : 3
    Points : 0
    Points
    0
    Par défaut Image Matching difficulté
    Bonsoir à tous,

    J'ai un petit problème à matcher 2 images.
    J'ai une image en JPG que j'ai imprimé et que j'ai fixé au plafond, j'aimerais à partir de cette image JPG et d'une photo du plafond où l'image se situe matcher les 2 éléments.

    Je suis totalement débutant dans le domaine et je comprends mieux les enjeux chaque jour, mais je ne comprends pas pourquoi il n'arrive pas à matcher le cavalier ? Image trop mauvaise ?

    Voici mon code en PYTHON :

    Code Python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    import numpy as np
    import cv2
    from matplotlib import pyplot as plt
     
    nameImg1 = 'img/knight.jpg'
    nameImg2 = 'img/h1.jpg'
     
    img1 = cv2.imread(nameImg1,0)
    fast1 = cv2.FastFeatureDetector_create()
    kp1 = fast1.detect(img1,None)
    brisk1 = cv2.BRISK_create();
    kp1, des1 = brisk1.compute(gray1, kp1)
     
    img2 = cv2.imread(nameImg2,0)
    fast2 = cv2.FastFeatureDetector_create()
    kp2 = fast2.detect(img2,None)
    brisk2 = cv2.BRISK_create();
    kp2, des2 = brisk2.compute(gray2, kp2)
     
    MIN_MATCH_COUNT = 10
     
     # BFMatcher with default params
    bf = cv2.BFMatcher()
    matches = bf.knnMatch(des1,des2, k=2)
     
    # Apply ratio test
    good = []
    for m,n in matches:
    	if m.distance < 0.7*n.distance:
    		good.append([m])
    # cv2.drawMatchesKnn expects list of lists as matches.
    img3 = cv2.imread('', 0)
    img3 = cv2.drawMatchesKnn(img1,kp1,img2,kp2,good,img3,flags=2)
     
    if len(good)>MIN_MATCH_COUNT:
    	src_pts = np.float32([ kp1[m.queryIdx].pt for m in good ]).reshape(-1,1,2)
    	dst_pts = np.float32([ kp2[m.trainIdx].pt for m in good ]).reshape(-1,1,2)
     
    	M, mask = cv2.findHomography(src_pts, dst_pts, cv2.RANSAC,5.0)
    	matchesMask = mask.ravel().tolist()
     
    	h,w,d = img1.shape
    	pts = np.float32([ [0,0],[0,h-1],[w-1,h-1],[w-1,0] ]).reshape(-1,1,2)
    	dst = cv2.perspectiveTransform(pts,M)
    	img2 = cv2.polylines(img2,[np.int32(dst)],True,255,3, cv2.LINE_AA)
    else:
    	#print "Not enough matches are found - %d/%d" % (len(good),MIN_MATCH_COUNT)
    	print ("Not enough matchs are found")
    	matchesMask = None
     
    draw_params = dict(matchColor = (0,255,0), # draw matches in green color
    				   singlePointColor = None,
    				   matchesMask = matchesMask, # draw only inliers
    				   flags = 2)
     
    img4 = cv2.drawMatchesKnn(img1,kp1,img2,kp2,good,None,flags=2)
     
    plt.imshow(img3, 'gray'),plt.show()

    Et voici le résultat :
    Nom : fastDetectorMATCHING.jpg
Affichages : 187
Taille : 97,3 Ko

    Tout aide et la bienvenue !

    Merci d'avance !

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Mars 2011
    Messages : 13
    Points : 26
    Points
    26
    Par défaut
    J'ai peu d'expérience en matching mais naïvement, je me demande si ton détecteur résiste au flip.
    Flip ton image de référence pour voir pour qu'il soit dans le même sens que l'image.

    J'essaye de voir si je trouve un truc.

    Quand tu appelles drawMatchesKnn, l'argument n'est pas good mais matches.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    img3 = None
    img3 = cv2.drawMatchesKnn(img1, kp1, img2, kp2, matches,outImg=None, flags=2,matchColor=(255,255,0))
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if m.distance < 0.7*n.distance:
    Ta valeur 0.7 n'est pas bonne. Augmente la ...

Discussions similaires

  1. image matching method
    Par ines_ouni dans le forum Traitement d'images
    Réponses: 0
    Dernier message: 10/06/2013, 14h30
  2. métaheuristique pour l'appariement d'image ( image matching)
    Par aymench1985 dans le forum Traitement d'images
    Réponses: 1
    Dernier message: 21/04/2013, 11h58
  3. "Matching" d'images - Methodologie
    Par sjunod dans le forum Traitement d'images
    Réponses: 13
    Dernier message: 18/02/2009, 11h36
  4. pattern matching (image processing)
    Par anatore dans le forum Traitement d'images
    Réponses: 8
    Dernier message: 15/10/2007, 16h01
  5. Réponses: 2
    Dernier message: 22/05/2007, 16h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo