Sto implementando il documento " Trasporto di massa ottimale per la registrazione e la deformazione ", il mio obiettivo è quello di metterlo online poiché non riesco proprio a trovare alcun codice di trasporto di massa euleriano online e questo sarebbe interessante almeno per la comunità di ricerca nell'elaborazione delle immagini.
Il documento può essere riassunto come segue:
- trova una mappa iniziale usando gli abbinamenti dell'istogramma 1D lungo le coordinate xey
- risolvi per il punto fisso di u t = 1
Per le simulazioni numeriche (eseguite su una griglia regolare), indicano l'uso del poicalc di matlab per risolvere l'equazione di poisson, usano differenze finite centrate per le derivate spaziali, ad eccezione di che viene calcolato usando uno schema controvento.
Usando il mio codice, l'energia funzionale e l'arricciatura della mappatura stanno diminuendo correttamente per un paio di iterazioni (da poche decine a poche migliaia a seconda del passo temporale). Ma dopo, la simulazione esplode: l'energia aumenta per raggiungere un NAN in pochissime iterazioni. Ho provato diversi ordini per le differenziazioni e le integrazioni (una sostituzione di ordine superiore a cumptrapz può essere trovata qui ) e diversi schemi di interpolazione, ma ottengo sempre lo stesso problema (anche su immagini molto fluide, diverse da zero ovunque ecc.).
Qualcuno sarebbe interessato a guardare il codice e / o il problema teorico che sto affrontando? Il codice è piuttosto breve.
Codice con funzioni di debug
Solo la funzione necessaria senza materiale di prova (<100 righe)
Sostituire gradiente2 () alla fine con gradiente (). Questo era un gradiente di ordine superiore ma non risolveva neppure le cose.
Per il momento sono interessato solo alla parte di trasporto ottimale del documento, non al termine aggiuntivo di regolarizzazione.
Grazie !