Comment calculer numériquement une fonction à partir de son gradient bruyant?


8

J'ai le modèle . s(x,y)=x2+y2,0x1,0y1

Au lieu d'observer directement le modèle j'observe les dérivées du modèle + un peu de bruit (e):

 p(x,y)=sx+e,q(x,y)=sy+e

A partir des mesures de p (x, y et q (x, y) je veux estimer s (x). Disons que je sais que s (0,0) = 0.

Selon le théorème du gradient:  s(x,y)=(0,0)(x,y)[sx,sy]dr

quel que soit le chemin que nous intégrons.

Comme petite expérience (dans Matlab), j'ai ajouté du bruit distribué normal, N (0,1), à p = 2x et q = 2y. Ensuite, j'ai intégré d'abord le long de x puis le long de y: SXY. Ensuite, j'ai intégré d'abord le long de y, puis le long de x: SYX.

Les résultats montrent que le théorème du gradient ne tient pas dans ce cas (à cause du bruit):

S

SXY

SYX

Les erreurs quadratiques moyennes par rapport au modèle sont les suivantes:

ErmsXY =
    0.1125
ErmsYX =
    0.0920

Comment puis-je trouver une meilleure estimation (moins d'erreur RMS et plus fluide) de s à partir de p et q?

ÉDITER:

D'après ce que j'ai lu; l'utilisation de l'intégrale de la courbe est appelée intégration locale. Il existe également des méthodes d'intégration globale où l'on essaie plutôt de choisir un S (x, y) qui minimise:

 0101[|SxP|2+|SyQ|2]dxdy

Les méthodes d'intégration globale sont censées donner de meilleurs résultats lorsque le gradient est bruyant, mais comment faire cela en pratique?

EDIT 2:

Une approche que j'ai utilisée est la suivante:

nous introduisons d'abord des opérateurs de dérivation linéaire: . sx=Dxs,sy=Dys

Le résultat est le système d'équations linéaires suivant:

 Dxs=p,Dys=q

Trouvez ensuite une solution Least Square Error à ces équations. Une solution LSE à ces équations est censée être équivalente à la minimisation de l'intégrale par le haut. Comment cela peut-il être démontré?

Les résultats sont bons: entrez la description de l'image ici

L'erreur RMS représente environ 1/5 de celle de SXY et SYX et la solution est également plus fluide.

Cependant, cette approche présente certains inconvénients:

  1. il est difficile à mettre en œuvre; doit utiliser les différences centrales et "aplatir" la matrice 2D en vecteur, etc.

  2. Les matrices de dérivation sont très grandes et clairsemées, elles peuvent donc consommer beaucoup de RAM.

Une autre approche qui semble potentiellement à la fois plus simple à coder, moins consommatrice de RAM et plus rapide consiste à utiliser la FFT. Dans l'espace de Fourier, ces pdes deviennent une équation algébrique. Ceci est connu comme l'algorithme de Frankot-Chellappa, mais malheureusement je ne l'ai pas fait fonctionner sur mes données d'exemple.

Réponses:


1

Vous pouvez filtrer soit le gradient lui - même ou le résultat, . Il faudrait assez bien connaître les caractéristiques des véritables gradients pour savoir quelle est la largeur de bande de fréquence. À ce stade, vous pouvez concevoir un filtre passe-bas qui préservera le signal mais éliminera le bruit de fréquence plus élevée.s


Merci Jim. Je peux donc par exemple prendre SXY et remplacer chaque valeur SXY (xi, yj) par une somme pondérée sur la valeur et ses voisins, où les poids peuvent être par exemple un gaussien 2D?
Andy

Désolé Jim. J'avais oublié de souligner que je voulais également une petite erreur RMS par rapport au modèle. J'ai modifié ma question pour en tenir compte. Le lissage donne un résultat plus fluide, mais pas une erreur RMS plus petite?
Andy

@Andy Oui, "une somme pondérée sur la valeur et ses voisins" est une description assez succincte du filtrage, et un gaussien 2D est une forme de filtre passe-bas.
Jim Clay

@Andy Pour plus petite erreur , je dirais la bande passante par FFT'ing multiples « propre » (pas de bruit ajouté) résultats, et de voir où le rolloff plus haute fréquence est (je suppose qu'ils ne sont pas tous les mêmes). Concevez un LPF avec ce même rolloff - le "fdatool" de Matlab peut vous y aider - puis utilisez ce filtre. Cela devrait améliorer votre RMS. Il y aura toujours des erreurs, bien sûr, mais elles devraient être réduites. s
Jim Clay

Merci Jim. Mais n'y a-t-il aucun moyen de combiner les résultats de SXY et SYX afin d'obtenir une erreur RMS plus petite?
Andy
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.