OpenCV: image dactyloscopique et comparer avec la base de données

j'ai une base de données d'images. Quand je prends une nouvelle image, je veux la comparer avec les images dans cette base de données et recevoir un score de similarité (en utilisant OpenCV). de Cette façon, je veux détecter, si j'ai une image, qui est très similaire à la douce image.

est-il possible de créer une empreinte digitale/hachage de mes images de base de données et d'en comparer de nouvelles?

je cherche un extrait de code alogrithm ou un extrait technique démo et pas pour une solution commerciale.

le Meilleur

Stefan

8
demandé sur Stefan 2011-08-26 17:37:39

3 réponses

comme L'a commenté Pual R, cette" empreinte digitale/hachage " est habituellement un ensemble de vecteurs de fonctionnalités ou un ensemble de descripteurs de fonctionnalités. Mais la plupart des vecteurs de fonctionnalité utilisés dans la vision informatique sont généralement trop coûteux sur le plan informatique pour effectuer des recherches dans une base de données. Cette tâche nécessite donc un type particulier de descripteurs de fonctionnalités, car des descripteurs tels que SURF et SIFT prendront trop de temps pour la recherche, même avec diverses optimisations.

la seule chose Qu'OpenCV a pour votre la tâche (catégorisation des objets) est la mise en œuvre de sac de mots visuels (BOW).

il peut calculer le type spécial des traits d'image et former le vocabulaire visuel de mots. Ensuite, vous pouvez utiliser ce vocabulaire pour trouver des images similaires dans votre base de données et de calculer le score de similarité.

Voici documentation OpenCV pour sac de mots. OpenCV a aussi un échantillon nommé bagofwords_classification.cpp . Il est vraiment grand, mais pourrait être utile.

10
répondu Andrey Kamaev 2011-08-26 14:44:32

les systèmes de recherche d'images basés sur le contenu sont encore un domaine de recherche active: http://citeseerx.ist.psu.edu/search?q=content-based+image+recherche

vous devez D'abord être clair, ce qui constitue similaire dans votre contexte:

  1. répartition des couleurs similaire: utilisez quelque chose comme descripteurs de couleurs pour les subdivisions de l'image, vous devriez obtenir des résultats assez satisfaisants.
  2. objets similaires: comme l'ordinateur ne sait pas ce qu'est un objet, vous n'irez pas très loin, à moins que vous n'ayez une connaissance étendue du domaine de l'objet (ou de quelques classes d'objet). Un bon aperçu de l'état actuel de la recherche peut être vu ici ( résultats ) et bientôt ici .

Il n'y a pas de "répondre à tous les besoins"-algorithme pour le problème que vous décrire. Plus vous pouvez partager sur les détails de votre problème, les meilleures réponses que vous pourriez obtenir. Il est également très utile d'Afficher des images représentatives (si possible) et de décrire le résultat souhaité.

ce serait une bonne question pour computer-vision.stackexchange.com , si elle existait déjà.

2
répondu bjoernz 2011-08-26 15:47:32

vous pouvez utiliser pHash algorithme et stocker phash valeur dans la base de données, puis utiliser ce code:

double const mismatch = algo->compare(image1Hash, image2Hash);

ici la valeur 'discordance' peut facilement vous dire le rapport de similarité entre deux images.

fonction pHash:

  1. AverageHash
  2. PHASH
  3. MarrHildrethHash
  4. RadialVarianceHash
  5. BlockMeanHash
  6. BlockMeanHash
  7. ColorMomentHash

ces fonctions sont suffisantes pour évaluer les similitudes D'Image dans tous les Aspects.

0
répondu Rajeev Ranjan 2016-10-04 13:31:22