将位置绘制成不规则矩形

时间:2017-03-28 21:42:55

标签: algorithm

我有4个Point值:TopLeft,TopRight,BottomLeft,BottomRight。这些在我的显示器上定义了一个4面形状(如扭曲的矩形)。这些是Tobii注视设备认为我正在看的事实,我实际上正在看我的显示器的四个角落。

此图显示左侧的位图代表我的显示器,以及Tobii设备告诉我的点我正在查看当我实际上正在看屏幕的角落时。 (这是一种表达,而不是真实的。)

Example

我想使用这四个校准点从不准确的注视位置拍摄屏幕X,Y位置并对其进行校正,使其按照右侧图像定位。

2 个答案:

答案 0 :(得分:3)

编辑:最后编辑问题的新解决方案。

此问题是致电bilinear interpolation 一旦你掌握了这个想法,它就会很容易,你会在余生中记住它 在这里发布所有细节会很漫长,但我会尝试。

首先,我将左侧的点命名为(x,y),将右侧的值命名为(X,Y)

(x1,y1)(x1,y2)(x2,y1)(x2,y2)成为左边矩形的角点。

其次,让我们将问题分解为2个双线性插值问题:

  • 想找到X
  • 想找Y

让我们逐个找到它们(X Y)。

定义:Qxx是右方矩形中四角的X Y的值。

  

假设我们想要找到未知函数f的值   点(x,y)。假设我们知道f的值   四点Q11 =(x1,y1),Q12 =(x1,y2),Q21 =(x2,y1),Q22 =   (x2,y2)。

问题的f(x,y)在您的问题中为X Y

enter image description here

然后以同样的方式将f(x,y1)f(x,y2)插入f(x,y)

最后,您将获得X Y = f(x,y)

参考:此处的所有图片/公式/文字都是从维基链接复制的(有些是经过修改的。)

编辑:问题编辑完成后,变得非常不同  新的相反,它被称为“逆双线性插值”,这是更难的  有关详细信息,请阅读http://www.iquilezles.org/www/articles/ibilinear/ibilinear.htm

答案 1 :(得分:0)

您可以使用6个方程定义唯一的线性变换。必须对齐的3个点提供了这6个方程,因为每对匹配点在x和y中提供了两个方程。

如果你想追求这个,我可以提供矩阵方程,它根据它如何映射三个点来定义线性变换。您反转此矩阵,它将提供线性变换。

但是,完成后,转换已完全指定。您无法控制原始四边形的角点将在何处。通常,您甚至无法定义线性变换以将一个四边形映射到另一个四边形;这给出了8个方程(每个角2个),只有6个未知数。它超指定。实际上,线性变换必须始终将矩形映射到平行四边形,因此通常您无法定义将一个四边形映射到另一个四边形的线性变换。

因此,如果它不能成为线性变换,那么它可以是非线性变换吗?嗯,是的,但是非线性变换不一定将直线映射到直线,因此四边形的映射边缘不会是直的。或任何其他线路。而且你仍然有14个方程式(每个点和角2个),你必须发明一些非线性变换,包含14个未知数。

因此,使用线性变换无法解决所述问题;它超过指定。使用非线性变换将需要设计具有14个自由变量的非线性变换(相对于线性变换中的6),这将正确映射7个点,但直线将不再是直线。添加此要求会增加无限数量的约束(对于行中的每个点都有一个约束),您甚至无法使用连续函数。

对于您正在尝试做的事情(即潜在的应用程序需求),您可能会有一些解决方案,但作为一个数学问题,它是无法解决的。

如果您希望矩阵方程根据它如何转换3个点来生成线性变换,请告诉我。