Je travaille sur un projet où j'ai une fonctionnalité dans une image décrite comme un ensemble de coordonnées X & Y (5-10 points par caractéristique) qui sont uniques pour cette fonctionnalité. J'ai aussi une base de données avec des milliers de fonctionnalités où chacun a le même type de descripteur. Le résultat ressemble à ceci:Rapide (er) façon de faire correspondre la fonctionnalité à la base de données
myFeature: (x1,y1), (x2,y2), (x3,y3)...
myDatabase: Feature1: (x1,y1), (x2,y2), (x3,y3)...
Feature2: (x1,y1), (x2,y2), (x3,y3)...
Feature3: (x1,y1), (x2,y2), (x3,y3)...
...
Je veux trouver la meilleure correspondance entre myFeature et myDatabase.
Quel est le moyen le plus rapide de faire correspondre ces fonctionnalités? À l'heure actuelle je quitte que chaque élément dans la base de données et en comparant chaque point:
bestScore = 0
for each feature in myDatabase:
score = 0
for each point descriptor in MyFeature:
find minimum distance from the current point to the...
points describing the current feature in the database
if the distance < threshold:
there is a match to the current point in the target feature
score += 1
if score > bestScore:
save feature as new best match
Cette recherche fonctionne, mais clairement il obtient péniblement lent sur de grandes bases de données. Est-ce que quelqu'un connaît une méthode plus rapide pour effectuer ce type de recherche, ou du moins s'il existe un moyen d'exclure rapidement des fonctionnalités qui ne correspondent pas au descripteur?
Cela suppose un peu par fonctionnalité correcte et le stockage du masque de bits dans une colonne de base de données?Quelle est la limite pratique du nombre de fonctions pouvant être représentées dans un masque de bits et quel type de données utiliseriez-vous pour le stockage? – orangepips
Le problème ici est que les caractéristiques ne seront pas exactes, dans ma fonction de recherche une coordonnée pourrait être (120, 30) et dans sa correspondance correspondante dans la base de données c'est (121, 28). Pour contourner cela, j'ai besoin d'une comparaison approximative, c'est pourquoi le seuil est utilisé. – Mikael
Serrez ensuite votre matrice, par exemple prenez 4 points et faites-en une position dans le bitset. Cela va le rendre flou (fonctionne comme l'abaissement de la dpi d'un fichier image) – Falcon