Реклама Google — средство выживания форумов :)
Нельзя использовать исправление дисторсии в нашем случае, Красильников доходчиво объяснял почему
Во-первых, он анаморфированный. Т.е. искажены пропорции кадра. Кадр на 16-мм кинопленке имеет пропорции 4:3 или около того. А в ролике пропорции сильно отличаются.
Для Hugin это имеет катастрофические последствия: Hugin при пересчетах кадров отталкивается от радиусов точек от центра кадра, а при искажении пропорций точки, которые были на одинаковых радиусах, окажутся на разных.
(Кому не лень, тот может поставить эксперимент: взять два снимка, совместить, потом сжать их по вертикали и снова совместить.)
> Как снимали лунную аферу... [Yuri Krasilnikov#27.04.19 08:07]
Если его слова не ясны, то разжевываю:
Barrel Distortion задётся уравнением:
R = ( a * r3 + b * r2 + c * r + d ) * r
где r - расстояние от пикселя до центра кадра на исправленном изображении, R - расстояние от пикселя до
центра кадра на исходном изображении (искажённом дисторсией)
Это уравнение задёт с одной стороны саму дисторсию, с другой стороны формулу исправления дисторсии для
механизма Reverse Pixel Mapping.
r=1 соответствует ближайшему к центру краю снимка (половина высоты для горизонтального снимка), по
умолчанию этот радиус сохраняется, т.е. r=1 => R=1
Отсюда получается формула для 4-го параметра:
d = 1 - a - b - c
При сохранении другого радиуса (r0): d = 1 - a*r03 - b*r02 - c*r0
Прямая линия на исправленном изображении имеет уравнение:
p*x + q*y + 1 = 0
в радиальных координатах:
p*r*cos(f) + q*r*sin(f) + 1 = 0
Таким образом у нас 5 неизвестных: a,b,c,p,q => а значит нам нужно 5 уравнений их для нахождения.
Из координат (X,Y) заданных точек на искажённом изображении получаем их радиальные координаты R и f
Угол f и уравление прямой дают нам возможность посчитать r - расстояние на исправленном изображении.
r = -1/(p*cos(f)+q*sin(f))
Из этого значения и уравнения Barrel Distortion для каждой точки можно посчитать R' - расстояние на
искажённом изображении.
R' = (a*r3 + b*r2 + c*r + d)*r
Нам нужны параметры Barrel Distortion, при которых R' = R
Каждая точка даёт одно уравнение, однако это сложные нелинейные уравнения. Их можно решить численно
через оптимизацию целевой функции.
В целом нам нужно добиться, чтобы заданные точки оказались в результате Barrel Distortion на тех же
местах, поэтому из R' и f получаем (X',Y')
Целевая функция оптимизации - сумма квадратов расстояний (X,Y)-(X',Y') по всем точкам:
Norm = Summ ( (X-X')2 + (Y-Y')2 )
Эту функцию необходимо минимизировать подбором неизвестных a,b,c,p,q
Если задать более 5 точек, то можно оценить точность нахождения параметров.
> Исправление сильной дисторсии / "рыбьего глаза" вручную: overquantum — ЖЖ
Если кто и сейчас не понял, то повторяю, в формулы дисторсии входит РАДИУС, а значит важна правильная пропорция кадраа Х, Y
В нашем случае она явно нарушена.
> Как снимали лунную аферу... [aФон#01.09.19 20:44]
tg(ω/2) = tg(54,9°/2)*cosψ (3)
То есть угол обзора камеры ω в горизонтальной плоскости, в которой мы и смотрим на карту, будет более узким (меньше 54,9°) и его можно найти по формуле 3.
Угол наклона камеры ψ легко определить по кадру из ролика.
> Apollo 16 LRV Grand Prix в вакуумной камере [aФон#02.09.19 01:45]