Je vous recommandons d'envisager de déménager loin de simplement à l'aide d'un histogramme RVB.
Mieux digérer de votre image peut être obtenu que si vous prenez un 2d Haar en ondelettes de l'image (c'est beaucoup plus facile que cela puisse paraître, c'est juste un lot de calcul de la moyenne et des racines carrés utilisés pour le poids de votre coefficients) et il suffit de conserver les k plus grand pondérée des coefficients en ondelettes comme un sparse vecteur, normaliser, et de les enregistrer afin de réduire sa taille. Vous devez redimensionner, R, G et B à l'aide de perception des poids à l'avance au moins j'aurais recommandons de passer à l'espace YIQ (ou YCoCg, pour éviter le bruit de quantification) de sorte que vous pouvez échantillon de chrominance de l'information avec une baisse de l'importance.
Vous pouvez maintenant utiliser le produit scalaire de deux de ces éparses vecteurs normés comme une mesure de similarité. Les paires d'images avec le plus grand point des produits sont très similaires dans leur structure. Ceci a pour avantage d'être peu résistant pour le redimensionnement, la teinte, le décalage et le filigrane, et d'être vraiment facile à mettre en œuvre et compact.
Vous pouvez en échange de stockage et de précision en augmentant ou en diminuant k.
Le tri par un seul score va être intraitable pour ce genre de problème de classement. Si vous pensez cela, il aurait besoin d'images pour seulement être en mesure de "modifier" le long d'un axe, mais ils ne le font pas. C'est pourquoi vous avez besoin d'un vecteur de caractéristiques. Dans les ondelettes de Haar cas sa approximativement à l'endroit où les plus fortes discontinuités dans l'image se produire. Vous pouvez calculer une distance entre les images par paires, mais depuis tout ce que vous avez est une distance métrique linéaire, la commande n'a aucun moyen d'exprimer un triangle de 3 images qui sont tous à distance égale. (c'est à dire penser à une image qui est tout vert, une image qui est tout rouge et une image qui est tout bleu.)
Ce qui signifie que toute véritable solution à votre problème aurez besoin de O(n^2) opérations dans le nombre d'images que vous avez. Alors que si cela avait été possible de linéariser la mesure, vous pourriez avoir besoin de seulement O(n log n), O(n) si la mesure a été adapté pour, disons, un tri radix. Cela dit, vous n'avez pas besoin de dépenser O(n^2) étant donné que, dans la pratique, vous n'avez pas besoin de passer au crible l'ensemble, vous avez juste besoin de trouver le truc c'est plus proche que d'un certain seuil. Donc en appliquant l'une des techniques de partition de votre éparses espace vectoriel, vous pouvez obtenir beaucoup plus rapide asymptotique pour le 'me trouver k des images qui sont de plus en plus semblables-delà d'un certain seuil de" problème de la naïveté de la comparaison de chaque image par rapport à chaque image, vous donnant ce que vous avez probablement besoin... si ce n'est précisément ce que vous avez demandé.
En tout cas, j'ai utilisé il y a quelques années de bon effet, personnellement, en essayant de minimiser le nombre de textures différentes, j'ai été le stockage, mais il y a aussi beaucoup de recherche sur le bruit dans cet espace, la preuve de son efficacité (et dans ce cas, la comparant à une forme plus subtile de l'histogramme de classement):
http://www.cs.princeton.edu/cass/papers/spam_ceas07.pdf
Si vous avez besoin de plus de précision dans la détection, la minHash et tf-idf algorithmes peuvent être utilisés avec les ondelettes de Haar (ou de l'histogramme) pour faire face à des modifications plus robuste:
http://cmp.felk.cvut.cz/~chum/documents/chum_bmvc08.pdf
Enfin, Stanford a une recherche d'images basée sur une plus exotiques variante de ce type d'approche, basée sur le fait de faire plus d'extraction de caractéristiques de la ondelettes pour trouver pivoter ou mettez à l'échelle des sections d'images, etc, mais cela va bien au delà de la quantité de travail que vous aimeriez faire.
http://wang14.ist.psu.edu/cgi-bin/zwang/regionsearch_show.cgi