我如何验证一组 4 个点是否经过了仿射变换

how can I verify that a set of 4 points have undergone an affine transformation

我有两张图片包含相同的对象,有 4 个角。
我有图像之间的那 4 个点的对应关系。
让我们将这些点称为 A、B、C、D。
我在图像 1 和图像 2 中有 A 的 (x,y) 坐标。
类似地,对于点 B,C,D .
我的目的是验证是否存在满足这4个点坐标变化的仿射变换
我该如何进行?
如果python或c中有代码,我可以快速验证很多图像,那将是有益的。
我的理解是一般的仿射变换可以描述为
x'=ax+by+c
y'=dx+ey+f
所以有六个未知数。
感谢阅读。

假设你的分数是 A=(x1,y1); B=(x2,y2); C=(x3;y3);图 1 中的 D=(x4,y4) 和 A'=(x1',y1'); B'=(x2',y2'); C'=(x3';y3');图 2 中的 D'=(x4',y4')

您已经知道求仿射变换需要求出六个未知数。要找到它们,只需写下线性方程组并求解:

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 theorem tells us that a system of linear equations has a solution if and only if the rank of the coefficient matrix equals the rank of the augmented matrix.

在你的例子中,两个线性方程组的系数矩阵是

| 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为例),如果它们都相等,则存在仿射变换。