将以较低分辨率计算的变换应用于更高分辨率的对象

时间:2015-10-09 01:56:45

标签: opencv matrix transform scale flow

我正在开发一款iOS应用程序,它必须计算连续实时视频帧之间的变换矩阵。我正在使用OpenCV来计算光流,然后找到仿射矩阵。

这个过程运行得很好,但速度有点慢,所以我现在将每个帧缩减到一半,然后再开始处理它。问题是,我必须稍后将变换应用于具有原始分辨率的另一个视频帧(我计算矩阵的两倍)。

我的问题是:我应该如何将我为分辨率为X的帧计算的变换矩阵应用到分辨率为2X的另一帧?我知道我应该以某种方式“缩放”矩阵,但不知道如何。我已经尝试将矩阵的平移分量乘以2,这几乎完美地工作(虽然我不明白为什么),但是根据变换有时并不准确。

一种可能的解决方案是将帧缩放到其大小的一半,应用转换然后将其缩放回原始大小,但这会带来性能成本,这就是我尝试计算单个矩阵的原因。以后用来转换框架。

1 个答案:

答案 0 :(得分:0)

如果您使用从H_00到H_22的单应性,那么您必须将比例因子应用于H_00和H_11。

我会推荐另一种解决方法。跟踪或相应估计后。如果x0 [n],y0 [n]是你的起点而x1 [n],y1 [n]你的终点乘以比例因子a而不是运行findHomography或getAffineMatrix。例如。设w0 = 200和h0 = 100是你估计的feautre相应的框架的宽度和高度,w1 = 400,h1 = 300你想要应用的框架。比sx = 2和sy = 3是比例因子,x0 [n] = x0 [n] * sx和y0 [n] = y0 [n] * sy和x1 [n] = x1 [n] * sx等。