Wie berechne ich eine Funktion numerisch aus ihrem verrauschten Gradienten?

8

Ich habe das Modell . s(x,y)=x2+y2,0x1,0y1

Anstatt das Modell direkt zu beobachten, beobachte ich die Ableitungen des Modells + etwas Rauschen (e):

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

Aus Messungen von p (x, y und q (x, y) möchte ich s (x) schätzen. Angenommen, ich weiß, dass s (0,0) = 0 ist.

Nach dem Gradientensatz gilt:  s(x,y)=(0,0)(x,y)[sx,sy]dr

unabhängig davon, auf welchem ​​Weg wir integrieren.

Als kleines Experiment (in Matlab) habe ich normalverteiltes Rauschen N (0,1) zu p = 2x und q = 2y hinzugefügt. Dann habe ich zuerst entlang x integriert, gefolgt von y: SXY. Als nächstes habe ich zuerst entlang y integriert, gefolgt von x: SYX.

Die Ergebnisse zeigen, dass der Gradientensatz in diesem Fall (aufgrund des Rauschens) nicht gilt:

S.

SXY

SYX

Die quadratischen mittleren Fehler in Bezug auf das Modell sind:

ErmsXY =
    0.1125
ErmsYX =
    0.0920

Wie kann ich eine bessere (weniger RMS-Fehler und glattere) Schätzung von s aus p und q finden?

BEARBEITEN:

Nach dem, was ich gelesen habe; Die Verwendung des Kurvenintegrals wird als lokale Integration bezeichnet. Es gibt auch globale Integrationsmethoden, bei denen stattdessen versucht wird, ein S (x, y) zu wählen, das Folgendes minimiert:

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

Globale Integrationsmethoden sollen bessere Ergebnisse liefern, wenn der Gradient verrauscht ist. Wie mache ich das in der Praxis?

EDIT 2:

Ein Ansatz, den ich verwendet habe, ist folgender:

Zuerst führen wir lineare Ableitungsoperatoren ein: . sx=Dxs,sy=Dys

Das Ergebnis ist das folgende lineare Gleichungssystem:

 Dxs=p,Dys=q

Als nächstes finden Sie eine Least Square Error-Lösung für diese Gleichungen. Eine LSE-Lösung für diese Gleichungen soll der Minimierung des Integrals von oben entsprechen. Wie kann das gezeigt werden?

Die Ergebnisse sind gut: Geben Sie hier die Bildbeschreibung ein

Der RMS-Fehler beträgt etwa 1/5 des von SXY und SYX, und die Lösung ist auch glatter.

Dieser Ansatz weist jedoch einige Nachteile auf:

  1. es ist schwer umzusetzen; muss zentrale Differenzen verwenden und die 2D-Matrix in einen Vektor usw. "abflachen".

  2. Die Ableitungsmatrizen sind sehr groß und spärlich, so dass sie möglicherweise viel RAM verbrauchen.

Ein anderer Ansatz, der möglicherweise sowohl einfacher zu codieren als auch weniger RAM verbraucht und schneller zu sein scheint, ist die Verwendung von FFT. Im Fourierraum werden diese pdes zu einer algebraischen Gleichung. Dies ist als Frankot-Chellappa-Algorithmus bekannt, aber leider kann ich meine Beispieldaten nicht bearbeiten.

Andy
quelle

Antworten:

1

s

Jim Clay
quelle
Danke Jim. Also kann ich zB SXY nehmen und jeden Wert SXY (xi, yj) durch eine gewichtete Summe über dem Wert und seinen Nachbarn ersetzen, wobei die Gewichte zB ein 2D-Gauß sein können?
Andy
Entschuldigung Jim. Ich hatte vergessen zu betonen, dass ich auch einen kleinen RMS-Fehler in Bezug auf das Modell haben möchte. Ich habe meine Frage bearbeitet, um dies zu berücksichtigen. Glätten ergibt ein glatteres Ergebnis, aber keinen kleineren RMS-Fehler?
Andy
@Andy Ja, "eine gewichtete Summe über den Wert und seine Nachbarn" ist eine ziemlich prägnante Beschreibung der Filterung, und ein 2D-Gaußscher Wert ist eine Form des Tiefpassfilters.
Jim Clay
s
Danke Jim. Aber gibt es keine Möglichkeit, die Ergebnisse von SXY und SYX zu kombinieren, um einen kleineren RMS-Fehler zu erhalten?
Andy