随着时间的推移应用变换矩阵

时间:2015-05-28 09:31:48

标签: math graphics transformation

我有一个初始框架和一些信息的边界框。我有一个转换矩阵T,我想用它来转换这个边界框。

我可以轻松地应用转换并在输出框架中绘制它,但我想在一系列x帧上应用转换,有人可以提出一种方法吗?

阿里

4 个答案:

答案 0 :(得分:1)

在@ egor -n注释的基础上,您可以计算R = T ^ {1 / x}并在第i帧上从第i帧计算您的边界框

B_{i+1} = R * B_{i}

使用B_ {0}您的初始边界框。根据T的精确形式,我们可以讨论如何计算R。

答案 1 :(得分:1)

有仿射变换的方法 - 将仿射变换矩阵分解为平移,旋转,缩放和剪切矩阵的乘积,以及每个矩阵的参数的线性插值(例如,R的旋转角度等)。 Example

但是对于单应性矩阵,没有单一的解,as described here,所以人们可以找到一些“好的”近似值(在那篇文章中看一下复杂的数学)。可能,可能的转换的一些限制可以简化问题。

答案 2 :(得分:1)

这是你可以尝试的一些不同的东西。设M为表示最终转换的矩阵。您可以尝试使用公式在I(单位矩阵,对角线为1,其他位置为0)之间进行插值

M(t) = exp(t * ln(M))

其中t是从0到1的时间,M(0) = IM(1) = Mexp是通常的无限级数给出的矩阵的指数函数,{{1对于由通常的无穷级数给出的矩阵,它是类似的自然对数函数。

公式的正确性取决于ln表示的转换类型以及中间步骤中允许的转换类型。该公式适用于刚性运动。对于其他类型的转换,可能会发生各种不良事件,包括对数序列的分歧。其他公式可用于其他情况;让我知道如果你使用的是刚性运动以外的变换,我可以给出一些其他的公式。

指数和对数函数可以在矩阵库中使用。如果没有,它们可以很容易地实现为无限级数的部分和。

在旋转的情况下,上述方法应该给出与一些四元数方法相同的结果。四元数方法在可用时可能更快。

更新

我看到你在别处提到你的转换是单应性(透视),所以我上面提出的刚性运动的方法是行不通的。相反,您可以使用ftp://ftp.cs.huji.ac.il/users/aristo/papers/SYGRAPH2005/sig05.pdf中概述的其他相关方法。它如下:用一个更高维度的矩阵表示你的转换。缩放矩阵,使其行列式等于1.调用生成的矩阵M。您希望通过透视度从身份矩阵G进行插值到I

在下文中,让G成为M^T的转置。让函数M

定义
expp

您需要在expp(M) = exp(-M^T) * exp(M+M^T) 找到该函数的反函数;换句话说,你需要解决方程式

G

其中expp(M) = G 是带有行列式的变换矩阵1.调用结果G。该等式可以通过标准数值技术求解,或者您可以使用Matlab或其他数学软件。这样做有点费时费力,但你只需要做一次。

然后按

计算一系列变换
M = logp(G)

其中G(t) = expp(t * logp(G)) 以1 / k为步长从0变为1,其中k是您想要的帧数。

答案 3 :(得分:0)

您可以通过添加域大于零但小于1的变量来参数化一定数量的帧。

Let t be the frame number
Let T be the total number of frames
Let P be the original location and orientation of the object
Let theta be the total rotation angle
and translation be the vector [x,y]'

2D中的变换变为:

T(P|t) = R(t)*P +(t*[x,y]')/T

 where R(t) = {{Cos((theta*t)/T),-Sin((theta*t)/T)},{Sin((theta*t)/T),Cos((theta*t)/T)}}

因此,在帧t_n处,您将变换T(t)应用于时间t_0 = 0处的对象位置(相当于无变换)