2010-10-26 27 views
5

Si j'ai deux images qui sont à la fois la vue latérale gauche d'une même chaussure dans des styles différents, comment puis-je déterminer par quelle (s) couleur (s) elles diffèrent? Peut-être que c'est une chaussure dans deux styles, un style a des lacets roses et un côté blanc, l'autre a des lacets blancs et un côté jaune. Je veux:J'ai besoin de comparer deux images pour voir quelle (s) couleur (s) sont différentes. Des algorithmes de niveau moyen?

image One Couleurs: C1 = Rose, C2 = Blanc

image Deux Couleurs: C1 = Blanc, C2 = jaune

Pas de super Algorithmes de haut niveau, mais je ne besoin du code implémenté réel soit. Peut-être juste des boucles, structures de données, conditions ..

La partie réelle de la chaussure de l'image sera sur un fond blanc. Ce seront des photos similaires à ce que vous verriez sur endless.com ou zappos.com, elles sont donc très similaires, mais nécessitent une certaine tolérance.

+0

Pour une raison ou pour une autre, la quantification, les compartiments et la recherche d'images basée sur le contenu nous viennent à l'esprit. Juste à la recherche d'un vieux cours qui peut aider à faire la lumière ... – brumScouse

+0

Cela semble être un cauchemar. À moins que les chaussures soient exactement au même endroit et avec la même orientation, vous aurez besoin de quelque chose de très sophistiqué. (Bien sûr, si vous voulez juste des couleurs majeures, cela pourrait être simple.) – JoshD

+0

La position et l'orientation sont faciles. Faire du trottoir pour trouver la chaussure sur le fond, mettre des boîtes de délimitation autour des chaussures, aligner les boîtes. – MStodd

Répondre

3

Comme il semble que vous voulez seulement dire quelles couleurs ils diffèrent par (sans tenir compte de la forme, etc.) et que vous attendez les formes seront très similaires (mais pas identiques), je:

  1. histogrammes couleur Calculer pour chaque image (vous devrez peut-être 3 histogrammes chaque R, G, B)
  2. soustrayez (z = abs(x - y) pour chaque couleur)
  3. l'identification des pics dans l'histogramme résultant (s)

Lorsqu'une zone significative est colorée différemment dans chaque image, vous obtenez deux pics élevés dans l'histogramme final. (Drop the abs() si vous avez besoin de dire qui est qui.)

[EDIT] Comme Jilles de l'esprit l'indique, il est préférable de regarder à des fréquences de (R, G, B) triplets au lieu de couleurs individuelles (c.-à- pour chaque image, créez un gros histogramme de taille 256 * 256 * 256 au lieu de 3 histogrammes de taille 256). Mais dans ce cas, le vecteur de l'histogramme est énorme et susceptible d'être principalement rempli de zéros, donc c'est une bonne idée de quantifier les intensités de 256 à 16 niveaux, donnant un vecteur 16 * 16 * 16 plus maniable.

+0

C'est une approche intéressante. On dirait que ça devrait faire l'affaire. – MStodd

+1

Ne pas faire d'histogrammes séparés pour R, G et B. La combinaison de R, G, B rend la couleur. Une chaussure rouge avec des lacets jaunes sur un fond noir conduirait à des pics dans les histogrammes R, G et B autour de 255 et 0 et vous ne sauriez pas quelle couleur leur a causé (peut être rouge, bleu et vert, ou vert et violet , ou rouge et cyan, etc.) Sinon, trouver des pics dans l'histogramme est l'approche la plus sensée. –

+0

@jilles: Voulez-vous dire enregistrer la fréquence de chaque (R, G, B) triple? Ça a l'air d'être une bonne idée. Dans ce cas, une quantification est probablement utile pour éviter de traiter des vecteurs 256 * 256 * 256 très clairsemés. –

0

Vous devriez pouvoir utiliser quelque chose le long des lignes de la commande 'diff' dans bash, pour comparer directement le contenu des deux fichiers. Ensuite, vous pouvez analyser ces données, les transformer en couleurs (en utilisant un graphique hexadécimal pour vous aider) et imprimer les différentes couleurs. Pour obtenir des résultats cohérents de diff, je recommande de le mettre dans un fichier texte, puis de traiter le fichier texte. Quelque chose comme 'diff fichier1.jpeg file2.jpeg> differences.txt'

Cela peut être fait à partir d'un programme C assez facilement. Ceci est, cependant, une solution pour un système basé sur unix, je ne sais pas si Windows a l'opération disponible.

+0

Comme je vais travailler avec des images compressées, et non des bitmaps, je ne pense pas que diff soit une option. En outre, il s'agira de photographies, j'ai donc besoin d'un certain degré de tolérance. – MStodd