如何验证一组4个点已进行仿射变换

时间:2019-06-24 04:42:02

标签: affinetransform

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

1 个答案:

答案 0 :(得分:0)

让我们说您的观点是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本身的值感兴趣),因此只需确定这两个线性方程组是否具有a解决方案。

Rouché–Capelli定理告诉我们,当且仅当rankcoefficient matrix等于augmented matrix的秩时,线性方程组才有解。 / p>

在您的情况下,两个线性方程组的系数矩阵为

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

相关问题