我正在尝试在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列):
cv::Mat
,其中T是时间窗口的宽度(可以是几帧或while序列长度)。我们将此矩阵称为 W (用于窗口)。 在此过程结束时,W将在每一行中包含一个像素的时间变化值。然后,使用标志
cv::dft
在W上调用CV_DFT_ROWS
,以将2D傅里叶变换限制为水平方向,此处为时间。关于c - 使用openCV的C中3d函数[视频]的1d DFT,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10658603/