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

因此,视频f(x,y,t)的大小为(M,N,T)的一维DFT通过以下公式计算:M x N是每个帧的大小,T是GOP中的帧总数以下等式:

formula equation

有谁知道我如何使用openCV或类似的东西来处理呢?

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

最佳答案

如果我正确理解了您的问题,则需要针对时间坐标计算傅立叶变换。

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

矩阵创建

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

  • NM 行和 T 列分配cv::Mat,其中T是时间窗口的宽度(可以是几帧或while序列长度)。我们将此矩阵称为 W (用于窗口)。
  • 对于窗口中的每个帧I(。,。,t),复制每个像素I(x,y,t)(x的范围是[0,N-1],y的范围是[0,N-1])到W中的相应位置,即 W(y * M + x,t)

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

    关于c - 使用openCV的C中3d函数[视频]的1d DFT,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10658603/

    10-11 13:23