Comparer deux images par histogrammes

Fermé
info2015 Messages postés 6 Date d'inscription mercredi 28 janvier 2015 Statut Membre Dernière intervention 10 mars 2015 - 28 janv. 2015 à 17:10
KX Messages postés 16752 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 août 2024 - 30 janv. 2015 à 20:11
bonjour
je suis entrain de développez une application de détection de mouvement qui permet de comparer les images successives d'un flux de vidéo par Histogrammes .
j'arrive a maintenant a faire le procédure qui calcule l'histogramme d'une image et il étude la valeur rouge, vert et bleu de chaque et de le stocké sur les trois tables.
public void calculhist(){
BufferedImage img=ImageIO.read(new FileInputStream("noir.jpg"));
int w = img.getWidth();
int h = img.getHeight();
int n;
int bleu = 0, green = 0,red = 0 ;
int [] Tb=new int[256];
int [] Tg=new int[256];
int [] Tr=new int[256];
for(int i=0;i<w;i++){
n=0;
for(int j=0;j<h;j++){
n=img.getRGB(i, j);
bleu = n>> 0 & 0xff;
green = n>> 8 & 0xff;
red = n >> 16 & 0xff;
Tb[bleu]++;
Tg[green]++;
Tr[red]++;
}
}
}

mon but c'est de comparer deux images en utilisent les tables de couleur qui est déjà rempli.
puis renvoyer la différence entre les deux images comme pourcentage.
A voir également:

1 réponse

KX Messages postés 16752 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 août 2024 3 019
28 janv. 2015 à 17:26
Bonjour,

Et du coup c'est quoi ta question ?
0
info2015 Messages postés 6 Date d'inscription mercredi 28 janvier 2015 Statut Membre Dernière intervention 10 mars 2015
28 janv. 2015 à 20:05
mon question c'est comment comparer deux images par histogrammes ?
0
KX Messages postés 16752 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 août 2024 3 019
28 janv. 2015 à 21:28
Ça dépend, c'est quoi le résultat que tu veux obtenir ?

Personnellement quand je regarde ton code, je ne vois pas trop où tu vas...

Tu stockes le nombre de fois où chaque composante RGB est représentée, tout pixel confondu.
Admettons, mais en quoi est-ce représentatif de l'image ? Puisque tu ne conserves pas les positions des pixels, tu perds la forme de l'image, la seule chose que tu gardes c'est une répartition des couleurs (très abstraite).

Ensuite tu veux "comparer" deux images, pour moi une comparaison ça signifie que l'on peut dire si A < B, A = B, ou A > B. Mais pour une image ça n'a pas de sens ! Qui plus est lorsque tu obtiens avec des histogrammes ce ne sont pas des représentations des images, mais une pseudo palette de couleurs qui doit pas dire grand chose, alors les comparer... pour obtenir quoi ?

Exemples : je prends deux images et je calcule leurs histogrammes avec ton code.
Et bien franchement, je ne vois pas bien ce que tu veux en déduire !





0
KX Messages postés 16752 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 août 2024 3 019 > KX Messages postés 16752 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 août 2024
28 janv. 2015 à 23:11
Quitte à faire des histogrammes, je trouverais plus pertinent de regarder la teinte HSV des pixels.

Voici par exemple ce que cela donnerait pour les deux mêmes images.


Ici on peut clairement identifier la séparation qu'il y a entre les teintes bleutées du ciel et du lac, et les teintes vertes de la forêt.

Et dans celui-ci on voit - encore plus nettement - la séparation qu'il y a entre le cyan de la cascade et du lac, et le jaune orangé de la montagne.

Autre avantage de l'utilisation du HSV : au lieu d'avoir 3 histogrammes tu n'en as plus qu'un...
Par contre je ne crois toujours pas que cela ait un sens de parler de "comparaison".
0
info2015 > KX Messages postés 16752 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 août 2024
29 janv. 2015 à 21:47
merci pour votre attention KX
mon but en général et de calculer le pourcentage de mouvement entre les images successives d'un flux de vidéo.
par exemple si je prend webcam je compare chaque deux images pour calculer le pourcentage de mouvement entre les deux images
ce qui est important pour moi et le pourcentage de mouvement entre chaque deux image qui se suive
0
KX Messages postés 16752 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 août 2024 3 019 > info2015
29 janv. 2015 à 22:40
Oui mais pour détecter les mouvements il faudrait faire des calculs sur les formes dans l'images, là tu ne t'intéresses qu'aux couleurs, c'est un peu faible.

Ou alors, il faudrait découper ton image en plusieurs secteurs, faire des histogrammes de couleurs dessus, et analyser les différences de couleurs sur chaque secteur. Si un objet se déplace, certains secteurs vont changer de couleurs et pas d'autres. On pourra alors calculer ton pourcentage en fonction du nombre de secteurs qui ont (beaucoup) changés.

Remarque : je te conseilles de partir sur un histogramme de teinte comme j'ai fait, d'une part ça ne traite que la teinte, ce qui évite de repérer des différences avec des problèmes d'éclairage par exemple. D'autre part comme je le disais il n'y a qu'un seul histogramme, c'est donc plus concis.
Sans parler du sens de l'histogramme de teinte qui est plus intuitive que celui des trois histogrammes que tu proposais...
0