Решение основано на формулах в документации OpenCV Калибровка камеры и 3D реконструкция
Рассмотрим числовую форму без коэффициента искажения (в отличие от матричной формы).
У нас есть u
и v
.
Легко вычислить x'
и y'
.
Но x
и y
нельзя вычислить, потому что мы можем выбрать любой ненулевой z
.
Линия в 3d соответствует одной точке на 2d изображении.
Чтобы решить эту проблему, мы берем две точки для z=1
и z=2
.
Затем мы находим 2 точки в трехмерном пространстве, которые указывают линии (x1,y1,z1)
и (x2,y2,z2)
.
Тогда мы можем применить R
-1 к (x1,y1,z1)
и (x2,y2,z2)
, что приводит к линии, определяемой двумя точками (X1, Y1, Z1)
и (X1, Y1, Z1)
.
Поскольку наши контрольные точки лежат в одной плоскости (пусть плоскость Z = 0 для простоты), мы можем найти соответствующие X
и Y
точки, которые являются точками в 3d.
После применения нормализации от mm
к пикселям мы получаем фронтально-параллельное изображение.
(Если у нас есть искаженное входное изображение, мы должны сначала его не искажать)