使用openCV在C中的3d功能[视频]的1d DFT

时间:2012-05-18 19:25:06

标签: c video opencv dft

我正在尝试在C编程中沿着GOP(图片组 - 基本上是视频)计算1d DFT。我需要沿时间方向应用1d DFT将gop转换为时间频域。 在该领域中,空间信息和时间频率信息存在于同一帧中。

所以大小为(M,N,T)的视频f(x,y,t)的1D DFT,其中,M x N是每帧的大小,T是GOP中的帧总数由下式计算:

formula equation

有谁知道如何使用openCV或类似方法处理这个问题?

如果您需要任何其他信息,请告诉我们!

1 个答案:

答案 0 :(得分:1)

如果我正确理解了您的问题,您需要根据时间坐标计算傅里叶变换。

为了做到这一点,我认为您需要将3D立方体重塑为2D矩阵,其中垂直坐标是像素索引(在[0,MN-1]范围内),水平坐标是时间( range [0,T-1]),即每行包含序列中一个像素的值。 然后,您可以使用cv::dft()函数和标记CV_DFT_ROWS在每行中应用DFT例程。

矩阵创建

要创建矩阵,您可以按以下步骤操作(假设视频帧有M行和N列):

  1. 使用 NM 行和 T 列分配cv::Mat,其中T是时间窗口的宽度(可以是几帧或者序列长度)。我们称这个矩阵为 W (对于窗口)。

  2. 对于窗口中的每个帧I(。,。,t),复制每个像素I(x,y,t)(x范围为[0,N-1]和y in] 0, M-1])到W的相应位置,即 W(y * M + x,t)

  3. 在此过程结束时,W将在每行中包含一个像素的时间变化值。然后,使用标记cv::dft在W上调用CV_DFT_ROWS,将2D傅里叶变换限制为水平方向,即时间。