Реклама Google — средство выживания форумов :)
Пункт «Позиции и перенос» служит для компенсации параллакса и специальных случаев, когда, например, снимается большой плакат по частям. В частности, этот метод позволяет убрать при сшивке колонну, частично закрывающую плакат при съемке с одной точки. Сделав два снимка, на которых колонна закрывает разные участки плаката, и выделив ее на закладке «Маска», можно полностью исключить колонну из результирующей панорамы.
> Сшиватель панорам Hugin и связанные с ним программы
Во-первых, он анаморфированный. Т.е. искажены пропорции кадра. Кадр на 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 — ЖЖ
Пункт «Позиции и перенос» служит для компенсации параллакса и специальных случаев, когда, например, снимается большой плакат по частям. В частности, этот метод позволяет убрать при сшивке колонну, частично закрывающую плакат при съемке с одной точки. Сделав два снимка, на которых колонна закрывает разные участки плаката, и выделив ее на закладке «Маска», можно полностью исключить колонну из результирующей панорамы.
> Сшиватель панорам Hugin и связанные с ним программы
Parallax depends on the object distance d, the displacement of the no-parallax-point r, and half the rotation angle between two shots, the off axis angle alpha.
Then the half parallax angle \beta\, will be:
Since d, usually is far larger than r, this could be abbreviated to
http://hugin.sourceforge.net/docs/manual/Parallax.html