我正在尝试在 C 编程中沿着 GOP(图片组 - 基本上是视频)计算 1d DFT。我需要沿时间方向应用 1d DFT 将 gop 转换为时间域。在该域中,空间信息和时间频率信息存在于同一帧中。
因此,大小为 (M , N , T) 的视频 f(x, y, t) 的一维 DFT,其中 M x N 是每帧的大小,T 是 GOP 中的总帧数,计算公式为以下等式:
有谁知道我如何使用 openCV 或类似的东西来处理这个问题?
如果您需要任何其他信息,请告诉我!
如果我正确理解你的问题,你想计算关于时间坐标的傅里叶变换。
为此,我认为您需要将 3D 立方体重塑为 2D 矩阵,其中垂直坐标是像素索引(在 [0, MN-1] 范围内),水平坐标是时间(范围 [0 , T-1]),即每一行包含序列中一个像素的值。cv::dft()
然后,您可以使用函数和标志沿每一行应用 DFT 例程CV_DFT_ROWS
。
矩阵创建
要创建矩阵,您将按照以下步骤进行(假设视频帧有 M 行和 N 列):
分配cv::Mat
具有NM行和T列的 a,其中 T 是您的时间窗口的宽度(它可以是几帧或 while 序列长度)。我们称这个矩阵为W(代表窗口)。
对于窗口中的每一帧 I(.,.,t),将每个像素 I(x,y,t)(x 范围为 [0,N-1],y 范围为 ]0,M-1])复制到W 中的对应位置,即W(y*M+x, t)。
在此过程结束时,W 将在每一行中包含一个像素的随时间变化的值。然后,调用cv::dft
带有标志的 W 以CV_DFT_ROWS
将 2D 傅里叶变换限制在水平方向,这就是时间。