Estou implementando o artigo " Transporte de massa ideal para registro e entortamento ", meu objetivo é colocá-lo online, pois não consigo encontrar nenhum código de transporte de massa euleriano on-line e isso seria interessante pelo menos para a comunidade de pesquisa em processamento de imagens.
O artigo pode ser resumido da seguinte forma:
- encontre um mapa inicial usando as correspondências do histograma 1D ao longo das coordenadas xey
- resolva o ponto fixo de , em que representa uma rotação de 90 graus no sentido anti-horário, para a solução da equação de poisson com condições de contorno de Dirichlet (= 0), e é o determinante da matriz jacobiana.
- a estabilidade é garantida para um intervalo de tempo
Para simulações numéricas (realizadas em uma grade regular), elas indicam o uso de poicalc do matlab para resolver a equação de poisson, usam diferenças finitas centralizadas para derivadas espaciais, exceto que é calculado usando um esquema a favor do vento.
Usando meu código, a energia funcional e a curvatura do mapeamento estão diminuindo adequadamente em algumas iterações (de algumas dezenas a alguns milhares, dependendo da etapa do tempo). Mas depois disso, a simulação explode: a energia aumenta para alcançar um NAN em muito poucas iterações. Tentei várias ordens para diferenciações e integrações (uma substituição de ordem superior ao cumptrapz pode ser encontrada aqui ) e esquemas de interpolação diferentes, mas sempre recebo o mesmo problema (mesmo em imagens muito suaves, diferentes de zero em todos os lugares etc.).
Alguém estaria interessado em olhar para o código e / ou o problema teórico que estou enfrentando? O código é bastante curto.
Código com funções de depuração
Apenas a função necessária sem material de teste (<100 linhas)
Substitua gradiente2 () no final por gradiente (). Este era um gradiente de ordem mais alta, mas também não resolve as coisas.
Por enquanto, estou interessado apenas na parte ótima do transporte, não no termo adicional de regularização.
Obrigado !