Ich implementiere das Papier " Optimaler Massentransport für Registrierung und Warping ". Mein Ziel ist es, es online zu stellen, da ich online keinen eulerschen Massentransportcode finden kann. Dies wäre zumindest für die Forschungsgemeinschaft in der Bildverarbeitung interessant.
Das Papier kann wie folgt zusammengefasst werden:
- Finden einer Anfangskarte Verwendung von 1D-Histogramm-Übereinstimmungen entlang der x- und y-Koordinaten
- Auflösen nach dem festen Punkt von , wobeifür eine Drehung um 90 Grad gegen den Uhrzeigersinn steht,für die Lösung der Poisson-Gleichung mit Dirichlet-Randbedingungen (= 0) undist die Determinante der Jacobi-Matrix.
- Stabilität ist für einen Zeitschrittdt<mingarantiert
Für numerische Simulationen (die auf einem regulären Gitter durchgeführt werden) geben sie an, dass zur Lösung der Poisson-Gleichung matlabs Poicalc verwendet wird. Für räumliche Ableitungen verwenden sie zentrierte endliche Differenzen, mit Ausnahme von das unter Verwendung eines Aufwindschemas berechnet wird.
Bei Verwendung meines Codes nehmen die Energiefunktion und die Kräuselung des Mappings für einige Iterationen ordnungsgemäß ab (von einigen zehn auf einige tausend, abhängig vom Zeitschritt). Danach explodiert die Simulation: Die Energie steigt, um in sehr wenigen Iterationen ein NAN zu erreichen. Ich habe mehrere Ordnungen für die Differenzierungen und Integrationen (ein Ersatz für Cumptrapz höherer Ordnung finden Sie hier ) und verschiedene Interpolationsschemata ausprobiert, aber ich habe immer das gleiche Problem (auch bei sehr glatten Bildern, überall ungleich Null usw.).
Möchte sich jemand den Code und / oder das theoretische Problem ansehen, mit dem ich konfrontiert bin? Der Code ist ziemlich kurz.
Code mit Debugging-Funktionen
Bitte ersetzen Sie gradient2 () am Ende durch gradient (). Dies war ein Gradient höherer Ordnung, löst aber auch keine Probleme.
Ich interessiere mich vorerst nur für den optimalen Transportteil des Papiers, nicht für den zusätzlichen Regularisierungsbegriff.
Vielen Dank !