К чему на самом деле относится «тангенциальное» искажение OpenCV?

Мне трудно понять модель искажения OpenCV . Они используют «радиальные» коэффициенты к н и «тангенциальные» коэффициенты п н среди прочего, что мне не интересно.

Икс знак равно Икс ( 1 + к 1 р 2 + к 2 р 4 + к 3 р 6 ) + 2 п 1 Икс у + п 2 ( р 2 + 2 Икс 2 ) у знак равно у ( 1 + к 1 р 2 + к 2 р 4 + к 3 р 6 ) + п 1 ( р 2 + 2 у 2 ) + 2 п 2 Икс у

Чтобы понять это, я разделил два термина на то, что Δ смещение, которое они производят, вот как это выглядит Икс :

Икс знак равно Икс + Икс ( к 1 р 2 + к 2 р 4 + к 3 р 6 ) + 2 п 1 Икс у + п 2 ( р 2 + 2 Икс 2 ) знак равно Икс + Δ Икс р а г я а л + Δ Икс т а н грамм е н т я а л

Затем я изобразил эти значения как векторное поле с октавой (аналогично Matlab).

Радиальное искажение

function radialDistortion (k1, k2, k3)
    max = 10;
    [x, y] = meshgrid(-max:.5:max);
    r2 = x.**2 + y.**2;
    k = k1*r2 .+ k2*r2.**2 .+ k3*r2.**3;
    quiver(x, y, x.*k, y.*k, 0);
    axis("square");
endfunction

Вызывается с

radialDistortion(0.0002, 0, 0)

производит следующее

радиальное искажение

Я понимаю, это радиально по отношению к оптической оси, таким образом, это точка, симметричная центру (где находится оптическая ось). Это было не слишком сложно.

Тангенциальное искажение

function tangentialDistortion (p1, p2)
    max = 10;
    [x, y] = meshgrid(-max:.5:max);
    r = x.**2 + y.**2;
    xy = x.*y*2;
    quiver(x, y, xy*p1 + (r+2*x.**2)*p2, xy*p2  + (r+2*y.**2)*p1, 0);
    axis("square");
endfunction

Вызывается с

 tangentialDistortion(-.0007, .0007)

производит это

тангенциальное искажение

Как это "тангенциально" к чему-либо? На мой взгляд, это похоже на коррекцию наклона объектива (повернутого по диагонали снизу-влево-вверх-вправо), что согласуется с причиной этого искажения, указанной в литературе: смещение объектива.

Означает ли это, что он касается поверхности линзы?

В конце концов, это некая математическая модель, описывающая какое-то оптическое явление с целью его коррекции. Но я хотел бы понять, почему это называется «тангенциальным».


Если положение P' также смещено тангенциально относительно CP (по касательной к окружности радиуса CP), то говорят, что искажение является тангенциальным.

Нет, это не так. Я изменил приведенную выше функцию, чтобы показать «тангенциальное» смещение точек, находящихся на окружности.

function tangentialDistortionOnCircle (p1, p2)
    radius = 10;
    x = radius * cos(0:2*pi/20:2*pi);
    y = radius * sin(0:2*pi/20:2*pi);
    r = x.**2 + y.**2;
    xy = x.*y*2;
    quiver(x, y, xy*p1 + (r+2*x.**2)*p2, xy*p2  + (r+2*y.**2)*p1, 0);
    axis([-radius-5 radius+5 -radius-5 radius+5 ], "square");
endfunction

Вызывается с такими параметрами:

tangentialDistortionOnCircle(.007, .007)

дает этот результат

тангенциальное искажение по окружности

Для меня это совсем не похоже на тангенциальное смещение. Если бы это было так, это выглядело бы как водоворот вокруг центра. Но это не так.

Ответы (3)

Возьмите положение точки P на изображении относительно геометрического центра изображения C. Предположим, что C остается неискаженным в изображении, создаваемом линзой, но P искажается в P'.

Если положение P' искажается только радиально вдоль направления CP, говорят, что искажение радиальное .

Если положение P' также смещено тангенциально относительно CP (по касательной к окружности радиуса CP), то говорят, что искажение является тангенциальным .

См., например, « Калибровка камеры с моделями искажения и оценкой точности » (IEEE Transactions On Pattern Analysis And Machine Intelligence), особенно рис. 2 и 3 (стр. 968) и рис. 4 (стр. 969).

Учитывая название «тангенциальный», имеет смысл предположить, что он касается некоторой окружности. Но такого круга нет. тангенциальное смещение не касается окружности, по крайней мере, не окружности вокруг центра изображения. Я обновил свой вопрос примером графика для точек на круге, чтобы проиллюстрировать это.
«Если положение P 'также смещено по касательной относительно CP (вдоль касательной к окружности радиуса CP), говорят, что искажение является тангенциальным»: смещения, показанные на вашем новом рис. включают радиальные компоненты. Удалить их. Что вы получаете? Как это соотносится с рис.4 в исх. цитируется?
Смещения на моем новом рисунке (и на предыдущем) показывают только тангенциальное смещение без радиальной составляющей. вызовы OpenCV п н тангенциальные коэффициенты, и на графике показано смещение, которое они вызывают. Насколько я могу судить, если вы посмотрите на формулу, которую я процитировал, нет никакого способа удалить из нее чисто радиальную составляющую. Каждая координата либо квадратична, либо умножается на другую координату, но радиальное искажение является постоянным фактором, как видно на Δ р а г я а л
Моя неудачная формулировка: «Перемещения, показанные на вашем новом рисунке, включают радиальные компоненты». То есть они не включают радиальные члены в к я , но, очевидно, сохраняют радиальные компоненты, независимо от общего имени. Удалите эти компоненты, проецируя на е ф знак равно ( у / р , Икс / р ) : если Δ р знак равно ( Δ Икс т а н грамм е н т я а л , Δ у т а н грамм е н т я а л ) , тогда ( Δ р е ф ) е ф знак равно ( п 1 Икс у + п 2 у 2 , п 1 Икс 2 п 2 Икс у ) . Вы должны получить что-то похожее на рис. 4 в ссылке.
То есть, по сути, то, что они называют тангенциальным, на самом деле не является тангенциальным?
Я бы сказал, что это историческая вещь. Если вы бегло просмотрели ссылку, такое искажение появляется, когда линзы в системе неправильно выровнены или отцентрированы. Неудивительно, что тот, что на вашем последнем рисунке, представляет собой смещенный круг. Почему его назвали «тангенциальным», а не «смещением» или чем-то подобным, меня поражает. Я даже просмотрел оригинальную статью, в которой была представлена ​​эта концепция. Автор просто называет его "тангенциальным" и все. Остальное, как в ответе.
Датчик должен располагаться по касательной к центру сфероидальной кривой линзы. Если он не идеально тангенциален к центру линзы, возникает тангенциальное искажение. Может быть, это было бы точнее назвать нетангенциальным искажением, потому что если датчик идеально тангенциальный, то искажения нет.

Тангенциальное искажение корректирует наклон плоскости изображения после радиального искажения. Представьте себе тонкие производственные дефекты, когда оптические элементы не выровнены с плоскостью изображения. Тангенциальные коэффициенты корректируют это несовершенство. Вот почему это похоже на вращение плоскости изображения. Конечным результатом как радиальной, так и тангенциальной деформаций должна стать модель точечного отверстия, к которой затем можно применить классические внутренние параметры, как только вы обнаружите главную точку.

Почему нельзя смоделировать такое смещение просто как гомографию (линейную в однородных координатах)? Зачем использовать эту сложную формулу нелинейных искажений? (Давайте пока проигнорируем радиальное искажение и сосредоточимся на «тангенциальном» искажении).

В соответствующих статьях о тангенциальном искажении есть ссылки, восходящие к статье Конради 1919 года о «системах линз с децентрацией». В этой статье Конради говорит об искажении, вызванном ошибкой децентрирования многоэлементной линзовой системы. Большинство современных камер имеют многоэлементные объективы. Статья Брауна 1960-х годов имеет форму, которую мы видим в OpenCV сегодня. Это уравнение почти моделирует наклонный датчик, за исключением условий r в квадрате, но оно предназначено для моделирования децентрированной системы линз. Браун называет это децентрирующим искажением. Браун говорит об этом в своей статье: «Значительная степень децентрирования приведет как к тангенциальным искажениям, так и к асимметричным радиальным искажениям».