Invertendo uma grade de índice com valor real

OpenCV'sremap() usa uma grade de índice com valor real para amostrar uma grade de valores de uma imagem usando interpolação bilinear e retorna a grade de amostras como uma nova imagem.

Para ser mais preciso, deixe:

A = an image 
X = a grid of real-valued X coords into the image. 
Y = a grid of real-valued Y coords into the image.
B = remap(A, X, Y)

Então, para todas as coordenadas de pixel i, j,

B[i, j] = A(X[i, j], Y[i, j]) 

Onde a notação de chaves redondasA(x, y) denota o uso de interpolação bilinear para resolver o valor de pixel da imagem A usando cordas com valor flutuantex ey.

Minha pergunta é: dada uma grade de índiceX, Y, como posso gerar uma "grade inversa"X^-1, Y^-1 de tal modo que:

X(X^-1[i, j], Y^-1[i, j]) = i
Y(X^-1[i, j], Y^-1[i, j]) = j

E

X^-1(X[i, j], Y[i, j]) = i
Y^-1(X[i, j], Y[i, j]) = j

Para todas as coordenadas de pixels inteirosi, j?

FWIW, os mapas de imagem e índice X e Y têm a mesma forma. No entanto, não existe uma estrutura a priori para os mapas de índice X e Y. Por exemplo, eles não são necessariamente transformações afins ou rígidas. Eles podem até ser invertíveis, p. E seX, Y mapeia vários pixels emA para a mesma coordenada exata de pixels em B. Estou procurando idéias para um método que encontre um mapa inverso razoável, se houver.

A solução não precisa ser baseada em OpenCV, pois não estou usando o OpenCV, mas outra biblioteca que possui umremap() implementação. Embora todas as sugestões sejam bem-vindas, estou particularmente interessado em algo "matematicamente correto", ou seja, se meu mapa M for perfeitamente invertível, o método deve encontrar o inverso perfeito, dentro de uma pequena margem de precisão da máquina.

questionAnswers(5)

yourAnswerToTheQuestion