# Gnral Dveloppement > Algorithme & Mathmatiques > Traitement d'images >  Recherche d'algorithmes pour l'analyse de la texture

## nounadevelop

::salut:: 
je cherche un algorithme pour l'analyse de la texture, soit "les filtres de Gabor" soit, "Transforme en ondelette discrte".
Mieux encore un code source disponible en C#  (sinon en C ou C++ ) afin de l'intger directement dans mon application surtout que je n'ai pas assez de temps.
merci d'avance.

----------


## ToTo13

Bonjour,

je ne suis pas un spcialiste de ces deux technique, mais  ::google::  est toujours ton meilleur ami : http://www.google.com/codesearch?q=g...ercher+du+code

Pour ce qui est de l'intgrer directement, il te faudra de toute faon modifier certaines structures pour que cela fonctionne...

----------


## nounadevelop

bonsoir,

d'abord merci d'avoir rpondu.
pour google actuellement c'est mon meilleur ami c'est sur, seulement je trouve pas se que je cherche (un algorithme c tout se qu'il me faut, sinon comme je disais un code source). Est ce que vous pouvez me donner des liens intressant. Je comprends pas que vous n'etes pas un spcialiste, j'ai vu votre site , l'imagerie c'est bien votre domaine, non? En plus vous avez envoy des questions et des rponses dans le forum sur la texture non?

j'attends votre rponse toujours avec impatience.

Edit: Excusez moi j'ai envoy la 2eme reponse avant de voir les rsultats du lien que vous m'avez envoy a  l'aire interesant. Je vais voir a d'abord ensuite s'il y a un problme on en discute d'accord.

merci 1000 fois.

----------


## nounadevelop

j'arrive pas  comprendre les code source en C et C++, c'est pas vraiment bien comment. 

j'ai besoin de savoir les tapes de cette transforme de Gabor. Quelles sont les entres  du programme, les rsultats de sortie, etc. Un truc bien dtailler vous voyez ce que je veux dire. Car je dbute dans le traitement d'image. 

Quelqu'un peut il me donner des liens intressants ? J'ai vu le site  http://www.codeproject.com c'est trs intressant comme site mais c'est pas encore ce que je cherche.

merci d'avance

----------


## pseudocode

bonjour,

Au final, c'est pour faire quoi cette "analyse" de texture ?

----------


## ToTo13

Bonjour,




> Je comprends pas que vous n'etes pas un spcialiste, j'ai vu votre site , l'imagerie c'est bien votre domaine, non? En plus vous avez envoy des questions et des rponses dans le forum sur la texture non?


 - Oui je fais de l'imagerie numrique.
 - Oui je fais un peu d'analyse de texture.
 - Non je ne suis pas un spcialiste de l'analyse de texture. En tout cas je n'ai jamais utilis le filtre de Gabor ou la transforme en ondelette. J'utilise plutt les matrices de cooccurences.

Et comme je l'ai marqu prcedemment, si vous ne travaillez pas sur une plate-forme commune (MatLab, ImageJ, ...) il est vident que tous les codes trouvs sur le net ne seront pas directement compatible, voire mme comprhensible.

PS :  ::nosms::  merci...

----------


## nounadevelop

bonjour,

D'abord merci d'avoir repondu ToTo13 et PSEUDOCODE.

je vais essayer de dtailler un peu plus mon problme. Mon projet est sur la recherche d'images. Donc je fais la collecte d'images de manuscrits arabes  partir de google, mais vous savez trs bien que ces resultats ne sont pas pertinents. Donc mon mtamoteur de recherche doit faire l'analyse du contenu de l'image pour rendre les rsultats plus pertinents. Pour cela je dmarre avec une base de donnes d'images de manuscrits arabes et  chaque fois que Google me retourne une image le programme doit comparer l'image aux images de la base de donnes pour retenir l'image ou pas ,en se basant sur la texture.
je veut faire de l'analyse de la texture, seulement je ne sais pas comment commencer avec cette histoire de "texture".
sur Google je n'ai trouver que des documents avec des formules terribles. Moi ce que je veux c'est un algorithme bien comment pour que je puisse travailler avec dans mon application, sachant que j'implemente en C# un code source est pas mal aussi. Mais j'ai besoin de savoir toute la philosophie de la methode tape par tape pour pouvoir intgrer le bout de programmme dans mon application et bien sr pouvoir le modifier.
Je suis vraiment  sec dans cette histoire de texture, est ce que c'est si compliqu ?
Si vous avez pas de rponse  mes questions, est ce que vous pouvez m'orrienter vers des liens de gens spcialistes du domaine.
ToTo13 tu travailles avec des matrice de coocurrence, tu peux m'exppliquer un peu STP. Est ce qu'il y a une relation entre cette matrice et les deux methodes Gabor et DWT???.

J'attends vos reponses avec impatience.
merci d'avance.

----------


## pseudocode

Si j'ai bien compris, tu veux faire de la classification d'images en 2 groupes:
 image contenant de l'ecriture arabe autre image

C'est ca ?

----------


## ToTo13

Bonjour,

le problme semble plus clair, en tout cas j'ai compris la mme chose que PseudoCode.

Pour ce que est des la matrice de cooccurrence, elle n'a rien  voir avec le filtre de Gabor et la transforme en ondelette discrte. Elle se construit  partir de couples de pixels identiques dans une direction donne, puis elle permet de calculer certains indices : homognit, contraste, variance, ...

Si tu souhaites retrouver des documents contenant des caractres arabes, pourquoi ne pas utiliser (ou crer si tu y es oblig) un OCR (Optical Character Recognition), il y en a pour les caractres arabes.
Sinon, tu peux utiliser des mthodes comme les KNN (K-Nearest-Neighbor <=> K plus proches voisins) ? Tu utilises une base de donnes contenant diffrentes critures manuscrites ou d'imprimeries et tu testes les diffrents caractres de ton documents pour voir s'ils appartiennent  la base.

----------


## nounadevelop

je veux faire du CBIR, pour permettre une indexation et une recherche de l'image portant sur les caractristiques de l'image. C'est tout pour l'instant.

Les images que je cherche pour les mettre dans ma base de donnes sont des manuscrits arabes.

----------


## ToTo13

Bonjour,

si c'est justement des images reprsentant des "manuscrit arabes", raison de plus pour utiliser un OCR, c'est fait pour a.

----------


## pseudocode

Tu parles de 2 choses diffrentes:




> chaque fois que Google me retourne une image le programme doit comparer l'image aux images de la base de donnes pour retenir l'image ou pas


Ca c'est de la classification = une fonction qui revoie vrai/faux suivant que l'image t'interesse ou pas. 

La question, dans ce cas, c'est de savoir quels est le critre que tu va choisir. Calculer la couleur, la texture, ... c'est bien mais qu'est-ce que tu vas en faire une fois que tu les aura calculs ? 




> je veux faire du CBIR, pour permettre une indexation et une recherche de l'image


Ca c'est de la recherche (content retrieval) = une fonction qui renvoie une liste d'image correspondant  une requete.

La question, dans ce cas, c'est de savoir quels types de requetes tu va grer: contenu, contexte, relation, ...

----------


## nounadevelop

ToTo13 ,non j'ai pas l'intention de faire de la reconnaissance d'criture arabe c'est pas a du tout.
je veux faire une analyse de l'image que google me retourne, une analyse de la texture, je dois naturellement extraire des parametres par une des mthodes soit Gabor soit DWT mais je ne sais pas laquelle ( les parametres) je n'ai aucune ide.

----------


## pseudocode

> maintenant je passe  la texture je doit naturelement extraire des parametres par une des methodes soit Gabor soit DWT mais je ne sais pas les quel ( les parametres) je n'ai aucune ide.


Ces deux methodes me parraissent bien complexes et couteuses pour, au final, faire juste de la classification binaire.  ::?: 

Comme l'a dit Toto13, il vaut mieux passer par une simple matrice de coocurrence.




> mon encadreur ma parler de variance et d'ecart type et de matrice de coocurrence mais lui aussi il n'a jamais travailler avec la texture, donc il ne ma pas bien positionner dans le probleme.


Toto13 et moi mme avons post 2 implmentations:
http://www.developpez.net/forums/sho...d.php?t=416724
http://www.developpez.net/forums/sho...d.php?t=417574

La litterature sur les matrices de coocurrences ne manquent pas. Essaye de chercher "Grey Level Co-occurrence Matrix" sur le web.  :;):

----------


## pseudocode

> PSEUDOCODE, je vais t'expliquer encore d'avantage, dans mon metamoteur de recherche tu ecrit ta requete aprs tu lance la recherche  partir de Google (puisque dans mon programme j'ai une partie du code qui s'occupe de a: lancer Google) bien sur le programme va ajouter les mots cls: manuscrit, arabe tout seul donc les images qu'il me retourne ne sont pas pertinents puisqu'il se base sur le contour textuel de l'image alors tout le travail que je vais faire se base sur le contenu de l'image.


J'avais bien compris.  :;): 

Je dis juste que faire des transformations (Gabor, Wavelet) c'est bien compliqu pour ton cas. Ce genre de technique est plus utilise pour "reconnaitre" une texture (bois, pierre, herbe, ..) alors que toi tu veux "juste" savoir si une texture ressemble  une de celles de ta base de donnes.

----------


## nounadevelop

une derniere question avant de voir la matrice de coocurrence en detaille, est ce que c'est dans le cadre de faire de l'analyse de la texture?

----------


## pseudocode

> une derniere question avant de voir la matrice de coocurrence en detaille, est ce que c'est dans le cadre de faire de l'analyse de la texture?


Oui tout a fait. C'est de l'analyse de texture au sens "statistique" du terme.

----------


## nounadevelop

d'accord PSEUDOCODE jusque l' trs bien.
exuse moi mais je vais ajouter encore une question, tu ma dit: "alors que toi tu veux juste savoir si une texture ressemble  une de celles de ta base de donnes.", je pense que tu ne ma pas compris, tu veut dire *ressemble* ou *identique* je pense que la difference est claire, je veut pas que l'image que Google me retourne soit identique  une des images de ma base de donnes mais de lui faire un traitement de texture(extraire des parametres) de tel sort que je puisse calculer sa distance avec les images de la base de donnees( ces images aussi vont avoir dans la base de donnes des colonne pour les parametres de la texture), comme a le programme peut juger avec un score (par exemple), si l'image est un manuscrit arabe.

----------


## pseudocode

> je veut pas que l'image que Google me retourne soit identique  une des images de ma base de donnes mais de lui faire un traitement de texture(extraire des parametres) de tel sort que je puisse calculer sa distance avec les images de la base de donnees( ces images aussi vont avoir dans la base de donnes des colonne pour les parametres de la texture), comme a le programme peut juger avec un score (par exemple), si l'image est un manuscrit arabe,...


C'est bien ca. L'tude de la matrice de coocurrence va te donner un vecteur de caracteristiques (= une liste de valeurs). Cela reprsente la signature de la texture. 

Tu peux donc comparer la signature d'une image de google avec les signatures de ta base de donnes. La fonction de comparaison peut tre une mesure de distance, ou tout autre fonction comme par exemple les rseaux de neuronnes.

----------


## nounadevelop

Merci PSEUDOCODE c'est trs bien. je vais voir les matrice de coocurrence pour voir de quoi il s'agit. ensuite je vais traduire un des deux code en C# pour pouvoir  l'integrer, et s'il y a un problem on en discute.

MERCI 10000000.... fois PSEUDOCODE, ToTo13 pour vos reponses et votre patience.

A bientot...

----------


## nounadevelop

bonjour,

PSUDOCODE, j'ai vu ton implmentation de la matrice de coocurence et j'ai des questions :

1) dans ce document http://www.univ-tlemcen.dz/manifest/...0TTL/TTL72.pdf (dans la partie:"III. LA MATRICE DE COOCCURRENCE"): *"il s'agit  partir d'une image reprsente en niveaux de gris d'obtenir la matrice des moyennes d'espace du second ordre, appele matrice de cooccurrence"*. donc si j'ai bien compris dans ton implmentation l'image *"img"* dans *"public Haralick(Image img)"* doit tre en niveaux de gris ?

2) et dans *"int v0 = (int)(MSIZE*this.image.getValue(x0,y0)/256.0);"*, *getValue* retourne la couleur de pixel (et que cette couleur est un niveaux de gris ) ?

3) j'ai vu dans ce document: http://www.lets.africa-web.org/cours/TI/Chapitre6.htm (dans la partie:"6.3 Les mthodes statistiques du deuxime ordre"): que le  calcul de la matrice de cooccurrence ce fait dans les quatres directions : 0, 45, 90 et 135. est ce que toi tu a fait une seul direction? si oui laquel?

j'attend ta rponse avec impatience. et MERCI d'avance.

----------


## ToTo13

Bonsoir,

je me permets de rpondre  la place de PseudoCode, car j'ai utilis bien des fois sa prcieuse classe.

 1 - Oui.
 2 - Oui, entre 0 et 255.
 3 - Oui, la matrice ne peut tre calcule que pour une direction fixe en dur dans le code. Je mettrai une nouvelle version rapidement (j'en ai besoin pour mon travail) o l'on pourra choisir la direction ET la distance.

----------


## nounadevelop

bonsoir,

ToTo13, si j'ai bien compris avant de calculer la matrice de coocurrence il faut que je fait une conversion de mes images qui sont en couleurs  des images en niveaux de gris, donc dja pour commencer je fait a (en C#):



```

```

est ce que mon code est bon??. je ne sais pas si tu a deja programmer avec C#?? ton implementation est en JAVA, est ce que c'est ton langage de programmmation en ce moment??

pour ce qui est matrice de coocurence , j'ai pas compris une chose ton implementation tu l'a fait en se basant sur  quel algorithme??. 




> 3 - Oui, la matrice ne peut tre calcule que pour une direction fixe en dur dans le code. Je mettrai une nouvelle version rapidement (j'en ai besoin pour mon travail) o l'on pourra choisir la direction ET la distance.


je ne comprends pas que tu n'a pas fait la matrice pour les 4 directions??. ton implementation ainsi que celle de PSEUDOCODE est fausse alors???

j'attends ta reponse et celle de pseudocode.

Merci d'avance. ::):

----------


## ToTo13

Bonjour,

je travaille en Java avec ma propre classe Image (ce qu'il faudra que je change rapidement :s).

Ton code C#  l'air juste, bien que je pense qu'il doit exister un type d'image codant des images en niveaux de gris sans avoir  utiliser : b.SetPixel(w, h, Color.FromArgb(gris, gris, gris));

Non, la classe est *juste*, mais dans l'tat actuel, il me semble que l'on ne peut calculer la matrice de coocurrence que dans une direction et une distance de 1.

Pour ce qui est de l'algorithme, recherche "Grey Level Coocurrence Matrix" dans  ::google::  il te donnera tous les articles que tu souhaites dans lesquels l'algorithme de remplissage est expliqu. En particulier tu trouveras souvent en rfrences les articles de Haralicks de 1973 et 1979 qui sont la base de cette technique.

----------


## pseudocode

Je n'etais pas la ce week-end, je reprend donc le train en marche...




> je ne comprends pas que tu n'a pas fait la matrice pour les 4 directions??. ton implementation ainsi que celle de PSEUDOCODE est fausse alors???


Dans mon implmentation, je calcule 4 matrices de cooccurences dans 4 directions, et je fais une moyenne des caracteristiques.

Les 4 directions sont donnes par les tableaux dx[] et dy[] dans le constructeur:


```

```

Les valeurs utilises donnents les 4 directions suivantes:
dx=1 et dy=0 -> Direction: EST, Distance: 1
dx=1 et dy=1 -> Direction: SUD-EST, Distance: racine(2)
dx=0 et dy=1 -> Direction: SUD, Distance: 1
dx=-1 et dy=1 -> Direction: SUD-OUEST, Distance: racine(2)

Bien sur on peut modifier ces valeurs pour changer les directions ou les distances.

----------


## nounadevelop

bonjour,

merci pour vos reponse.




> Les valeurs utilises donnents les 4 directions suivantes:
> dx=1 et dy=0 -> Direction: EST, Distance: 1
> dx=1 et dy=1 -> Direction: SUD-EST, Distance: racine(2)
> dx=0 et dy=1 -> Direction: SUD, Distance: 1
> dx=-1 et dy=1 -> Direction: SUD-OUEST, Distance: racine(2)


mes questions sont:

1) pour la  Direction: SUD-OUEST on a toujours dx=-1 et dy=1, ou bien on peut changer, exemple(Direction: SUD-OUEST on a  dx=-1 et dy=-1)?.

2) pour la distance elle est ou dans ton programme?.

----------


## pseudocode

> 1) pour la  Direction: SUD-OUEST on a toujours dx=-1 et dy=1, ou bien on peut changer, exemple(Direction: SUD-OUEST on a  dx=-1 et dy=-1)?.




```

```




> 2) pour la distance elle est ou dans ton programme?.


dx=1 et dy=1 = vecteur (1,1) --> norme= racine( 1 + 1 ) = racine (2)

----------


## nounadevelop

bonsoir,

*trs bien c'est compris.*
seulement j'ai vu dans ce *"tutorial"* http://www.fp.ucalgary.ca/mhallbey/tutorial.htm que :

north(0,1)
south(0,-1)
NE(1,1)
SW(-1,-1). 
je comprend pas ??.
mais, moi je suis plutot d'accord avec toi.

et pour la distance, tu ne ma pas repondu????



> 2) elle est ou dans ton programme?.

----------


## ToTo13

Bonjour,

pour ce qui est de la direction, ici c'est juste un problme de parcours de l'image et surtout d'o est ce que tu place l'origine.
Pour PseudoCode, l'origine est en haut  gauche et pour ton exemple elle est en bas  gauche.
Pour la distance, il me semble qu'elle est de 1.

----------


## nounadevelop

bonjour,

merci toto13. mais j'ai pas compris????




> Pour la distance, il me semble qu'elle est de 1


PSEUDOCODE me dit ceci:



> Les valeurs utilises donnents les 4 directions suivantes:
> dx=1 et dy=0 -> Direction: EST, Distance: 1
> dx=1 et dy=1 -> Direction: SUD-EST, Distance: racine(2)
> dx=0 et dy=1 -> Direction: SUD, Distance: 1
> dx=-1 et dy=1 -> Direction: SUD-OUEST, Distance: racine(2)


on voit bien que la racine change, non????????

----------


## pseudocode

> Pour PseudoCode, l'origine est en haut  gauche et pour ton exemple elle est en bas  gauche.


Effectivement, j'ai mis l'origine en haut  gauche (en souvenir du TO7/70).




> PSEUDOCODE me dit ceci: on voit bien que la racine change, non????????


Le choix de la "distance" n'a pas d'importance pour le calcul de le matrice de cooccurence. C'est juste une manire de prciser la distance entre le pixel de rfrence et le pixel analys:

- au sens 1-norm: (+1,+1) donne 2
- au sens 2-norm: (+1,+1) donne racine(2)
- au sens infinity-norm: (+1,+1) donne 1
...

----------


## nounadevelop

bonjour,

merci PSEUDOCODE.

Est ce que tu peux me refaire le schema pour mon exemple (quand l'origine est en bas  gauche)? parce que je vois pas ce que tu veux dire.

Et pour la distance, c'est quoi la norme ? Et ton calcul de la distance c'est pas clair pour moi....

merci d'avance.

----------


## pseudocode

> Est ce que tu peux me refaire le schema pour mon exemple (quand l'origine est en bas  gauche)? parce que je vois pas ce que tu veux dire.




```

```




> Et pour la distance, c'est quoi la norme ? Et ton calcul de la distance c'est pas clair pour moi....


Le principe de la matrice de cooccurence c'est de comparer chaque pixel (rfrence) avec un autre pixel. Cet "autre" pixel est toujours dans la meme direction et  la meme distance du pixel de rfrence.

Exemple 1: on peut comparer chaque pixel avec son voisin immdiat de droite. Ca veut dire que pour chaque pixel (x,y), on compare avec le pixel (x+1,y). En terme de vecteur ca signifie que le dplacement  faire est toujours (+1,0). La distance du dplacement est de 1 pixel.

Exemple 2: on peut comparer chaque pixel avec le 2nd voisin de droite. Ca veut dire que pour chaque pixel (x,y), on compare avec le pixel (x+2,y).  En terme de vecteur ca signifie que le dplacement  faire est toujours (+2,0). La distance du dplacement est de 2 pixels.

Exemple 3: on peut comparer chaque pixel avec le voisin en bas  droite. Ca veut dire que pour chaque pixel (x,y), on compare avec le pixel (x+1,y-1).  En terme de vecteur ca signifie que le dplacement  faire est toujours (+1,-1). La distance du dplacement est de ??? pixels.

Le calcul du "???" dpend de la norme utilise. En gometrie euclidienne classique, la distance est racine((+1)+(-1)) = racine(2)

----------


## nounadevelop

merci, quand je vois ton schema je comprends tout le reste(distance et deplacement, c'est trs bien). seulement cette histoire de "changement d'origine " pour le parcour de l'image c'est encore flou dans ma tete?????

----------


## pseudocode

Il y a 2 "schma" comme tu dis.

1. Il y a celui de l'image. L'image est un tableau de Largeur*Hauteur pixels dont l'origine (pixel 0,0) est en BAS a GAUCHE. 


```

```

ici le pixel(1,1) a la valeur 2 et le pixel(2,1) a la valeur 4

2. il y a celui de la matrice de co-occurence. C'est un tableau de 256*256 dont l'origine (0,0) est en HAUT a GAUCHE.



```

```

Ici la matrice de cooccurence pour le vecteur (+1,0) correspondant  l'image ci-avant. 

Il y a un pixel de valeur 4  droite d'un pixel de valeur 2. Donc Mat[4][2]=1

----------


## nounadevelop

"je pense que j'ai compris". => pour ton exemple si on a un pixel "x", son voisin "y"  droite avec une distance de 1 se trouve dans l'image juste au dessous de lui. comme a:
x
y 

alors que pour mon exemple il se trouve dans l'image  droite de lui.comme a:
x y

c'est a??.

----------


## pseudocode

> "je pense que j'ai compris". => pour ton exemple si on a un pixel "x", son voisin "y"  droite avec une distance de 1 se trouve dans l'image juste au dessous de lui.
> c'est a??.


heu... non.  ::aie:: 

Pour moi comme pour toi, le voisin de droite c'est le pixel  droite (=  l'EST).

Si on prend un pixel A qui a pour coordones (x,y), alors sont voisin de droite est le pixel B qui a pour coordonnes (x+1,y). Donc un dplacement de (+1,0).

----------


## nounadevelop

je suis  d'accord quand tu me dit que le deplacement EST ne change pas pour nous deux (sachant que pour toi l'origine est en haut  gauche et moi en bas  gauche).
par contre dans l'image quand on dit  droite c'est pas pareil pour toi et moi.

----------


## pseudocode

> je suis  d'accord quand tu me dit que le deplacement EST ne change pas pour nous deux (sachant que pour toi l'origine est en haut  gauche et moi en bas  gauche).
> *par contre dans l'image quand on dit  droite c'est pas pareil pour toi et moi.*


Je ne comprend pas pourquoi. Que l'axe des Y soit orient vers le haut ou vers le bas, ca ne change pas la gauche et la droite.  ::koi:: 



```

```

----------


## nounadevelop

non pas dans le plan c'est evident que a ne change pas.
essaye de faire la matrice de l'image pour ton cas et pour le mien (pas la matrice de coocurrence) tu va trouver que c'est different.

pour toi: le voisin 8 au dessous de la reference 5(pour un deplacement de EST)



```

```

pour moi le voisin 8 est  droite de la reference 5 (pour un deplacement de EST)



```

```

alors??.

----------


## pseudocode

> non pas dans le plan c'est evident que a ne change pas.
> essaye de faire la matrice de l'image pour ton cas et pour le mien (pas la matrice de coocurrence) tu va trouver que c'est different.


Je ne comprend rien.  ::aie:: 

Je vais reprendre les bases:

1. La matrice de l'image est un tableau de taille Largeur*Hauteur. Chaque case (x,y) de ce tableau contient la valeur de l'intensit (0...255) du pixel de coordonne (x,y)

2. La matrice de covariance est un tableau de taille 256*256. Chaque case (x,y) de ce tableau contient le nombre de pixels d'intensit "x" qui est proche d'un pixel d'intensit "y". 

Le terme "proche" signifie que le vecteur dplacement d'un pixel  un autre est un vecteur constant (dx,dy). Dans le cas d'un vecteur dplacement EST, on a (+1,0).

Exemple 1: 
- une image 100*100 completement blanche -> les 10.000 pixels ont tous la valeur 255
- La matrice de covariance (+1,0) associe contient des 0 partout sauf  la case (255,255) qui contient 10.000. En effet, les 10.000 pixels "blancs" ont tous pour voisin un pixel "blanc".

Exemple 2: 
- une image 100*100 en echiquier noir/blanc -> 5.000 pixels ont la valeur 0 et 5.000 pixels ont la valeur 255
- La matrice de covariance (+1,0) associe contient des 0 partout sauf les cases (255,0) et (0,255) qui contienent 5.000. En effet, les 5.000 pixels "blancs" ont tous pour voisin un pixel "noir" et les 5.000 pixels "noirs" ont tous pour voisin un pixel "blanc".

----------


## nounadevelop

j'ai modifier ma reponse au dessous, est ce que c'est plus clair pour toi?

----------


## pseudocode

> j'ai modifier ma reponse au dessous, est ce que c'est plus clair pour toi?




```

```



```

```

----------


## nounadevelop

je comprends maintenant mon probleme. tu a raison.
une autre question  ::aie:: 
mais dans une matrice de coocurrence le nombre de fois ou 0 est  l'EST de 5 est different du nombre de fois ou 5 est  l'EST de 0. n'est ce pas? ::aie::

----------


## pseudocode

> je comprends maintenant mon probleme.


c'est l'essentiel.  :;): 




> une autre question 
> mais dans une matrice de coocurrence le nombre de fois ou0 est  l'est de 5 est different de le nombre de fois ou 5 est  l'est de 0. n'est ce pas?


Oui, bien sur.   ::king:: 

Mais gnralement, dans l'analyse de texture, on essaye de ne pas dpendre de l'orientation de l'image. Donc on va calculer les matrices de coocurrences dans les 4 (ou 8) directions et on va faire leur somme. 

M = M_est + M_ouest + M_nord + M_sud

Mettons qu'on commence  calculer M_est et qu'on trouve que 5 est  l'EST de 0 => on incrmnte la case M_est[0][5]

Mais dire que 5 est  l'EST de 0 c'est quivalent  dire que 0 est l'OUEST de 5. Donc on peut incrmnter la case M_ouest[5][0]

Comme on va faire la somme de toutes les matrices, on peut directement travailler dans la matrice finale M.

Donc si on trouve que 5 est  l'EST de 0, on incrmente les 2 case M[0][5] et M[5][0].  :8-):

----------


## nounadevelop

je suis d'accord avec toi.
seulement je comprend pas a:




> Mais gnralement, dans l'analyse de texture, on essaye de ne pas dpendre de l'orientation de l'image. Donc on va calculer les matrices de coocurrences dans les 4 (ou 8) directions et on va faire leur somme. 
> 
> M = M_est + M_ouest + M_nord + M_sud


le sens d'une matrice de coocurence dans une direction donn est significatif. mais pour la somme, que devient t-il??

----------


## pseudocode

> jle sens d'une matrice de coocurence dans une direction donn est significatif. mais pour la somme, que devient t-il??


Quand on fait la somme: la direction et le sens ne sont plus significatifs. C'est l'effet recherch.  :;): 


Prenons une image binaire pour simplifier (comme ca la matrice de coocurence ne fait que 2x2):


```

```



```

```

----------


## nounadevelop

tu peut m'expliquer d'avantage;



> C'est l'effet recherch

----------


## pseudocode

> tu peut m'expliquer d'avantage;
> 
> 
> 
> 
> 			
> 				C'est l'effet recherch


et bien gnralement on considre que des rayures verticales ou des rayures horizontales a reprsente la mme texture: des rayures.

Donc on veut une matrice de co-occurrences qui ne dpende pas de la direction choisie => on fait la somme des matrice de co-occurrences dans toutes les directions.

----------


## nounadevelop

est ce que toi tu a fait a pour ton implementation en JAVA(la somme dans les 4 directions) pour avoir au final une matrice dans  les 4 directions(M=M_est+..), je veut dire les valeurs finaux de *matrix*(dans ton code) c'est la somme des matrice de coocurrence dans les 4 directions, et aprs,  partir de cette matrice somme tu calcule 14 indices.c'est a??

----------


## pseudocode

> est ce que toi tu a fait a pour ton implementation en JAVA(la somme dans les 4 directions) pour avoir au final une matrice dans  les 4 directions(M=M_est+..), je veut dire les valeurs finaux de *matrix*(dans ton code) c'est la somme des matrice de coocurrence dans les 4 directions, et aprs,  partir de cette matrice somme tu calcule 14 indices.c'est a??


Heu... non pas exactement.  ::aie:: 

1. J'ai calcul 4 matrices symtiques (donc 8 directions):

M1 =  Nord + Sud
M2 =  Nord-Est + Sud-Ouest
M3 =  Est + Ouest
M4 =  Sud-Est + Nord-Ouest

2. J'ai calcul 11 caracteristiques pour chaque matrice:

F(M1)=(f1_1, f1_2, ..., f1_11)
F(M2)=(f2_1, f2_2, ..., f2_11)
F(M3)=(f3_1, f3_2, ..., f3_11)
F(M4)=(f4_1, f4_2, ..., f4_11)

3. J'ai calcul la moyenne de chacune des 11 caracteristiques:

F= ( (f1_1+f2_1+f3_1+f4_1)/4 , ...,  (f1_11+f2_11+f3_11+f4_11)/4 )


Pour mon cas personnel, j'ai trouv que ca donnait de meilleurs rsultats que de faire la somme des 4 matrices puis de calculer les 11 caracteristiques sur la matrice finale. Maintenant, c'est  toi de tester la mthode qui te convient le mieux entre F(M1+M2+M3+M4) et Moyenne( F(M1), F(M2), F(M3), F(M4) ), ou meme une autre mthode.

----------


## nounadevelop

d'accord ::king:: 
parceque dans ton code c'est clair que c'est la methode de la moyenne.

mais ce qui n'etait pas clair (mais maintenant ne l'est plus) c'est que tu a travailler avec des directions :
Nord + Sud
Nord-Est + Sud-Ouest
Est + Ouest
Sud-Est + Nord-Ouest

je penser que tu travailler avec :
0 pour M1
45       M2
90       M3
135     M4
maintenant j'ai compris comment tu fait.
seulement une autre question ::aie:: 
j'ai vu dans le "tutorial"(en anglais )que j'ai deja envoyer, que une des etapes pour le calcule de la matrice de coocurrence c'est de la rendre symetrique, exemple:
symmetrical(vertical)=> count(south) matrix + transpose(north).
est ce que toi tu a fait a pour le calcule de M1(Nord + Sud)??

----------


## pseudocode

> j'ai vu dans le "tutorial"(en anglais )que j'ai deja envoyer, que une des etapes pour le calcule de la matrice de coocurrence c'est de la rendre symetrique, exemple:
> symmetrical(vertical)=> count(south) matrix + transpose(north).
> est ce que toi tu a fait a pour le calcule de M1(Nord + Sud)??


Oui. Quand je calcule un coefficient pour la direction NORD j'incremente deux cases de la matrices (symetrie par rapport a la diagonale). Donc ca compte aussi le coefficient pour la direction SUD.



```

```

----------


## nounadevelop

donc "si j'ai compris" le calcule de la matrice de coocurrence pour une direction (nord par exemple)implique obligatoirement le calcule de la matrice de coocurrence pour (le sud) pour avoir une symetrie, non??
je veut dire que : je peut pas dire que j'ai  calculer  la matrice de coocurrence pour une direction (nord) seulement(et si je dit a, c'est que le sud c'est implicite)non?

----------


## pseudocode

> donc "si j'ai compris" le calcule de la matrice de coocurrence pour une direction (nord par exemple)implique obligatoirement le calcule de la matrice de coocurrence pour (le sud) pour avoir une symetrie, non??
> je veut dire que : je peut pas dire que j'ai  calculer  la matrice de coocurrence pour une direction (nord) seulement(et si je dit a, c'est que le sud c'est implicite)non?


Non, tu n'es pas "oblig" de calculer les 2 directions simultanment. Mais si tu ne le fais pas, ta matrice de co-occurrences ne sera pas symtrique.

En soi, ce n'est pas grave. Mais certaines formules utilises pour le calcul des caractristiques ncessitent une matrice symtrique. 

On a donc 2 bonnes raisons de calculer les 2 directions simultanment et donc d'avoir une matrice symtrique:

1. intrt "mathmatique": a permet d'utiliser les formules standards pour le calcul des caractristiques

2. intrt "analytique": on prfre que les caractristiques ne dpendent pas de l'orientation de l'image.

----------


## nounadevelop

c'est trs bien.
et pour ce qui est une fenetre de 17*17, 9*9 ...etc.
est ce que tu a travailler avec a dja?. si oui, comment?

----------


## pseudocode

> c'est trs bien.
> et pour ce qui est une fenetre de 17*17, 9*9 ...etc.
> est ce que tu a travailler avec a dja?. si oui, comment?


Le terme "fentre" dsigne une petite zone de l'image sur laquelle on travaille.

Gnralement on ne calcule pas la matrice de co-occurence sur toute l'image. On dcoupe l'image en zone carres et on calcule la matrice de co-occurence, puis le vecteur des caracteristiques pour chaque zone.

----------


## nounadevelop

bonjour,




> On dcoupe l'image en zone carres


tu veut dire: fenetre=zone carre=taille X*X. moi je suis pas d'accord. parceque une image est de dimension Z*Y.

----------


## pseudocode

> tu veut dire: fenetre=zone carre=taille X*X. moi je suis pas d'accord. parceque une image est de dimension Z*Y.


Effectivement ca pose un problme sur les bords de l'image car les carrs "dpassent" de l'image. On a alors plusieurs solutions:

1. Ignorer les bords de l'image. On analyse un carr que s'il est entierement dans l'image

2. Dplacer les carrs qui dbordent, de telle facon qu'ils ne dbordent pas. Ca signifie qu'on aura des carrs qui se chevauchent.

3. Etendre les bords de l'image. Si un carr dborde de l'image, on le remplit avec des pixels de l'image (symtrie miroir, ...)

Pour l'analyse de textures, il vaut mieux utiliser la mthode 1, ou sinon la 2.

----------


## nounadevelop

avant de poser des questions sur les methodes 1 et 2, je vais poser des questions sur la fenetre:

1) mes images sont de taille differentes donc de 600*758, 50*100...etc. tu veut me dire que pour faire le decoupage (qui est pratiquement toujours recommand) il faut TOUJOURS choisir une fenetre  CARREE de taille X*X qui va decouper l'image en zones *"forcement egaux"* de taille X*X *"et donc on va avoir un debordement"* , et donc faire par la suite une des methodes 1 ou 2. c'est a??.

----------


## pseudocode

Je ne connais pas de solution universelle pour l'analyse de texture.  ::aie:: 

Mais pour commencer, je te conseille de toujours dcouper toutes tes images en carrs de taille X*X.

----------


## nounadevelop

c'est trs bien, merci.
seulement une question que j'ai oubli de pos avant :
pourquoi le decoupage est recommand??. et pourquoi en zones(fenetres) *carre*??. je dit a parceque j'ai une autre solution qui me vient  la tete:
faire un decoupage de l'image en zones non egaux et donc pas besoin d'ignorer les bords ou de chevaucher.qu'est ce que tu pense??

----------


## pseudocode

> pourquoi le decoupage est recommand??. et pourquoi en zones(fenetres) *carre*??.


Pour la mme raison qu'on calculee la matrice de co-occurence dans toutes les directions: c'est pour tre le moins possible dpendant de l'orientation de l'image. L'ideal c'est de prendre des fentres circulaires, mais le carr est suffisant.

----------


## nounadevelop

je comprends pas vraiment. qu'est ce qu'un  carr ou rectangle ou cercle a avoir avec les directions?? ::aie::

----------


## pseudocode

> je comprends pas vraiment. qu'est ce qu'un  carr ou rectangle ou cercle a avoir avec les directions??


Hum... c'est vrai que c'est pas vident  comprendre.

Le plus simple c'est que tu prennes 2 images indentiques:
* tu dcoupes la 1ere image en bandes horizontales.
* tu prend la 2nde image, tu la fais pivoter de 90 et du la dcoupes galement en bandes horizontales.

tu verra que les bandes horizontales de la 1ere images et celles de la 2nde image ne se ressemblent pas.

Tu refais la meme manipulation en dcoupant les images en carrs et tu verras qu'il y a des carrs qui se ressemblent ( une rotation prs).

----------


## nounadevelop

d'accord c'est clair maintenant. merci.

pour ce qui est methode de decoupage, je pense que la methode qui ignore les bords est plus simple. non??

----------


## pseudocode

> pour ce qui est methode de decoupage, je pense que la methode qui ignore les bords est plus simple. non??


Oui. c'est la plus simple et en mme temps il y a peu de chance que la partie intressante d'une image soir sur un bord. Gnralement, c'est plutt au milieu.  ::mrgreen::

----------


## nounadevelop

trs bien. je vais opter pour a.

maintenant mes images ont des dimensions trs eloign :
86*126, 79*85, ...ou bien encore 600*892...et meme ceux que j'ignore (ces des images que google me renvoit donc je ne connait pas la taille a priori), donc ma question comment choisir la taille de ma fenetre (les carres) pour faire un bon decoupage ??. est ce que 3*3 est trop petit?? 9*9 est bon?? 17*17 est trop grand??.

----------


## pseudocode

> donc ma question comment choisir la taille de ma fenetre (les carres) pour faire un bon decoupage ??. est ce que 3*3 est trop petit?? 9*9 est bon?? 17*17 est trop grand??.


C'est un grand problme auquel je n'ai pas de solution magique.  ::aie:: 

Personnellement, j'utilise la mthode du split/merge: 

je dcoupe l'image en zones de grande taille (256x256) et je calcule les caractristiques dans chaque zone. Si les caractristiques d'une zone sont celles d'une texture connue, j'arrte la. Sinon je redcoupe la zone en 4 zones plus petites  (128x128) et je recalcule les caractristiques dans ces 4 zones. En ainsi de suite jusqu' ce que toutes les zones soient reconnues, ou que j'ai atteint une taille limite (8x8)  .

Cette mthode implique d'avoir une base des textures connues.

----------


## nounadevelop

bonjour,




> Cette mthode implique d'avoir *une base des textures connues*.


tu peut m'expliquer d'avantage??.

merci d'avance.

----------


## pseudocode

> tu peut m'expliquer d'avantage??.


et bien il va falloir comparer le vecteur de caracteristiques de chaque fentre  des vecteurs de caracteristiques connus. 

Ces vecteurs de caracteristiques connus sont prcalculs  partir de zones choisies manuellement sur des images de rfrence.

----------


## nounadevelop

> Ces vecteurs de caracteristiques connus sont prcalculs  partir de *zones choisies manuellement sur des images de rfrence*.


tu veut dire que pour les images de ma base de donnes(et qui vont former ma base de test), pour chaque image je choisi une zone(pas dans le sens de fenetres de decoupage) que je juge interessante. c'est a?

----------


## pseudocode

> tu veut dire que pour les images de ma base de donnes(et qui vont former ma base de test), pour chaque image je choisi une zone(pas dans le sens de fenetres de decoupage) que je juge interessante. c'est a?


Oui c'est exactement ca.

----------


## nounadevelop

bonjour,

j'avoue que je suis un peu perdu dans cette histoire ::aie:: 

d'un cot tu me dit qu'il faut dcouper l'image en carres de X*X , et de l'autre cot pour chaque image de ma BDD je choisi une seul zone d'interet???????????????

----------


## pseudocode

> d'un cot tu me dit qu'il faut dcouper l'image en carres de X*X , et de l'autre cot pour chaque image de ma BDD je choisi une seul zone d'interet???????????????


Pas forcment "une seule" zone.  ::aie:: 

L'ide c'est que ta base de rfrences contient des "vignettes" (= des petits carrs d'images) pour lesquelles tu as MANUELLEMENT reconnu le type de la texture.

Par exemple, dans base de rfrences, tu peux avoir:
- 25 vignettes de type "ecriture sur fond uniforme"
- 19 vignettes de type "ecriture sur fond avec motif #1"
- 11 vignettes de type "fond avec motif #1 sans ecriture"
- 5 vignettes de type "fond uniforme"
...

Ensuite, tu dcoupes ta NOUVELLE image  analyser en petits carrs X*X et tu compares le vecteur de caracteristiques de chaque carr X*X avec le vecteur de caracteristiques de chaque vignette de ta base de rfrences.

A la fin, tu va obtenir pour cette NOUVELLE image une estimation de son contenu, par exemple:
50% "ecriture arabe sur fond uniforme"
20% "fond uniforme sans ecriture"
30% non indentifi

----------


## nounadevelop

bon d'accord je reviens sur a aprs..parceque j'aimerais pos des questions sur ton code JAVA (avant d'attaquer le decoupage):

1) pour ton code JAVA tu n'a pas fait le decoupage:



```

```

le calcule de la matrice de coocurrence pour toute l'image t'a donner de meilleur resultat ou quoi??

2)  



```

```

c'est pour initialiser  0 (tableau et matrice). c'est a?

----------


## pseudocode

> 1) pour ton code JAVA tu n'a pas fait le decoupage:
> 
> 
> 
> ```
> 
> ```
> 
> le calcule de la matrice de coocurrence pour toute l'image t'a donner de meilleur resultat ou quoi??


Non je n'ai pas fait de dcoupage. Le code est un exemple d'implmentation pour le calcul de la matrice de co-ocurrence. Ce n'est pas une solution cl-en-amin pour la reconnaissance de textures dans une image.




> 2)  
> 
> 
> 
> ```
> 
> ```
> 
> c'est pour initialiser  0 (tableau et matrice). c'est a?


oui, c'est ca. Ce n'est pas utile de le faire en Java car les structures sont initialises  0 par dfaut. Je l'ai quand meme fait pour aider ceux qui voudraient porter le code dans un autre langage.

----------


## nounadevelop

bonsoir,

j'ai essayer de calculer  la matrice de coocurrence pour une de mes images(sans faire de decoupage, bon je sait qu'il faut le faire, mais sait juste un essai). et j'ai eu comme resultats(les caracteristiques):
f1=0,000249
f2=868,63
f3=0,00026
f4=3321,499
f5=0,1224
f6=683,60
f7=5728469,75
f8=9,980
f9=8,80
f10=523,9
f11=3,86

que pense tu de ces resultats? je veut dire comment je peut savoir que les resultats sont bon?(comme par exemple le f7=5728469,75 est ce que c'est normale d'avoir une telle valeur pour le f7).

----------


## pseudocode

> que pense tu de ces resultats? je veut dire comment je peut savoir que les resultats sont bon?(comme par exemple le f7=5728469,75 est ce que c'est normale d'avoir une telle valeur pour le f7).


Je ne peux pas te dire si c'est "juste", mais c'est le genre de valeurs que je trouve habituellement.

----------


## nounadevelop

une autre question concernant ton code JAVA,



```

```

tu est sur que (k*<*2*MSIZE*-1*) ??
il me semble que c'est (k*<=*2*MSIZE*-1*) ou bien (k<2*MSIZE), non??

----------


## pseudocode

> une autre question concernant ton code JAVA,
> il me semble que c'est (k*<=*2*MSIZE*-1*) ou bien (k<2*MSIZE), non??


Pour etre exact, ca serait:



```

```


(et idem dans F7) car, dans les formules originales, les niveaux de gris commencent  1 et pas  zro. Dans la pratique, ca ne change pas grand chose au rsultat.

----------


## nounadevelop

pourquoi le *<=* normalement strictement <


```
for(int k=2;k<=2*MSIZE;k++) {
```

----------


## pseudocode

> pourquoi le *<=* normalement strictement <
> 
> 
> ```
> for(int k=2;k<=2*MSIZE;k++) {
> ```





> Formules originales:
> 
> Niveaux de gris possibles: 1 2 3 4 ... 256
> 
> valeurs de k possibles pour le calcul de Px+y(k): 
> x=1 et y=1 -> k=2
> x=1 et y=2 -> k=3
> x=2 et y=2 -> k=4
> ...
> ...





> Implmentation:
> 
> Niveaux de gris possibles: 0 1 2 3 ... 255
> 
> valeurs de k possibles pour le calcul de Px+y(k): 
> x=0 et y=0 -> k=0
> x=0 et y=1 -> k=1
> x=1 et y=1 -> k=2
> ...
> ...


Bien que Px+y(2) dans les formules originales soit gal  Px+y(0) dans l'implmentation, le fait de multiplier dans F6 par k=2 ou k=0 change le rsultat => la valeur calcule de F6 dans les formules originales et dans l'implmentation ne sera pas la meme. 

Solution: dcaler les valeurs de "k" dans l'implmentation:

F6 = Somme { (k+2)*Px+y(k) } = 2*Px+y(0) + 3*Px+y(1) + ... +  512*Px+y(510)

ce qui donne le code:


```

```

----------


## nounadevelop

bonjour,

j'ai compris ce que tu veut me dire.

mais je suis pas d'accord sur le point que toi tu veut pas que le resultat change. mais c'est normale que a change puisque entre la formule originale et ton implementation chacun a ses niveaux de gris, je veut dire "il faut juste garder la meme logique":


```

```



```

```

moi je pense que ton implementation de cette manire (juste au dessus) et plus logique ...(k=i+j), => k=0.......510.
et puis ce que je comprend pas c'est que dans la formule originale les niveaux de gris vont de 1  256 ??NORMALEMENT de 0  255, mais bon!

----------


## pseudocode

> ce que je comprend pas c'est que dans la formule originale les niveaux de gris vont de 1  256 ??NORMALEMENT de 0  255, mais bon!


De toutes facons, l'important n'est pas la formule utilise mais le rsultat obtenu. Si on obtient une valeur qui permet de caracteriser la texture, alors c'est bon.

En pratique je n'utilise pas toutes les 11 valeurs, mais seulement celles qui sont le plus discriminante. Gnralement ca se rduit a F1,F2,F3,F4 et F9.




> moi je pense que ton implementation de cette manire (juste au dessus) et plus logique ...(k=i+j), => k=0.......510


Je vais quand meme aller modifier le code que j'ai post pour le rendre cohrent avec les formules originales.

----------


## nounadevelop

voila ce qui est bien ::): 



> Je vais quand meme aller modifier le code que j'ai post pour le rendre cohrent avec les formules originales.


 MERCI....

revenant  nos moutons.......
cette procedure de decoupage, concernant les vignettes choisient manuellement, est ce que a marche pour une base de donnes qui volue dans le temps.

----------


## pseudocode

> revenant  nos moutons.......
> cette procedure de decoupage, concernant les vignettes choisient manuellement, est ce que a marche pour une base de donnes qui volue dans le temps.


Tout dpend de la manire dont tu vas utiliser ta base de rfrences. C'est  dire le choix de la mthode pour "catgoriser" une nouvelle zone X*X par rapports aux vignettes dj connues.

Base de rfrence:
vignette 1 -> caracteristiques (V1_1,V1_2,V1_3,...,V1_11) -> catgorie #1
vignette 2 -> caracteristiques (V2_1,V2_2,V2_3,...,V2_11) -> catgorie #1
vignette 3 -> caracteristiques (V3_1,V3_2,V3_3,...,V3_11) -> catgorie #2
...

Image  analyser:
zone 1 -> caracteristiques (Z1_1,Z1_2,Z1_3,...,Z1_11) -> ??????????
zone 2 -> caracteristiques (Z2_1,Z2_2,Z2_3,...,Z2_11) -> ??????????
...
zone N -> caracteristiques (Zn_1,Zn_2,Zn_3,...,Zn_11) -> ??????????

C'est un problme de "learning" et de "classification", des domaines de l'intelligence artificielle:

Problme 1: Comment trouver la "meilleure" catgorie pour une Zone de l'image connaissant les catgories pour les vignettes

Problme 2: Comment trouver la "meilleure" catgorie pour l'intgralit de l'image connaissant les catgories de chaque zone.

----------


## nounadevelop

bonsoir,

et les carrs X*X de l'image  analyser, n'ont pas forcement la meme taille des vignettes, c'est a??

et les vignettes de la base est ce qu'ils ont une meme taille Y*Y tous? et comment choisir leurs taille et cette vignette de l'image original?

----------


## pseudocode

> et les carrs X*X de l'image  analyser, n'ont pas forcement la meme taille des vignettes, c'est a??


non, pas forcment. 




> et les vignettes de la base est ce qu'ils ont une meme taille Y*Y tous? et comment choisir leurs taille et cette vignette de l'image original?


Les vignettes c'est  toi de les choisir, de la taille que tu veux, pour que ca soit reprsentatif de la "texture".

----------


## nounadevelop

puisque tu parle de vignette pour les image de ma base pourquoi ne pas faire aussi une vignette pour l'image  analyser (au lieu de faire le decoupage) ?

----------


## pseudocode

> puisque tu parle de vignette pour les image de ma base pourquoi ne pas faire aussi une vignette pour l'image  analyser (au lieu de faire le decoupage) ?


vignette, zone, dcoupage: tout ca c'est la meme chose.

Je parle de "vignette" pour la base de rfrence car c'est une portion d'image qui contient uniquement la texture qui nous interesse.

Les "zones" de dcoupage d'une image comportent une ou plusieurs textures, suivant l'endroit et la taille de la dcoupe.

----------


## nounadevelop

> Je parle de "vignette" pour la base de rfrence car c'est une portion d'image qui contient uniquement la texture qui nous interesse.


mais pour chaque image de ma base c'est toute la texture de l'image qui m'interesse(en plus je peu pas definir  priori des vignettes surtout que je peut ajouter des images dite "manuscrits"  ma base). alors?

----------


## pseudocode

> mais pour chaque image de ma base c'est toute la texture de l'image qui m'interesse(en plus je peu pas definir  priori des vignettes surtout que je peut ajouter des images dite "manuscrits"  ma base). alors?


alors, ce n'est pas de l'analyse de texture que tu veux faire !!

----------


## nounadevelop

:8O:  
pourquoi, *voir si la texture d'une image est celle d'un manuscrit* en eyant une base de 100% manuscits (qui nous aide  faire la comparaison tout en etant aussi une base de stockage de manuscrits) c'est pas de *l'analyse de texture* a????

----------


## pseudocode

> pourquoi, *voir si la texture d'une image est celle d'un manuscrit* en eyant une base de 100% manuscits (qui nous aide  faire la comparaison tout en etant aussi une base de stockage de manuscrits) c'est pas de *l'analyse de texture* a????


Je ne sais pas  quoi ressemblent tes images mais si tu traites l'intgralit d'une image comme une seule texture je ne pense pas que tu pouras differencier un manuscrit arabe et un manuscrit anglais. Mais il faut tester... peut-etre que ca marchera.

----------


## nounadevelop

bonsoir,

Merci pour ta reponse....
finalement je vais faire la chose suivante:
faire un dcoupage de l'image en zone de taille x*x et ignorer les bords.
pour chaque zone je calcule le vecteur des indices.
qu'est ce que tu pense de a ?

----------


## pseudocode

> finalement je vais faire la chose suivante:
> faire un dcoupage de l'image en zone de taille x*x et ignorer les bords.
> pour chaque zone je calcule le vecteur des indices.
> qu'est ce que tu pense de a ?


Alors, quels sont les rsultats obtenus ?

----------


## nounadevelop

bonjour,

tu veut dire en terme de reconnaissance du manuscrit?

----------


## pseudocode

> bonjour,
> 
> tu veut dire en terme de reconnaissance du manuscrit?


Dj,, est-ce que les zones qui ont visuellement le "mme genre" de texture ont bien des vecteurs de caracterisitques qui sont proches ?

----------


## nounadevelop

bonjour,




> Dj, est-ce que les zones qui ont visuellement le "mme genre" de texture ont bien des vecteurs de caracterisitques qui sont proches ?


il me semble. voila un exemple de deux textures [32*32]du "meme genre" :



```

```

(pour l'exemple j'ai pris juste 5 chiffres aprs la virgule)
alors qu'est ce que tu pense???

mais ce que j'arrive pas  faire c'est afficher une fenetre x*x d'une image, est ce que tu a une ide?
MERCI d'avance....

----------


## pseudocode

> (pour l'exemple j'ai pris juste 5 chiffres aprs la virgule)
> alors qu'est ce que tu pense???


Ca a l'air bien.  ::king:: 

il faudra verifier galement qu'on obtient des valeurs loignes pour des textures visuellement diffrentes.




> mais ce que j'arrive pas  faire c'est afficher une fenetre x*x d'une image, est ce que tu a une ide?


Qu'est-ce que tu veux dire par "afficher" ? Crer une petite image de taille x*x ?

----------


## nounadevelop

voici le resultat d'une texture 32*32 que j'ai calculer  partir d'une autre image :


```

```

je pense que si tu compare a au 2 resultats precedents, a a l'air different, alors?

et concernant l'affichage, oui je pense que tu ma compris..
j'ai une image et je veut afficher une portion de taille x*x de cette image..j'arrive pas.

ensuite j'aimerais afficher l'image contraste, l'image homognit..etc.comment faire??

----------


## pseudocode

> je pense que si tu compare a au 2 resultats precedents, a a l'air different, alors?


c'est parfait.




> et concernant l'affichage, oui je pense que tu ma compris..
> j'ai une image et je veut afficher une portion de taille x*x de cette image..j'arrive pas.


Il faut voir cela dans le forum qui de ton langage de programmation.  :;): 




> ensuite j'aimerais afficher l'image contraste, l'image homognit..etc.comment faire??


Heu.. il n'y a pas d' "image de contraste". Le contraste c'est juste UNE valeur numrique. Ce que tu peux afficher ventuellement c'est l'image qui reprsente la matrice de co-occurrence.

----------


## nounadevelop

> Il faut voir cela dans le forum qui de ton langage de programmation.


d'accord. merci...




> Heu.. il n'y a pas d' "image de contraste".


j'ai vu a ici (dans chapitre 6, Figure 6.8)http://www.lets.africa-web.org/cours/TI/Chapitre6.htm. et meme dans d'autres liens. c'est quoi alors??

----------


## pseudocode

> j'ai vu a ici (dans chapitre 6, Figure 6.8)http://www.lets.africa-web.org/cours/TI/Chapitre6.htm. et meme dans d'autres liens. c'est quoi alors??


Ah.. ok. C'est l'image obtenue a partir des valeurs de contraste pour des zone X*X centres autour de chaque pixelde l'image. 

C'est une mthode plus longue que de dcouper l'image en zone X*X contigus, mais a permet de faire une segmentation plus prcise.

----------


## nounadevelop

bonjour,

donc pour mon cas (decoupage de toute l'image en zones de x*x avec ignorance des bords) c'est pas possible de le faire??

----------


## pseudocode

> bonjour,
> 
> donc pour mon cas (decoupage de toute l'image en zones de x*x avec ignorance des bords) c'est pas possible de le faire??


Si tu peux. Que comptes tu faire de cette "image de contraste" une fois que tu l'auras calcule ?

----------


## nounadevelop

c'est juste pour l'afficher, pour dire voila l'image de tel indice. mais sinon toute l'utilit est dans les valeurs des indices (le vecteur)qui permettent de faire la comparaison....pourquoi y a t-il autre chose qu'on peut faire avec ce genre d'images(image de contraste...etc)??

----------


## pseudocode

> pourquoi y a t-il autre chose qu'on peut faire avec ce genre d'images(image de contraste...etc)??


A part de la segmentation, je ne vois pas.

----------


## nounadevelop

est ce que tu a dja calcul et afficher une image contraste, image homognit...etc??

----------


## pseudocode

> est ce que tu a dja calcul et afficher une image contraste, image homognit...etc??


Heu, oui. Enfin surement. Je n'en ai pas gard de grands souvenirs.  ::koi:: 

Ces "images" ne sont pas une fin en soi, mais une tape dans un processus plus grand (gnralement de la segmentation)

----------


## nounadevelop

revenant  "ma methode", en realit j'ai pas suivi un algorithme bien dtermin.  part la matrice de coocurrence, mais cot segmentation  ::?: ......la segmentation que j'ai faite en peu dire quel est au hasard, parceque je prend n'importe quelle image, je la dcoupe en 32*32 et qu'on je dpasse la hauteur ou la largeur j'ignore cette zone qui dborde ...tout simplement.
je suis un peu inquite ::roll::  parceque j'ai vu dans ta page web l'algorithme du SPLIT/MERGE, et maintenent vient s'ajout cette methode de segmentation...avec ces image de contraste ...etc. j'espre que je suis pas  cot de la plaque... ::aie:: , alors qu'est ce que tu pense???

----------


## pseudocode

> je suis un peu inquite parceque j'ai vu dans ta page web l'algorithme du SPLIT/MERGE, et maintenent vient s'ajout cette methode de segmentation...avec ces image de contraste ...etc. j'espre que je suis pas  cot de la plaque..., alors qu'est ce que tu pense???


Si j'ai bien compris ton problme, tu ne cherches pas  faire de la segmentation. Donc il n'y a pas de quoi s'inquieter.

Je pense que dcouper ton image en carrs de 32x32 puis calculer les caractristiques d'Haralick sur chaque carr est une trs bonne direction.  ::king::

----------


## nounadevelop

Bonsoir,




> Je pense que dcouper ton image en carrs de 32x32 puis calculer les caractristiques d'Haralick sur chaque carr est une trs bonne direction.


OK, merci...




> Ce que tu peux afficher ventuellement c'est l'image qui reprsente la matrice de co-occurrence.


tu peut m'aider sur a, STP?. (je veut faire a pour chaque zone de l'image).et est ce que c'est juste un affichage?, histoire de voir l'image qui reprsente la matrice de co-occurrence, ou c'est utile( si oui, en quoi?).

et pour l'image contraste,.. etc. il faut que j'oublie cette histoire ou quoi?

MERCI d'avance.

----------


## pseudocode

> tu peut m'aider sur a, STP?. (je veut faire a pour chaque zone de l'image).et est ce que c'est juste un affichage?, histoire de voir l'image qui reprsente la matrice de co-occurrence, ou c'est utile( si oui, en quoi?).


Non ce n'est pas utile, c'est juste un affichage. Regarde sur le lien externe que j'ai donn dans la contribution.




> et pour l'image contraste,.. etc. il faut que j'oublie cette histoire ou quoi?


Pour l'instant, je ne pense pas que ca te sera utile.

----------


## nounadevelop

bonsoir,

tu veut dire a?(il me semble quelle affiche une matrice)



```

```

elle affiche quoi au juste cette methode?une matrice ou une image?Tu ma parl d'image de matrice de coocurrence, non?

----------


## pseudocode

> tu veut dire a?(il me semble quelle affiche une matrice)


non, je voulais dire ca:

http://www.crm.umontreal.ca/~physnum...e/texture.html

(en haut  droite de l'applet)




> elle affiche quoi au juste cette methode?une matrice ou une image?Tu ma parl d'image de matrice de coocurrence, non?


Cette mthode elle renvoie, sous forme d'une chaine de caractres, les valeurs dans la matrice.

----------


## nounadevelop

bonjour,

j'ai vu l'affichage mais le code source de l'applet n'est pas disponible  ::?:

----------


## pseudocode

> bonjour,
> 
> j'ai vu l'affichage mais le code source de l'applet n'est pas disponible


c'etait juste pour te montrer de quoi je parlais: afficher la matrice de co-occurence sous forme d'un damier ou l'intensit de chaque case reprsente la valeur de l'element de la matrice ( 0 = noir -> 1 = blanc )

----------


## nounadevelop

bonsoir,

tu peut pas m'aider sur a?(ecrire le code).

merci d'avance.  ::):

----------


## Matthieu Brucher

> bonsoir,
> 
> tu peut pas m'aider sur a?(ecrire le code).
> 
> merci d'avance.


Tout dpend le langage que tu utilises. Tu traites simplement ta matrice de co-occurrence comme une image, rien de plus.

----------


## nounadevelop

Bonsoir,

merci d'avoir repondu.




> Tout dpend le langage que tu utilises. Tu traites simplement ta matrice de co-occurrence comme une image, rien de plus.


j'utilise C#(dotnet).
concernant la matrice de coocurrence, en realit j'ai fait un decoupage de mon image en zones de taille x*x, et pour chaque zone je calcule la matrice de coocurrence pour extraire un vecteur d'indices (contraste, homogenit..etc).
donc je veut juste faire un affichage de l'image de coocurrence comme dans cet applet JAVA :
http://www.crm.umontreal.ca/~physnum...e/texture.html

----------


## Matthieu Brucher

Dans ce cas, tu cres une image plus grande avec la matrice de cooccurrence dans une sous-partie de l'image.

----------


## nounadevelop

je compends pas ce que tu veut dire  ::aie:: 
et concernant l'image de la matrice de coocurrence, comment la crer??

----------


## Matthieu Brucher

Ta matrice de cooccurrence, c'est une image en niveaux de gris. Tu les mets juste les unes  ct des autres.

----------


## nounadevelop

Bonsoir,




> Ta matrice de cooccurrence, c'est une image en niveaux de gris. Tu les mets juste les unes  ct des autres.


je comprends pas a?? :



> Ta matrice de cooccurrence, c'est une image en niveaux de gris


ma matrice de coocurrence, c'est une matrice avec des elements(de probabilits)et non pas des niveaux de gris. et puis c'est pas une image. et justement je cherche  crer cette image (de matrice de coocurrence) et l'afficher.




> Tu les mets juste les unes  ct des autres


quoi???????tu peut etre plus clair, STP.

MERCI d'avance.

----------


## Matthieu Brucher

> ma matrice de coocurrence, c'est une matrice avec des elements(de probabilits)et non pas des niveaux de gris. et puis c'est pas une image. et justement je cherche  crer cette image (de matrice de coocurrence) et l'afficher.


Une matrice, a peut se considrer comme une image, chaque lment entre 0 et 1 est un niveau de gris entre noir et blanc, c'est tout !

----------


## nounadevelop

> Une matrice, a peut se considrer comme une image, chaque lment entre 0 et 1 est un niveau de gris entre noir et blanc, c'est tout !


je comprends pas que tu veut associer une probabilit aux niveaux de gris???? quelle est la relation????

----------


## Matthieu Brucher

Je te l'ai donne, la relation ! 0 = noir, 1 = blanc.

----------


## nounadevelop

> Je te l'ai donne, la relation ! 0 = noir, 1 = blanc.


NON, je veut dire a n'a pas de sens....d'associer une proba  un niveau de gris, en plus y a pas que le noir et le blanc concernant les niveaux de gris.
et si on suppose que le noir= proba "0".
le blanc= proba "1".
pour une proba de 0.5, 0.2, 0.9 .......comment tu fait?.

----------


## Matthieu Brucher

A toi de dcider, mais une relation linaire est gnralement ce qui est utilis (t'es au courant qu'on utilise des valeurs entre 0 et 255 pour les niveaux de gris ou de couleur dans 99% des images ? le reste, c'est des flottants entre 0 et 1).

----------


## nounadevelop

:8O:  tu est srieux?.

----------


## Matthieu Brucher

Pourquoi je ne le serai pas  ::aie::  ?

----------


## nounadevelop

Bonjour,

mais tu n'a pas repondu  ma question :



> a n'a pas de sens....d'associer une proba  un niveau de gris????????????

----------


## pseudocode

> Bonjour,
> 
> mais tu n'a pas repondu  ma question :
> 
> 
> 
> 
> 			
> 				a n'a pas de sens....d'associer une proba  un niveau de gris????????????


C'est juste que c'est humainement plus simple  comprendre que 256x256 valeurs entre 0 et 1. Mais tu n'es pas oblig de crer cette reprsentation graphique de la matrice de co-occurence.

----------


## nounadevelop

Bonjour,




> C'est juste que c'est humainement plus simple  comprendre que 256x256 valeurs entre 0 et 1. Mais tu n'es pas oblig de crer cette reprsentation graphique de la matrice de co-occurence.


OK  ::king:: 
et comment je vais procder pour la reprsentation graphique de la matrice de co-occurence comme par exemple celle de l'applet JAVA....si tu a une autre ide pourquoi pas....l'essentiel c'est qu'on en finissent avec cette histoire..... ::traine:: 

MERCI...

----------


## pseudocode

> et comment je vais procder pour la reprsentation graphique de la matrice de co-occurence comme par exemple celle de l'applet JAVA....


Pour reprsenter une matrice de co-occurence, on peut crer une image qui ressemble  un damier. Chaque case du damier correspond  un lment de la matrice. Comme le disait Matthieu Brucher, la couleur de chaque case est une nuance de gris de 0.00=noir  1.00=blanc.

Pour ton cas, o tu as plusieurs matrices de co-occurence, je ne sais pas trop comment faire.  ::koi::

----------


## nounadevelop

> Pour ton cas, o tu as plusieurs matrices de co-occurence, je ne sais pas trop comment faire.


en tout cas MERCI.... 

alors Matthieu Brucher...une ide?

----------


## Matthieu Brucher

Je les affiche les unes  ct des autres. Faire la somme n'a pas d'intrt puisque cette somme n'est pas utilis dans tes algos.

----------


## nounadevelop

Bonjour,




> Je les affiche les unes  ct des autres. Faire la somme n'a pas d'intrt puisque cette somme n'est pas utilis dans tes algos.


je comprends pas ?.... afficher quoi?...c'est des proba 0.1, 0.2, 0.9,...
prenant 1=blanc, 0=noir,...jusque la a va, et le reste : 0.1, 0.5, 0.3........??????(ces des valeurs entre 0 et 1 que je connais pas auparavant) comment je vais afficher leurs nuance de gris????????

juste une derniere remarque : pour afficher une nuance de gris il faut quelle soit une valeur entiere(en tout cas dans C#).

alors??

----------


## contremaitre

> Bonjour,
> 
> 
> 
> je comprends pas ?.... afficher quoi?...c'est des proba 0.1, 0.2, 0.9,...
> prenant 1=blanc, 0=noir,...jusque la a va, et le reste : 0.1, 0.5, 0.3........??????(ces des valeurs entre 0 et 1 que je connais pas auparavant) comment je vais afficher leurs nuance de gris????????
> 
> juste une derniere remarque : pour afficher une nuance de gris il faut quelle soit une valeur entiere(en tout cas dans C#).
> 
> alors??


il faut que tu transforme tes valeurs entre 0..1 en 0..255 si c'est le mode d'affichage des niveaux de gris que tu utilises.
Donc juste  multiplier les valeurs par 255 quoi.

----------


## Matthieu Brucher

Tu cres des matrices de cooccurrence pour des morceaux de ton image, non ? Tu remplaces le morceau par l'image de la matrice de cooccurrence. Et pour l'chelle, j'en ai dj parl, tu peux faire comme le propose pasdeface.

----------


## nounadevelop

Bonjour,




> Donc juste  multiplier les valeurs par 255 quoi.


c'est pas clair?????????????

----------


## contremaitre

ben :
si 0 = noir et 1 = blanc
et si pour toi 0 = noir et 255 = blanc.

Tu dois simplement changer d'echelle de niveau de gris et passer de valeurs comprises entre 0 et 1  des valeurs comprises entre 0 et 255.

Si tu multiplie par 255 :
0*255 = 0
1*255 = 255

Deja les bornes sont ok.
Et par exemple 0.5 fairai 0.5*255 = 127
etc...

Ce qui fait bien des valeurs entieres au passage

----------


## nounadevelop

MERCI c'est clair maintenant ::king:: 

et  ton avis, si j'arrondie les resultats c'est mieux encore, non?
127.2 =>127
127.7 =>128

----------


## contremaitre

oui tu peux, mme si je pense pas que la diffrence soit visible  l'oeil.

----------


## nounadevelop

OK  ::king:: 

MERCI pour vous tous...

A bientot..

----------


## l_seringa

tout d'abord j'ai bien lu la discussion ds le debut jusqu' la fin mais il y a juste des prcisions dont je voudrai votre aide.

1. si on calcule la matrice de cooccurrence de 0 est-ce qu'elle doit etre symtrique ca veut dire si je trouve que le 1 est  cot du 4 (le 4 est la droite de 1) doit incrmnter la matrice de 0 de 1 en mat[0][4] et mat[4][0] sachant que mat est la matrice de cooccurrence de 0*??


2. j'ai vue que je doits tout d'abord normaliser la matrice que je calcule. Ca veut dire si je prends mat[i][j] pour la normaliser je dois diviser chaque valeur de la matrice par (hauteur*largeur) de l'image. ben pourquoi dois je normaliser ???

3. Si je fais les 4 matrices pour 0,45,90,135 alors aprs les avoir normalis je dois calculer les caractristiques. est-ce que je dois les calculer pour chaque matrice  ou comme dit avant on choisit une certaine somme pour certaine matrices et faire le calcul des caractristiques.

Merci pour vos aides.

----------


## pseudocode

> 1.si on calcule la matrice de coooccurrence de 0 est-ce qu'elle doit etre symtrique ? Ca veut dire que si je trouve que le 1 est a cot du 4 (le 4 est la droite de 1) je doit incrmnter la matrice "mat" de 0 de 1 en mat[0][4] et mat[4][0] ?


Oui, la matrice est toujours symtrique quelque soit l'angle d'exploration. Donc si un pixel de valeur "v1" est a cot d'un pixel de valeur "v2", alors tu dois incrmenter mat[v1][v2] ET mat[v2][v1].




> 2.j'ai vu que je dois tout d'abord normaliser la matrice, donc ca veut dire que pour normaliser la matrice je doit dviser chaque valeur de la matrice par (hauteur*largeur) de l'image ? Pourqoi dois-je normaliser ?


Oui, c'est a. Tu dois diviser chaque valeur de la matrice par le nombre total de pixel que tu as explor. Si tu as explor toute l'image, a revient effectivement  diviser par (hauteur*largeur) de l'image.

On doit normaliser la matrice car les calculs que l'on va faire dessus sont des calculs statistiques sur des probabilits. Et les probabilits c'est mieux entre 0 et 1.  ::P: 




> 3.Si je fait les 4 matrices pour 0,45,90,135 alors aprs les avoir normalises je dois calculer les caractristiques. Est-ce que je dois les calculer pour chaque matrice ou, comme dit avant, on fait une certaine somme des matrices et on fait le calcul des caractristiques.


La littrature n'est pas claire sur ce point. Personnellement, j'ai eu de meilleurs rsultats en calculant les caractristiques de chaque matrice.

----------


## l_seringa

Merci infiniment PseudoCode.mes ides sont plus claire maintenant.

----------


## l_seringa

j'ai voulu juste savoir s'il y'a un lien pour pouvoir savoir les valeurs max et min des caractristiques de haralick.
merci

----------

