OpenCV remap()
использует вещественную индексную сетку для выборки сетки значений из изображения с использованием билинейной интерполяции и возвращает сетку выборок в качестве нового изображения.
Чтобы быть точным, позвольте:
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)
Тогда для всех координат пикселей i, j,
B[i, j] = A(X[i, j], Y[i, j])
Где обозначение круглых скобок A(x, y)
обозначает использование билинейной интерполяции для определения значения пикселя изображения A с использованием плавающих координат x
и y
.
Мой вопрос: учитывая индексную сетку X
, Y
, как я могу сгенерировать "обратную сетку" X^-1
, Y^-1
такую, что:
X(X^-1[i, j], Y^-1[i, j]) = i
Y(X^-1[i, j], Y^-1[i, j]) = j
А также
X^-1(X[i, j], Y[i, j]) = i
Y^-1(X[i, j], Y[i, j]) = j
Для всех целочисленных пиксельных координат i, j
?
FWIW, изображения и индексные карты X и Y имеют одинаковую форму. Однако в индексных картах X и Y нет априорной структуры. Например, они не обязательно являются аффинными или жесткими преобразованиями. Они могут даже быть необратимыми, например, если X, Y
отображает несколько пикселей в A
на одну и ту же точную координату пикселей в B. Я ищу идеи для метода, который найдет разумную обратную карту, если она существует.
Решение не обязательно должно быть основано на OpenCV, так как я не использую OpenCV, а другую библиотеку, которая имеет реализацию remap()
. Хотя любые предложения приветствуются, я особенно заинтересован в том, чтобы "математически исправить", то есть, если моя карта M является полностью обратимой, метод должен найти идеальное обратное, с небольшим пределом точности машины.