2011-03-03 4 views
1

J'ai actuellement un programme Java qui va obtenir les valeurs rgb pour chacun des pixels dans une image. J'ai aussi une méthode pour calculer une ondelette de Haar sur une matrice de valeurs 2D. Cependant je ne sais pas quelles valeurs je devrais donner à ma méthode qui calcule l'ondelette de Haar. Devrais-je faire la moyenne de chaque valeur de pixels rgb et de l'ordinateur une ondulation de haar sur cela? ou peut-être juste utiliser 1 de r, g, b. J'essaie de créer une empreinte digitale unique pour une image. J'ai lu ailleurs que c'était une bonne méthode car je peux prendre le produit scalaire de 2 ondelettes pour voir à quel point les images sont semblables les unes aux autres.Quelles valeurs d'une image dois-je utiliser pour produire une ondelette de haar?

Veuillez me faire connaître les valeurs sur lesquelles je devrais calculer une ondelette Haar. Merci Jess

Répondre

2

Vous devriez considérer les composants R/G/B comme images différentes: Créer une matrice R, G et B, puis appliquer l'ondelette à des parties de ceux indépendamment.

Vous reconstruisez ensuite les images R/G/B à partir des 3 canaux compressés en ondelettes et vous les combinez finalement à un bitmap à 3 canaux.

0

Depuis eznme n'a pas répondu à votre question (Vous voulez empreintes digitales, il explique la compression et la reconstruction), voici une méthode que vous allez souvent rencontré:

Vous séparer la couleur et la luminosité des informations (chrominance et Luma), et les peser différemment. Parfois, vous jetez même la chrominance et utilisez simplement la partie luma. Cela réduit considérablement la taille de votre empreinte digitale (~ facteur 3) et prend en compte la façon dont nous percevons une image - principalement par la luminosité locale, et non par la couleur absolue. En prime vous gagnez de la robustesse en ce qui concerne la manipulation des couleurs de l'image.

La séparation peut être effectuée de différentes manières, par ex. la transformation de votre image RVB en ou YIQ espace colorimétrique. Si vous voulez seulement conserver le composant luma, ces deux espaces de couleur sont équivalents. Cependant, ils encodent la chrominance différemment. est ici la transformation linéaire pour la luma Y du RGB: Y = 0,299 * R + 0,587 * G + 0,114 * B

Lorsque vous regardez les mathématiques, vous remarquez que nous ne faisons rien d'autre que de créer une image en niveaux de gris - en tenant compte du fait que nous percevons le vert plus lumineux que le rouge et le rouge que le bleu quand ils sont tous numériquement égaux. Si vous souhaitez conserver un peu d'informations de chrominance, afin de conserver une empreinte aussi concise que possible, vous pouvez réduire la résolution des deux composants U et V (8 bits chacun). Donc, vous pouvez les joindre en une seule valeur de 8 bits en réduisant leurs informations à 4 bits et en les combinant avec l'opérateur de décalage (ne sais pas comment cela fonctionne en Java). La chrominance devrait peser moins par rapport à la luma, dans le calcul final de la distance entre les empreintes digitales (le produit scalaire que vous avez mentionné).

Questions connexes