# Gnral Dveloppement > Algorithme & Mathmatiques > Traitement d'images >  Traitement d'images et EDP

## rouliane

Bonjour,

Je vais commencer au mois de mars un stage sur le traitement d'images, qui porte donc sur les techniques d'EDP en traitement d'images ( en utilisant le logiciel Matlab). 
Le but en gros c'est de voir les rsultats qu'on obtient avec les EDP en comparaison des filtres plus classiques.
J'ai essay de chercher sur le net un peu de documentation pour rentrer dans le vif du sujet, mais j'ai trouv surtout beaucoup de thories sur les EDP ( diffusion isotrope, anisotrope, etc...).
J'aimerais savoir si certains d'entre vous auraient des liens vers des documents plus "pratiques" du type TP, TD ou toute autre chose. En effet, le but va etre de programmer tout a, j'imagine qu'il va falloir passer par la discrtisation des EDP, mais je suis un peu perdu.
Si quelqu'un a toute autre information sur le sujet je suis preneur aussi  ::D: 

Je vous remercie,

Julien.

----------


## pseudocode

Bonsoir,

Pour commencer, as-tu lu le cours de Millie ?

http://humbert-florent.developpez.co...ent/debruitage

----------


## rouliane

Non, je ne connaissais pas, je te remercie !  ::D:

----------


## FR119492

Salut !




> Je vais commencer au mois de mars un stage sur le traitement d'images, qui porte donc sur les techniques d'EDP en traitement d'images ( en utilisant le logiciel Matlab).


La dmarche correcte, dans ce cas, consiste  parcourir, *dans l'ordre*, les trois tapes suivantes:
Analyser le problme pos.Choisir des algorithmes qui permettront de rsoudre le problme.Choisir le langage ou le logiciel le mieux adapt  ces algorithmes.
Je crains que tu ne fasses les choses exactement dans l'ordre inverse: tu as dj choisi MatLab, tu sembles n'avoir qu'une ide assez imprcise des quations aux drives partielles et tu ne nous dis pas un mot des (mauvais) traitements que tu veux faire subir  tes images. Alors, s'il te plait, commence par le commencement et on t'aidera volontiers.

Jean-Marc Blanc

----------


## rouliane

Bonjour Jean-Marc,

C'est vrai que a n'es pas trs prcis.
En ce qui concerne le logiciel, on m'a dit que j'allais travailler sous Matlab, aprs c'est peut-etre pas le logiciel qui sera le plus adapt, mais j'ai l'impression que je n'aurais pas trop le choix.
Conernant le traitement qu'on doit appliquer aux images : on part d'images radar qui prsentent un fort niveau de bruit, on veut donc les dbruiter. Les filtrages "classiques" ne donnent pas de rsultats satisfaisants. 
On veut donc s'intresser aux mthodes plus rcentes de dbruitage, qui fait intervenir les EDP ou la minimisation d'nergie. Mon but est donc d'implmenter ces mthodes et de les comparer aux rsultats qu'on trouvait avec les filtres classiques.

Voil, j'espre que c'est plus clair maintenant. Je ne cherchais pas du tout  ce qu'on fasse tout le travail  ma place, je voulais simplement avoir quelques informations avant de dbuter mon stage vu que j'ai un peu de temps.

Julien.

----------


## FR119492

Salut !

Si c'est pour faire des essais d'algorithmes dans le cadre d'un stage, MatLab est en effet un choix raisonnable, au moins pour commencer. Laissons donc pour le moment ce point de ct.

En ce qui concerne le problme pos, il faudrait avoir le plus possible d'informations sur les images que tu vas devoir traiter: quelle est la nature du signal que tu veux extraire? quelle est la nature du bruit que tu veux liminer?

Quant aux quations aux drives partielles, j'ai beaucoup de peine  voir ce qu'elles viennent faire l, tout d'abord parce que ce sont des "objets mathmatiques" et en tout cas pas des algorithmes. D'autre part, il en existe beaucoup: q. de Laplace, de Poisson, de Fourier, de d'Alembert, des tlgraphistes, etc. Alors laquelle?

Jean-Marc Blanc

----------


## rouliane

Je n'ai pas encore beaucoup d'informations vu que je n'ai pas commenc le stage, mais en gros le problme du bruit se pose surtout sur le contour de ces images : on a des sortes de taches blanches ( comme un gros point lumineux ) sur certains contours, qu'on veut liminer.
Ensuite, l'utilisation des EDP est surtout du au fait que visiblement c'est en vogue en ce moment et la boite serait surement curieuse de voir ce que a peut donner. Mais y'a peut-etre d'autres mthodes plus appropries ici, mais visiblement on veut que je bosse avec les EDP.
Et le but des EDP c'est de dire ( d'aprs ce que j'ai pu lire ) que, en notant I l'image, I vrifie une qua-diff ( laquelle, je sais pas trop pour l'instant, y'en a plusieurs qu'on peut utiliser mais je ne sais pas dans quels cas ) et d'approximer j'imagine cette EDP par diffrences finies ou autre.

----------


## pseudocode

> Je n'ai pas encore beaucoup d'informations vu que je n'ai pas commenc le stage, mais en gros le problme du bruit se pose surtout sur le contour de ces images : on a des sortes de taches blanches ( comme un gros point lumineux ) sur certains contours, qu'on veut liminer.


Ah... alors c'est pas du debruitage (Denoising) mais du defloutage (Deblurring). 

Dans ces cas la les methodes de diffusions (Malik & Perona) donnent des bons rsultats (en tout cas meilleurs que Wiener)

----------


## rouliane

Ah, merci pseudocode ! 
Dsol pour le language utilis, je ne suis pas assez familier pour faire la distinction. Effectivement, a doit etre du dfloutage car je dois comparer les mthodes EDP aux filtres classiques, de Lee ou Wiener.
Je vais me pencher sur la mthode de diffusion de Malik & Perona.

----------


## pseudocode

> Dsol pour le language utilis, je ne suis pas assez familier pour faire la distinction.


En fait, je ne suis pas sur a 100% de ce que tu veux faire. Mais si tes contours bavent ou sont flous, c'est certainement du deblurring que tu cherches. Le denoising c'est plus lorsque tu as de la "neige" sur ton image.

(vous remarquerez le vocabulaire super technique que j'ai employ  ::aie:: )

----------


## rouliane

Ca doit effectivement etre du debbluring parce que je dois comparer avec le filtre de Wiener.
Aprs avoir mis en place l'EDP, j'ai pas trop le choix, je dois la discrtiser par diffrences finies ?

----------


## millie

Malik et Perona : http://www.developpez.net/forums/sho...d.php?t=328910
Filtre de choc de Osher Rudin pour le dfloutage : http://www.developpez.net/forums/sho...d.php?t=416703

----------


## rouliane

Merci Millie.
Je suis en train de lire ton cours, et y'a quelque chose que je comprends pas : tu discrtises la drive premire par : 

Dx(im,x,y)=(1/2)*( imageLire(im,x+1,y)-imageLire(im,x-1,y) )

Pourquoi ne divise-tu pas par h (le pas d'espace ) ?

----------


## pseudocode

> Dx(im,x,y)=(1/2)*( imageLire(im,x+1,y)-imageLire(im,x-1,y) )
> 
> Pourquoi ne divise-tu pas par h (le pas d'espace ) ?


 ::mrgreen::

----------


## millie

> Merci Millie.
> Je suis en train de lire ton cours, et y'a quelque chose que je comprends pas : tu discrtises la drive premire par : 
> 
> Dx(im,x,y)=(1/2)*( imageLire(im,x+1,y)-imageLire(im,x-1,y) )
> 
> Pourquoi ne divise-tu pas par h (le pas d'espace ) ?


En fait, pour faire simple, la drive de f en h pour tre calcul par la limite en 0 de :
1/h(f(x+h) - f(x)), et je prend h= 1 ce qui donne : f(x+1) - f(x)

Pour faire compliqu, une image est une fonction f de R dans R
On discrtise la fonction en une image u discrte par un pas h par la formule 
u(i,j) = f(h*i, h*j).

Ce qui fait que l'on a une approximation de la drive par : 1/h(f(x+h,y)-f(x,y))
On multiplie par h et on a : h * df/dx = f(x+h, y) - f(x,y) = u(x/h+1, y/h) - u(x/h, y/h)
En posant i = x/h et j = y/h qui sont entiers, on obtient :
h df(h*i, h*j) = u(i+1, j) - u(i,j)

Tu peux aprs faire rentre h dans df et tu obtiens une approximation de la drive en utilisant u (il faut utiliser une composition (f o g)' = g' f' o g pour voir que a colle bien car il ne faut pas oublier que u(i,j)  =f(h*i, h*j) )

----------


## rouliane

Merci.
En effet, a m'apprendra  lire trop vite (j'avais lu x+h)   ::mrgreen:: 
Un pas h=1 est suffisant en terme de prcision ?

Sinon, j'ai du mal  faire la diffrence entre Thikonov et Malik et Perona :
Ce sont bien 2 mthodes diffrentes de restauration d'images ?
Mais quelle est alors la diffrence entre la diffusion (Malik et Perona) et le filtrage ( Thikonov ) ? Est ce que la finalit est la mme ?

----------


## millie

> Merci.
> En effet, a m'apprendra  lire trop vite (j'avais lu x+h)  
> Un pas h=1 est suffisant en terme de prcision ?


Tu verras dans l'explication plus complique que le pas est bien de h par rapport  la discrtisation. On pourrait croire qu'on a 1, mais non, la notation u(i,j) avec (i,j) entier est une astuce pour travailler avec des coefficients entiers, mais il ne faut pas perdre de vue que cela reprsente une fonction de R dans R avec u(i,j) = f(hi,hj) )





> Sinon, j'ai du mal  faire la diffrence entre Thikonov et Malik et Perona :
> Ce sont bien 2 mthodes diffrentes de restauration d'images ?
> Mais quelle est alors la diffrence entre la diffusion (Malik et Perona) et le filtrage ( Thikonov ) ? Est ce que la finalit est la mme ?


Malik et Perona est bien plus rapide. Malik et Perona est plus proche de la mthode de la variation totale ou des hypersurfaces par son principe car a diffuse suivant les bords (alors que Thikonov fait de la diffusion de manire anisotrope).
Malik et Perona a l'avantage d'tre trs rapide, une 20aine d'itration suffise en gnral.

----------


## rouliane

> Tu verras dans l'explication plus complique que le pas est bien de h par rapport  la discrtisation. On pourrait croire qu'on a 1, mais non, la notation u(i,j) avec (i,j) entier est une astuce pour travailler avec des coefficients entiers, mais il ne faut pas perdre de vue que cela reprsente une fonction de R dans R avec u(i,j) = f(hi,hj) )


Ah oui dsol, j'avais encore une fois lu trop vite.
Trs astucieux en tout cas, j'avais encore jamais vu a dans une discrtisation.




> Malik et Perona est bien plus rapide. Malik et Perona est plus proche de la mthode de la variation totale ou des hypersurfaces par son principe car a diffuse suivant les bords (alors que Thikonov fait de la diffusion de manire anisotrope).
> Malik et Perona a l'avantage d'tre trs rapide, une 20aine d'itration suffise en gnral


Ok. Ton poly est trs bien fait en tout cas, car il prsente toutes ces mthodes. Ca va bien m'aider pour mon stage  ::D: 
Par curiosit, pourquoi tu ne traites pas dans ton poly de la mthode de Malik et Perona ? (car les autres en sont trs proches ? )

----------


## millie

> Ok. Ton poly est trs bien fait en tout cas, car il prsente toutes ces mthodes. Ca va bien m'aider pour mon stage 
> Par curiosit, pourquoi tu ne traites pas dans ton poly de la mthode de Malik et Perona ? (car les autres en sont trs proches ? )


Ces algorithmes reposent tous sur la mme quation initiale, mais les mthodes de rsolution sont assez diffrentes. Thikonov, variation totale, hypersurface ont une mthode de rsolution tout  fait similaire, c'est pour a que j'ai fait qu'une pierre trois coups

----------


## rouliane

Ok, merci.
Mais la mthode de Malik et Perona est aussi semblable aux 3 autres ?

----------


## rouliane

Bonjour,

J'aurais une petite question par rapport au calcul de gradient en diffrences finies : j'ai une image, qui a pour taille 210 x 627.
Je ne vois pas comment je pourrais avoir un pas d'espace mieux que 1, en gros dans la diffrence finie, j'cris : dxx=image(i+1,j)-2*image(i,j)+image(i-1,j) , c'est le seul moyen de faire, non ?
Car je peux pas crire image(i+*h*,j) , avec h non entier, car cet lment n'est alors pas dfini.
Y'a surement un moyen de faire intervenir un pas h non entier, mais je ne vois pas comment.

----------


## millie

> Y'a surement un moyen de faire intervenir un pas h non entier, mais je ne vois pas comment.



Non. Je me rpte, quand tu cris image(i,j), il faut se dire qu'il y a dj un changement de variable (on note image(i,j) au lieu de image(hi, hj)) pour que ce soit plus simple  manipuler pour un ordinateur (tu ne peux avancer que de pixel en pixel, donc de 1 en 1) et mentalement (i reprsente le i-ime pixel))

----------


## rouliane

Ok, merci. ::D:

----------


## rouliane

Encore une petite question purement pratique : comment peut-on calculer le gradient en diffrences finies sur le bord ( sachant qu'on a besoin du pixel avant et aprs, qui n'existe pas ici ) ?
Quand j'applique mon algorithme, je ne calcule jamais le gradient au bord, et je sais pas comment grer a.

----------


## pseudocode

Gnralement on applique l'une des 4 methodes suivantes: mise a zero, continuit, miroir, spherique.

J'ai essay d'expliquer cela ici: 
http://xphilipp.developpez.com/artic...=page_3#LIII-B

Pour le gradient, je prefre la "continuit" car ca ne cre pas d'artefact.  :;):

----------


## millie

> Gnralement on applique l'une des 4 methodes suivantes: mise a zero, continuit, miroir, spherique.
> 
> J'ai essay d'expliquer cela ici: 
> http://xphilipp.developpez.com/artic...=page_3#LIII-B
> 
> Pour le gradient, je prefre la "continuit" car ca ne cre pas d'artefact.


Pour crire le cas gnral plus facilement. On dfinie des oprations d'extension de bord (BorderExtender en anglais) qui va simplement extrapol les bords (miroir, symtrie, 0, continuit).
Donc tu appliqueras juste avant ton borderExtender sur ton image (selon la taille du noyau de convolution), puis tu appliqueras la convolution qui rogne les bords (et donc tu auras une image de la mme taille  la fin)

----------


## rouliane

Merci beaucoup.
J'avais appliqu la continuit ( en disant que le pixel au bord est gal au pixel voisin ) et a marche bien.
Mais j'ai pas compris ce que tu dis sur la convolution : dans l'algo, quand j'applique la continuit sur les bords, je n'ai plus aucun problme.

----------


## pseudocode

> Merci beaucoup.
> J'avais appliqu la continuit ( en disant que le pixel au bord est gal au pixel voisin ) et a marche bien.
> Mais j'ai pas compris ce que tu dis sur la convolution : dans l'algo, quand j'applique la continuit sur les bords, je n'ai plus aucun problme.


Tu as 2 approches pour gerer le probleme des bords.

1. Travailler sur l'image d'origine et, lorsque tu as besoin d'un pixel "en dehors" de l'image, utiliser ton BorderExtender

2. Crer une image temporaire plus grande que l'image d'origine (en utilisant le BorderExtender) et ne travailler que sur l'interieur de l'image temporaire (loins des bords)

----------


## rouliane

Merci.

----------


## rouliane

Je voudrais revenir sinon sur le poly de Millie :  un des thormes centraux de son poly est le thorme 1 ( qui "limine" l'intgrale double )
Une hypothse de ce thorme est que les drives partielles de f par rapport  x et y soient nulles sur le bord. 
Mais qu'est ce qui nous prouve ensuite qu'on a toujours a qui est vrifi ? ( pour une image quelconque )


Sinon j'ai essay de programmer la mthode de Thikonov, voici le programme :



```

```

Et ce que j'obtiens : 




On voit pas trop, mais si on zoom un peu l'image, on remarque que le bord gauche de l'image dbruite est lgrement rouge et bleu, mais je ne sais pas du tout d'o a vient : une rreur dans mon programme ? de mauvaises conditions au bord ?
Merci d'avance  ::D:

----------


## rouliane

J'ai programm les autres mthodes, mais je n'obtiens pas du tout les mmes rsultats que Millie.
J'ai pourtant utilis les mmes paramtres que dans son poly.

*Mthode des variations totales :*

Programme :



```

```

Et les rsultats que j'obtiens :


J'obtiens une image spcialement floue, bien loin de ce qu'obtiens Millie.

Pareil pour la :

*Mthode des hypersurfaces :*

Programme : 



```

```

Et les rsultats que j'obtiens :


C'est pas beaucoup mieux  ::?: 

Si vous avez une ide d'o vient le problme, je suis preneur. Merci  ::D:

----------


## millie

Oui, c'est parce que tu as surement teste sur une petite image, il faut prendre la mme taille :

----------


## rouliane

Je comprends ce que a change de tester sur une image de taille diffrente ?
Je dois modifier les paramtres n, alpha etc.. suivant la taille de l'image ?

----------


## millie

> Je comprends ce que a change de tester sur une image de taille diffrente ?
> Je dois modifier les paramtres n, alpha etc.. suivant la taille de l'image ?


Ca change que tu as pris une image bruite dgrad.

Exemple plus marquant sur la discussion http://www.developpez.net/forums/sho...74&postcount=1

L'image :


Si on reprend tel quel l'image de gauche (qui est degrad car zoom), on obtient :
 et non l'image de gauche

Si par contre on travaille avec l'image original :

On obtient vraiment (bon ici, il y a des points blanc, on a jamais trouv pourquoi) :

----------


## rouliane

D'accord, donc en fait mon image tait bruite ET dgrade, c'est bien a ?
Sinon j'ai toujours pas compris pourquoi tu m'a parl de taille de l'image ?

----------


## pseudocode

Les algorithmes de reduction de taille recalculent la valeur des pixels en faisant une moyenne des pixels voisins. Si tu reduis la taille de l'image APRES avoir ajout un bruit, tu va changer la nature du bruit sur la l'image rduite.

Dans l'exemple de Millie, le bruit de dpart etait impulsionnel. Le fait d'avoir rduit l'image a chang la nature du bruit en une miriade de bruits localement gaussiens.

----------


## rouliane

ah d'accord ! Je pensais que les images que j'utilisais n'taient pas rduites.
Maintenant a marche trs bien !

J'aurais une dernire petite question et promis aprs j'arrte de bous embeter  ::mrgreen::  : 

Est ce que vous auriez de la littrature ( ou des liens internet ) qui aborde Tikhonov, les hypersurfaces, etc...
Parce que j'ai trouv pas mal de choses sur Malik et Perona, mais absolument rien sur Tikhonov ou les hypersurfaces. Et j'imagine que Millie a du se baser sur des textes dj fait. ( si tu pouvais me dire lesquels  ::D: )
En particulier j'aimerais bien voir comment on peut choisir ces coefficients alpha par exemple, car a me parait difficile de faire a  l'intuition, et en les faisant varier on peut obtenir des rsultats vraiment loin de ce qu'on attend.
Merci  vous !

----------


## millie

> Est ce que vous auriez de la littrature ( ou des liens internet ) qui aborde Tikhonov, les hypersurfaces, etc...


Bah, en fait non  ::aie::  Il n'y a quasiment rien qui traite de a sur internet, en franais, mon cours doit tre un des seuls... J'ai appris ces techniques dans un bouquin techniques en anglais (donc je n'ai mme plus d'exemplaire), et j'ai reprouv quasiment tout dans mon cours  partir de pas grand chose (ce qui explique qu'il peut y avoir des erreurs dans les preuves).

De toute faon, c'est un peu comme mon introduction au traitement des images qui peut paratre bizarre et original. J'avais des connaissances dans le domaine. Puis j'essaye de partir de rien pour crer toute une thorie oriente mathmatiques en n'utilisant plus aucun bouquin, plus aucun lien durant toute la rdaction du cours.

----------


## rouliane

Ok, ben bravo  toi alors !

Il y a des chances que je teste ces algorithmes pendant mon stage, mais je ne sais pas comment a marche : vu que c'est toi qui a cre tout a, il doit y avoir une sorte de "copyright", non ? Sais-tu comment a marche ?
De toute faon je regarderais d'autres algorithmes, donc au pire je n'utiliserais pas le tiens.
Il me semble que y'a pas mal de choses de faites aussi aprs Malik et Pernoa ( de mmoire Lions, Alvarez, etc... )

----------


## millie

> vu que c'est toi qui a cre tout a, il doit y avoir une sorte de "copyright", non ? )


Non non. Je n'ai fait que reprendre des rsultats connus (quoique il peut y avoir quelques variations dans les algorithmes). Ce que j'ai refait, c'est le cours en soi mme et les preuves (mais qui doivent tre similaire au vrai preuve original que je n'avais pas).

Mais, aprs, faut voir le type de bruit que tu as. Thikonov, hypersurface, variation, c'est bien pour le ct pdagogique, mais il y a des filtres mieux pour pas mal de cas  :;):

----------


## rouliane

D'accord. Je vais essayer de me renseigner un peu plus sur les filtres ( si tu as des "noms" de filtres vers lesquels je peux me tourner, je suis preneur  ::D:  ).
Conernant mon stage et le type de bruit, j'avais vu quelques images et a semble etre du bruit "ponctuel" ( Je ne sais pas si a existe comme terme).
En gros, sur notre image, certains contours prsentent des gros points lumineux ( ce qui fait qu'on ne distingue plus le contour ), et c'est cel qu'on aimerait attnuer.

----------


## millie

Si c'est des gros trous que tu peux dtecter, il faudrait peut tre voir du ct des algorithmes d'inpainting : 
http://www.developpez.net/forums/sho...d.php?t=365026

----------


## rouliane

Merci, a doit etre a en effet.
A ce que j'ai compris, ce sont les ondes radars qui rflchissent sur les batiments, ce qui cre ce "trou" de lumire. Donc l'inpainting peut etre trs bien pour a.

----------


## pseudocode

L'inpainting ? Pour filtrer les echos multipath ??  :8O: 

C'est super novateur comme approche.  ::koi::

----------


## rouliane

Je ne sais pas du tout si c'est un cho multipath ou pas, j'ai essay de dcrire  peu prs ce que j'avais compris  ::mrgreen:: 
Maintenant que je connais le nom je vais voir si y'a dj des choses de faites la dessus ( j'imagine ).

----------


## pseudocode

Tu pourrais nous mettre une image pour se rendre compte ?

----------


## rouliane

Pour l'instant j'en ai pas mais ds que je commencerais mon stage ( dbut mars) je le ferais. ( En mme temps je dis a mais  mon avis j'ai s trop le droit de diffuser des images provenant de la boite.)

----------


## pseudocode

> Pour l'instant j'en ai pas mais ds que je commencerais mon stage ( dbut mars) je le ferais. ( En mme temps je dis a mais  mon avis j'ai s trop le droit de diffuser des images provenant de la boite.)


Si c'est pour une application militaire, surement pas.  ::aie:: 

Cela dit, ce n'est peut-etre pas un probleme d'echo. J'ai du mal a visualiser le probleme des "trous de lumieres prs des murs". Et ce que tu souhaites en faire (supprimer, attnuer, ...)

----------


## rouliane

Oui, les buts c'est de les supprimer, tout du moins les attnuer, car ces "trous de lumires" masquent les contours.
J'appelle a trou de lumire parce que visuellement a ressemble  a ( imagine que tu prends en photo une maison et que sur le bord du toit y'a un petit projecteur hyper puissant, sur la photo on verra pas les contours de la maison  cet endroit l. )
J'ai l'impression quand mme que c'est plutot du bruit car le sujet du stage est " dbruitage etc..." mais maintenant peut-etre que le mot bruit est employ ici de faon gnrale.

----------


## pseudocode

C'est une sorte d'effet de Gloss/Bloom ? 

http://www.developpez.net/forums/sho...d.php?t=396139

Dans ce cas la, il va effectivement falloir passer par les EDP pour resorber le halo lumineux. La diffusion "Malik & Perona" devrait fonctionner, mais ca risque de deteriorer les bords... Il va falloir faire du filtrage adaptatif.  ::?:

----------


## rouliane

Oui, a ressemble  a !
Je ne connais pas du tout le filtrage adaptatif, je vais regarder a de plus prs.
Merci en tout cas pour ces infos. ::D:

----------

