首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何验证一组4点是否经历了仿射变换?

问如何验证一组4点是否经历了仿射变换?
EN

Stack Overflow用户
提问于 2019-06-24 04:42:02
回答 1查看 590关注 0票数 1

我有两个图像包含相同的对象与4个角。

我有一个对应的这4点之间的图像。

让我们把这些点称为A,B,C,D。

我在图像1和图像2中有A的(x,y)坐标。

类似地,对于点B,C,D。

我的目的是证明,如果存在一个仿射变换,满足这四个点的坐标变化。

我该怎么做?

如果在python或c中有一个代码,这样我就可以快速地验证许多图像,这将是有益的。

我的理解是,一般仿射变换可以用

x'=ax+by+c

y'=dx+ey+f

所以有六个未知数。

感谢您的阅读。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-25 08:13:19

假设你的观点是图像1中的A=(x1,y1);B=(x2,y2);C=(x3;y3);D=(x4,y4);A'=(x1',y1');B'=(x2',y2');C'=(x3';y3');D'=(x4',y4')在图像2中。

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

代码语言:javascript
复制
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

实际上,你可以把它分成两个线性方程组:

代码语言:javascript
复制
x1' = a x1 + b y1 + c
x2' = a x2 + b y2 + c
x3' = a x3 + b y3 + c
x4' = a x4 + b y4 + c

和

代码语言:javascript
复制
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本身的值),您只需确定这两个线性方程组是否有解。

鲁切-卡佩利定理告诉我们线性方程组有一个解当且仅当系数矩阵的排名等于增广矩阵的秩。

在这种情况下,这两个线性方程组的系数矩阵是

代码语言:javascript
复制
| x1 y1 1 |
| x2 y2 1 |
| x3 y3 1 |
| x4 y4 1 |

第一线性方程组的增广矩阵是

代码语言:javascript
复制
| x1 y1 1 x1' |
| x2 y2 1 x2' |
| x3 y3 1 x3' |
| x4 y4 1 x4' |

对于第二个线性方程组,它是

代码语言:javascript
复制
| x1 y1 1 y1' |
| x2 y2 1 y2' |
| x3 y3 1 y3' |
| x4 y4 1 y4' |

现在计算这三个矩阵的秩(例如用排名),如果它们都相等,就存在仿射变换。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56729948

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档