Обратная перспективная трансформация искаженного изображения

@ Iwillnotexist Idonotexist представил свой код для преобразования перспективы изображения (повороты вокруг 3 осей): ссылка на сайт

Я ищу функцию (или математику), чтобы сделать обратное преобразование перспективы.

Давайте сделаем предположение, что мое «входное изображение» является результатом его warpImage() функция, и все углы (тэта, фи и гамма), масштаб и fovy также известны.

Я ищу функцию (или математику) для вычисления обратного преобразования (черная граница не имеет значения), чтобы получить основное изображение.

Как я могу это сделать?

0

Решение

Основная идея заключается в том, что вам нужно найти обратное преобразование. В связанном вопросе у них есть F = P T R1 R2 где P это проективное преобразование, T это перевод, и R1, R2 два поворота.

обозначать F* как обратное преобразование. Мы можем обратное как F* = R2* R1* T* P*, Обратите внимание, что порядок изменений. Три из них просты R1* это просто еще один поворот, но с отрицательным углом. Таким образом, первое обратное вращение будет

        cos th    sin th    0    0
R1* =  -sin th    cos th    0    0
0        0      1    0
0               0    1

Обратите внимание, что знаки двух терминов греха поменялись местами.

Обратный перевод — это просто перевод в противоположном направлении.

       1       0      0      0
T*=    0       1      0      0
0       0      1      h
0       0      0      1

Вы можете проверить эти вычисления T * T, которые должны быть единичной матрицей.

Самое хитрое — это проективный компонент, который мы имеем

      cot(fv/2)    0             0               0
P =   0       cot(fv/2)        0               0
0           0      -(f+n)/(f-n)   -2 f n / (f-n)
0           0           -1               0

Обратное это

      tan(fv/2)    0             0               0
P*=   0       tan(fv/2)        0               0
0           0            0              -2
0           0        (n-f)/(f n)    (f+n)/(f n)

Вольфрам альфа обратный с v = fv

Затем вам нужно умножить их вместе в обратном порядке, чтобы получить окончательную матрицу.

0

Другие решения

У меня также были проблемы с обратным преобразованием моего изображения.
Вам нужно хранить очки

ptsInPt2f   and   ptsOutPt2f

которые вычисляются в методе «warpMatrix».
Для обратного преобразования просто используйте тот же метод
M = getPerspectiveTransform (ptsOutPt2f, ptsInPt2f);
но с обратным порядком параметров (вывод в качестве первого аргумента, ввод в качестве второго).
После этого простой урожай избавится от всего черного.

0

По вопросам рекламы [email protected]