# Gnral Dveloppement > Algorithme & Mathmatiques > Traitement d'images >  transforme en ondelette de Haar

## contremaitre

Bonjour,

Je voudrais implmenter la transforme en ondelette de haar.
Cette transformation se faisant sur un signal en une dimension, pour une image il faut la faire sur les lignes et sur les colonnes.
D'aprs ce que j'ai compris il y a la dcomposition standart (faire les k niveaux de dcomposition sur les lignes puis k niveaux sur les colonnes) et la non-standart (un niveau sur les lignes puis un niveau sur les colonnes k fois).
Mais est ce que le resultat final est le meme?

Et aussi j'ai vu beaucoup d'implementation sur une image de taille nxn avec n une puissance de 2 sous prtexte que c'est plus rapide mais je vois pas en quoi?
*EDIT* : j'ai un ide pour la raison de la puissance de 2. Il faut pouvoir diviser la taille des lignes et colonnes par 2, k fois (k tant le nombre de niveaux de la transforme). Donc pour pouvoir faire le plus de niveaux possible, il faut que la taille soit une puissance de 2.

merci

----------


## pseudocode

> D'aprs ce que j'ai compris il y a la dcomposition standart (faire les k niveaux de dcomposition sur les lignes puis k niveaux sur les colonnes) et la non-standart (un niveau sur les lignes puis un niveau sur les colonnes k fois).
> Mais est ce que le resultat final est le meme?


A priori oui. Les 2 ondelettes tant orthogonales l'ordre ne devrait pas avoir d'importance.

----------


## contremaitre

merci.
Et selon les sources il y a un facteur de normalisation (j'ai vu une fois 2, une fois racine de 2)  chaque niveau.
Mais des fois il n'y en a pas.

A quoi sert-il?

----------


## pseudocode

> merci.
> Et selon les sources il y a un facteur de normalisation (j'ai vu une fois 2, une fois racine de 2)  chaque niveau.
> Mais des fois il n'y en a pas.
> 
> A quoi sert-il?


Si on reprsente les ondelettes de base comme des vecteurs, on prfre avoir une base orhonorme. Pour l'orthogonalit, c'est bon par nature car les ondelettes sont cres de manire a tre ortogonales. Pour la normalisation il faut diviser par la norme du vecteur. La difference entre "2" et "racine(2)" vient de la taille de la base utilise:



```

```

----------


## contremaitre

une petite faute il me semble


```

```

Donc si on applique la transforme de Haar plusieurs fois, on peut appliquer le facteur de normalisation seulement  la fin non?
Exemple sur 3 niveaux en base-2, on calcul les 3 niveaux sans normaliser puis  la fin on normalise par 1/(racine(2))^3 = 1/(2*racine(2))

----------


## pseudocode

> une petite faute il me semble


A un automorphisme prs c'est la mme base  :;):  . Tu peux choisir celle que tu veux. C'est comme choisir le sens de l'axe Y sur une image (vers le haut ou vers le vas): a n'a pas d'importance tant que tu prends toujours le mme.




> Donc si on applique la transforme de Haar plusieurs fois, on peut appliquer le facteur de normalisation seulement  la fin non?
> Exemple sur 3 niveaux en base-2, on calcul les 3 niveaux sans normaliser puis  la fin on normalise par 1/(racine(2))^3 = 1/(2*racine(2))


Oui, tout a fait.

----------


## contremaitre

ha oui, par contre j'ai failli me faire avoir, comme on divise le signal en deux  chaque niveau,  la fin, pour 3 niveaux, il faut normaliser par :
2*racine(2) pour le premier quart, 2 pour le deuxieme quart et enfin racine(2) pour la deuxieme moiti du signal.

Pour un signal  deux dimensions (une image par exemple) ca se complique encore puisque il faut normaliser dans les deux dimensions, donc je dirai qu'il faut prendre les normalisations prcedentes au carr. (donc par exemple 8 pour le 3e niveau qui est le niveau le plus petit en taille).

Pour illustrer ce que j'apelle niveau : voici lena avec haar appliqu 3 fois : http://www.math.uiowa.edu/~jorgen/ImagesWav/lena3.png

----------


## pseudocode

> ha oui, par contre j'ai failli me faire avoir, comme on divise le signal en deux  chaque niveau,  la fin, pour 3 niveaux, il faut normaliser par :
> 2*racine(2) pour le premier quart, 2 pour le deuxieme quart et enfin racine(2) pour la deuxieme moiti du signal.


Yes. il faut normaliser par racine(2)^niveau... ou alors ne pas normaliser du tout. Aprs tout, personne n'impose que la base soit ortho-norme. C'est juste que c'est mathmatiquement plus pratique.

----------


## contremaitre

Disons que j'avais besoin de normaliser les diffrents niveaux entre eux pour comparer l'intensit des bords selon les niveaux. 
Donc au final (racine(2)^niveau)^2 = racine(2) ^ (2*niveau) pour une image.
Ca marche trs bien, meci !

----------

