# Gnral Dveloppement > Algorithme & Mathmatiques > Traitement d'images >  Matrice de cooccurrences pour la comparaison de deux images

## bilzzbenzbilz

bonjour, je veux faire la comparaison entre la texture de deux images.
Comment choisir la taille de la fentre des deux images avant qu'on les applique la matrice de cooccurrence.

----------


## ToTo13

Bonjour,

de mmoire je n'ai rien lu concernant un algorithme qui permettrait de dterminer automatiquement la taille de la fentre.
Je pense qu'il faut que tu fasses des tests sur ta base d'images et voir la taille de fentre qui minimise l'erreur.

----------


## pseudocode

De plus, je dirais que a dpend surtout de la mthode de comparaison.

----------


## bilzzbenzbilz

bonjour pseudocode.
pour comparer deux texture, on peut estimer la similarit entre les matrices de cooccurrence des deux texture.
on a besoin seulement des 4 caractristiques suivants :
Lnergie (T1) :
Lentropie (T2):
Le contraste (T3):
Le moment inverse de diffrence (T4):

La distance entre deux images H, I se calcule par la formule suivante :



par exemple pout l'image ci-dessous, on a pas un probleme de choix de la taille et la position de la fenetre ( on peut prendre toute l'image) .



Mais par contre, pour les deux image que j'ai post dans (post#1], j'ai pas trouv de solution, d'ailleur je me demande comment les systeme de recherche d'image par le contenu utilise le descripteur de texture pour comparer deux textures de deux images?

----------


## pseudocode

> La distance entre deux images H, I se calcule par la formule suivante : (...)


Ok, donc distance euclidienne sur 4 composantes. 




> Mais par contre, pour les deux image que j'ai post dans (post#1], j'ai pas trouv de solution, d'ailleur je me demande comment les systeme de recherche d'image par le contenu utilise le descripteur de texture pour comparer deux textures de deux images?


Une mthode (j'ai dj du en parler) c'est de faire une segmentation par texture. Par exemple, le plus simple c'est de faire un split/merge: Tu dcoupes toute l'image en carrs de taille NxN (par exemple 32x32 ou 64x64) et tu calcules tes 4 coefficients pour chaque carr. Ensuite tu regroupes les carrs voisins qui ont les mmes 4 coefficients (en utilisant ta formule et un seuil d'erreur). Le plus gros rassemblement de carr te donne la plus grosse zone homogne en texture => c'est ces coefficients que tu conserves pour cette image.

----------


## bilzzbenzbilz

Oui, c'est une bonne ide, mais :
que voulez vous dire par segmentation : un dcoupage simple de l'image (c'est  dire dcouper l'image en parties gales), ou bien, un dcoupage en regions homognes, parceque dans le deuxime cas, on ne peut pas savoir  quel niveau on s'arrte lorsqu'on segmente une image.

----------


## pseudocode

> Oui, c'est une bonne ide, mais :
> que voulez vous dire par segmentation : un dcoupage simple de l'image (c'est  dire dcouper l'image en parties gales), ou bien, un dcoupage en regions homognes, parceque dans le deuxime cas, on ne peut pas savoir  quel niveau on s'arrte lorsqu'on segmente une image.


Dcouper en parties gales.  :;):

----------


## bilzzbenzbilz

bonjour pseudocode  ::D:  .

dans la matrice de cooccurrence, est ce qu'il y a une difference entre les martices de taille 32, 64, 128, 256 .

----------


## ToTo13

Bonsoir,

oui, il y a une diffrence  ::(: 
Il faut tester diffrentes valeurs de rduction et garder celle qui convient le mieux  ::(:

----------


## Matthieu Brucher

Effectivement, il n'y a quasiment que a  faire.
Dans le mme temps, tout dpend de la taille de l'image. Sur une image 100x100, on va plutt prendre une taille 32, pour du 10000x10000, conserver l'histogramme complet avec une taille 256 est tout  fait pertinent.

Maintenant, tu compares des images de couleurs, je te suggre donc de taper dans des matrices de cooccurrence intra et intercanales (donc 6 matrices). Aprs, selon que tu veux faire, tu pourras passer aux paramtres de Haralick, mais sache que sur certaines de mes recherches, l'utilisation de tous les paramtres (et pas que 4, c'est trs - trop - rducteur) entranait une dgradation des performances de classification par rapport  l'utilisation des matrices de cooccurrence directement.

----------


## bilzzbenzbilz

bonjour, et merci .
je travaille avec des images de 384x256.

Avant que je compare deux textures de deux images, je fait une conversion des images en niveau de gris 

d'aprs vous, il ne faut pas utiliser que les 4 paramtres?
Quel est le meilleur moyen de comparer deux textures de deux images (aprs transformation en nivea de gris) ?

----------


## Matthieu Brucher

Tout dpend l'objectif final. A mon avis, il ne faut JAMAIS passer en niveau de gris (surtout que ta formule ne l'empche pas). Le concept de distance est trs vari. Le problme dans ton cas est que ta distance n'est pas une vraie distance (si elle est nulle, a ne veut pas dire que tes images sont identiques). Plus tu as de paramtres, mieux c'est. Il me semble que dans les tests que j'avais fait, j'en utilisais 9. Mais une fois de plus, j'ai montr qu'utiliser directement les matrices de coccurrence intra et intercanales pour de la classification tait meilleur (et utiliser au moins les paramtres inter et intracanaux a aussi t dmontr comme tant meilleur que les niveaux de gris). Et la distance que j'utilisais, c'tait la distance quadratique entre les matrices.

Une taille de 32 me parat tre un bon dbut.

----------


## bilzzbenzbilz

J'ai appris que pour utiliser les matrices de cooccurrence, il faut que l'image soit en nivea de gris.
je suis dbutant et je ne sais pas comment utiliser les matrices de cooccurrence directement. De plus, c'est quoi matrice intra et intracanales ? merci.

----------


## pseudocode

> J'ai appris que pour utiliser les matrices de cooccurrence, il faut que l'image soit en niveaux de gris.


La matrice de co-occurrence est un tableau qui indique combien de fois un pixel de couleur Ci est a cot ( une distance D) d'un pixel de couleur Cj.

Les couleurs Ci, Cj, ...peuvent tre des niveaux de gris, ou des couleurs RGB.

Pour viter d'avoir une matrice de taille 16millions x 16millions ( ::aie:: ) on fait une rduction de l'espace des couleurs. Gnralement on se limite a 166 couleurs -> recherche google sur: HSV 166 bins quantization.

----------


## bilzzbenzbilz

bonjour pseudocode  ::D: .



> La matrice de co-occurrence est un tableau qui indique combien de fois un pixel de couleur Ci est a cot ( une distance D) d'un pixel de couleur Cj.


j'ai dja utilis votre algorithme http://www.developpez.net/forums/d41...ture-features/  mais je ne savais pas qu'on peut utiliser des images en couleurs.

----------


## bilzzbenzbilz

est ce qu'il faur passer par l'espace HSV pour quantifier l'espace de couleurs.
Parceque moi, j'utilise l'espace RGB et pour la quatification j'utilise l'algorithme des K-moyenne. merci.

ce que je veux : c'est de calculer la similarit entre deux images  partir de leurs textures, Noubliez pas, je ne vais pas juger les deux images selon seulement leurs textures, j'utilise aussi une distance de similarit de leurs histogramme couleurs (pour comparer les deux images selon leurs couleurs).

----------


## Matthieu Brucher

> J'ai appris que pour utiliser les matrices de cooccurrence, il faut que l'image soit en nivea de gris.
> je suis dbutant et je ne sais pas comment utiliser les matrices de cooccurrence directement. De plus, c'est quoi matrice intra et intracanales ? merci.


intracanal, c'est ce que tu as l'habitude de faire. Tu aurais 3 matrices de cooccurrence. En fait, c'est comme si tu prenais 3 images en niveaux de gris et que tu calculais les matrices de cooccurrence.
Ensuie, intercanal, au lieu de ne travailler que sur une image, tu travailles sur deux images en mme temps. Quand tu augmentes la case i,j de la matrice de coccurrence, tu prends le premier canal pour i et le second pour j.

pseudocode > non, on passe plus par 6 matrices de cooccurrence, c'est plus efficace.

RGB ou HSV, c'est la mme chose, en fait. Et si tu fais de la classification, tu devrais lire quelques publications  ce niveau. Ce que tu fais est largement sous-optimal par rapport  ce qui se fait dans la littrature.

----------


## Matthieu Brucher

> ce que je veux : c'est de calculer la similarit entre deux images  partir de leurs textures, Noubliez pas, je ne vais pas juger les deux images selon seulement leurs textures, j'utilise aussi une distance de similarit de leurs histogramme couleurs (pour comparer les deux images selon leurs couleurs).


La texture, c'est quelque chose qui a des couleurs, donc tu te dois d'effectuer un travail correct et non pas des approximation qui datent du millnaire prcdent.

----------


## bilzzbenzbilz

> intracanal, c'est ce que tu as l'habitude de faire. Tu aurais 3 matrices de cooccurrence. En fait, c'est comme si tu prenais 3 images en niveaux de gris et que tu calculais les matrices de cooccurrence..


d'aprs ce que j'ai compris : une matrice pour l'image du canal vert, une pour canal rouge, et une pour canal bleu.




> Ensuie, intercanal, au lieu de ne travailler que sur une image, tu travailles sur deux images en mme temps. Quand tu augmentes la case i,j de la matrice de coccurrence, tu prends le premier canal pour i et le second pour j..


a, j'ai pas compris.

Je ne fait pas de la classification, j'ai une base d'images  partir de laquelle un utilisateur fait une requte (image), et j'essaie de trouver quelles sont les images similaire  l'image de la requte. Il s'agit de la recherche d'images.

----------


## pseudocode

> pseudocode > non, on passe plus par 6 matrices de cooccurrence, c'est plus efficace.


Ah ? Ca m'interesse. J'en suis rest au Spectral Clustering.

Je me fais vieux  ::aie:: .

----------


## ToTo13

> Dans le mme temps, tout dpend de la taille de l'image. Sur une image 100x100, on va plutt prendre une taille 32, pour du 10000x10000, conserver l'histogramme complet avec une taille 256 est tout  fait pertinent.


Attention  ce genre d'affirmation.
Les matrices de cooccurrences sont une reprsentation statistique d'une image, donc la taille n'est pas importante  partir du moment o l'chantillon (ici l'image) est suffisamment grand.
L'avantage de rduire le nombre de couleur (outre le fait de rduire la matrice), c'est d'avoir une certaine souplesse dans la mthode pour tout ce qui est dfaut, dformations, bruits, etc dans l'image.
Si tu gardes une matrice avec 256 niveaux de gris, tu compares l'image brute. Il y a alors moins de chance que tu arrives  retrouver la mme image qui aurait subit de lgres dformations : filtre linaires, gaussien, bruit poivre et sel, etc.
Il vaut toujours mieux tester diffrents niveaux de gris afin de trouver celui qui correspond le mieux  ton travail. Dans mon travail (classement de noyaux de cellules), le niveau idal est 32 et il amliore de prs de 5% le classement des noyaux.

----------


## bilzzbenzbilz

merci ToTo13 .

----------


## Matthieu Brucher

> Je ne fait pas de la classification, j'ai une base d'images  partir de laquelle un utilisateur fait une requte (image), et j'essaie de trouver quelles sont les images similaire  l'image de la requte. Il s'agit de la recherche d'images.


Ca se base sur le mme principe, en gros, une distance. Si c'est trouver l'image la plus proche, tu n'as pas intrt du tout  passer en niveau de gris. Conserve tes 3 canaux. Et cres tes 6 matrices de cooccurrence.
Quand tu calcules ton histogramme, ta statistique spatiale, tu prends normalement deux pixels selon un certain vecteur dans la mme image. L, tu prends l'origine dans une image et l'arrive dans l'autre.



> Ah ? Ca m'interesse. J'en suis rest au Spectral Clustering.
> 
> Je me fais vieux .


C'est juste une application au SC que j'ai faite.



> Si tu gardes une matrice avec 256 niveaux de gris, tu compares l'image brute. Il y a alors moins de chance que tu arrives  retrouver la mme image qui aurait subit de lgres dformations : filtre linaires, gaussien, bruit poivre et sel, etc.
> Il vaut toujours mieux tester diffrents niveaux de gris afin de trouver celui qui correspond le mieux  ton travail. Dans mon travail (classement de noyaux de cellules), le niveau idal est 32 et il amliore de prs de 5% le classement des noyaux.


Encore une fois, tout dpend de ce que tu cherches  faire. Dans ma mthode, tout ce qui tait dgradation tait gre par mon outil de classification.

----------


## pseudocode

> C'est juste une application au SC que j'ai faite.


J'ai trouv cela, qui se rapproche le plus de ta technique:

An Approach to Texture-Based Image Recognition by Deconstructing Multispectral Co-occurrence Matrices using Tchebichef Orthogonal Polynomials 

a date de 2008. (bon a va, je ne suis pas trop vieux  ::P: )

----------


## Matthieu Brucher

Je m'tais inspir d'une publication un peu plus vieille (2004, je crois ou dans les environs).

----------


## bilzzbenzbilz

merci Matthieu Brucher .
je n'arrive pas  tlcharger le fichier.

----------


## Matthieu Brucher

Aucun  problme de mon ct.
Le dbut te permettra de rcuprer au moins ce que j'entends par matrices de cooccurrence intra et intercanales.

----------


## bilzzbenzbilz

c bon merci, je vais ssayer de le comprendre .

----------


## momostrasbourg

> Une mthode (j'ai dj du en parler) c'est de faire une segmentation par texture. Par exemple, le plus simple c'est de faire un split/merge: Tu dcoupes toute l'image en carrs de taille NxN (par exemple 32x32 ou 64x64) et tu calcules tes 4 coefficients pour chaque carr. Ensuite tu regroupes les carrs voisins qui ont les mmes 4 coefficients (en utilisant ta formule et un seuil d'erreur). Le plus gros rassemblement de carr te donne la plus grosse zone homogne en texture => c'est ces coefficients que tu conserves pour cette image.


svp est ce que vous pouvez m'aider j'ai pas bien compris cette mthode pour comparer deux image afin de dtecter des changement et merci d'avance

----------

