Bonjour,

Nous voulons détecter les images en utilisant le descripteur de l'image afin de pouvoir retrouver les k plus proches voisins. A cet effet, nous avons utilisé la fonction kmatch de la librairie opencv mais les résultats ne sont pas satisfaisants donc nous avons cherché un peu partout mais toujours les mêmes fonctions sont utilisées . Nous vous demandons de regarder notre algorithme pour améliorer afin de trouver des bons résultats.

Code : 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
def keypointsMatcher(queryImage, testFolder = "./test", modelFolder= "./model", distancePercentage=0.75):
 
    sift = cv2.xfeatures2d.SIFT_create()
    img1 = cv2.imread(os.path.join(testFolder, queryImage), 0)  # queryImage
 
    # find the keypoints and descriptors with SIFT
    kp1, des1 = sift.detectAndCompute(img1, None)
 
    # read through the model folder
    listOfModel = os.listdir(modelFolder)
    print("Number of models "+str(len(listOfModel)))
    print(len(des1))
    print(len(kp1))
 
    numberKpToSelect = len(kp1)//3
    lilstOfSelectedModel = []
 
    for model in listOfModel:
        keyAndDescriptor = readDescriptorFileAndDrawKp(model)
        kp2 = keyAndDescriptor[0]
        print('kp2', len(kp2))
        print('borne', len(kp1) - numberKpToSelect, 'borne', len(kp1) + numberKpToSelect)
 
        if (len(kp2) >= len(kp1) - numberKpToSelect) and (len(kp2) <= len(kp1) + numberKpToSelect):
            des2 = keyAndDescriptor[1]
            print('first')
            # BFMatcher with default params
            bf = cv2.BFMatcher()
            matches = bf.knnMatch(des2, des1, k=2)
 
            # Apply ratio testold
            good = []
 
            if len(np.array(matches).shape) == 2 and np.array(matches).shape[1] == 2:
                for m, n in matches:
                    if (m.distance < distancePercentage*n.distance):
                        good.append([m])
                #rapport = len(good)/ len(kp1)
                #if rapport >= 0.6:
                lilstOfSelectedModel.append(model)
                print(model, " ", "selected  rapprot")
 
    #print(lilstOfSelectedModel)
    seen = []
    for ob in lilstOfSelectedModel:
        filename = ob.split("__")[0]
        seen.append(filename)
    listSeen = Counter(seen)
    for element in listSeen:
        print(element,' ', listSeen[element], "  ",countCategoryElement(element), listSeen[element]/countCategoryElement(element))
    print(len(lilstOfSelectedModel))
Merci cordialement