Проблема возникает из-за того, что гомография отображает часть изображения на отрицательные значения x, y, которые находятся за пределами области изображения и поэтому не могут быть нанесены на график.
то, что мы хотим сделать, это сместить деформированный вывод на некоторое количество пикселей, чтобы «шунтировать» все деформированное изображение в положительные координаты (и, следовательно, внутри области изображения).
Гомографии могут быть объединены с использованием умножения матриц (вот почему они такие мощные). Если A и B являются гомографиями, то AB представляет гомографию, которая сначала применяет B, а затем A.
Из-за этого все, что нам нужно сделать, чтобы сместить вывод, это создать матрицу гомографии для перевода на некоторое смещение, а затем предварительно умножить ее на нашу исходную матрицу гомографии
Матрица 2D-гомографии выглядит следующим образом:
[R11,R12,T1]
[R21,R22,T2]
[ P , P , 1]
, где R представляет матрицу вращения, T представляет перевод, а P представляет перспективную деформацию.
Итак, чисто поступательная гомография выглядит так:
[ 1 , 0 , x_offset]
[ 0 , 1 , y_offset]
[ 0 , 0 , 1 ]
Так что просто умножьте вашу гомографию на матрицу, аналогичную приведенной выше, и ваше выходное изображение будет смещено.
(Убедитесь, что вы используете матричное умножение, а не поэлементное умножение!)