как я могу проверить, что набор из 4 точек претерпел аффинное преобразование - PullRequest
1 голос
/ 24 июня 2019

У меня есть два изображения, содержащие один и тот же объект с 4 углами.
У меня есть соответствие для этих 4 точек между изображениями.
Давайте назовем эти точки A, B, C, D.
У меня есть(x, y) координаты A на изображении 1 и изображении 2.
Аналогично для точек B, C, D.
Моя цель - проверить, существует ли аффинное преобразование, удовлетворяющее этому изменению координат этих4 балла.
Как мне поступить?
Было бы полезно, если бы в Python или C был код, чтобы я мог быстро проверить множество изображений.
Насколько я понимаю, общее аффинное преобразование может бытьописывается как
x '= ax + + c
y' = dx + ey + f
Итак, есть шесть неизвестных.
Спасибо за чтение.

1 Ответ

0 голосов
/ 25 июня 2019

Допустим, ваши очки A = (x1, y1); В = (х2, у2); С = (х3; у3); D = (x4, y4) на изображении 1 и A '= (x1', y1 '); В '= (х2', у2' ); С '= (х3'; у3' ); D '= (x4', y4 ') на изображении 2.

Вы уже выяснили, что для нахождения аффинного преобразования требуется найти шесть неизвестных. Чтобы найти их, просто запишите систему линейных уравнений и решите:

x1' = a x1 + b y1 + c
y1' = d x1 + e y1 + f
x2' = a x2 + b y2 + c
y2' = d x2 + e y2 + f
x3' = a x3 + b y3 + c
y3' = d x3 + e y3 + f
x4' = a x4 + b y4 + c
y4' = d x4 + e y4 + f

Вы можете фактически разделить это на две системы линейных уравнений:

x1' = a x1 + b y1 + c
x2' = a x2 + b y2 + c
x3' = a x3 + b y3 + c
x4' = a x4 + b y4 + c

и

y1' = d x1 + e y1 + f
y2' = d x2 + e y2 + f
y3' = d x3 + e y3 + f
y4' = d x4 + e y4 + f

Поскольку вас интересует только то, существует ли аффинное преобразование (но не значения a, b, c, d, e, f), вам просто нужно определить, имеют ли эти две системы линейных уравнений Решение или нет.

Теорема Rouché – Capelli говорит нам, что система линейных уравнений имеет решение тогда и только тогда, когда rank матрицы коэффициентов равен рангу расширенной матрицы .

В вашем случае матрица коэффициентов для обеих систем линейных уравнений равна

| x1 y1 1 |
| x2 y2 1 |
| x3 y3 1 |
| x4 y4 1 |

Расширенная матрица для первой системы линейных уравнений:

| x1 y1 1 x1' |
| x2 y2 1 x2' |
| x3 y3 1 x3' |
| x4 y4 1 x4' |

и для второй системы линейных уравнений это

| x1 y1 1 y1' |
| x2 y2 1 y2' |
| x3 y3 1 y3' |
| x4 y4 1 y4' |

Теперь вычислите ранги этих трех матриц (например, с помощью numpy.linalg.matrix_rank ) и, если они все равны, существует аффинное преобразование.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...