【问题标题】:1d DFT of 3d function [video] in C using openCV使用 openCV 在 C 中对 3d 函数 [视频] 进行 1d DFT
【发布时间】:2012-05-26 09:08:03
【问题描述】:

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

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

formula equation

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

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

【问题讨论】:

    标签: c video opencv dft


    【解决方案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 在 ]0 范围内, M-1]) 到W中对应的位置,即W(y*M+x, t)

    在此过程结束时,W 将在每一行中包含一个像素随时间变化的值。然后,调用cv::dfton W 并使用标志CV_DFT_ROWS 将二维傅里叶变换限制在水平方向,此时正是时候。

    【讨论】:

    • 我想我明白你的想法。但是当你说“将你的 3D 立方体重塑为 2D 矩阵”时,我该怎么做?我有一个使用 cvCaptureFromAVI 捕获的 .mpeg 视频作为输入。之后我该如何继续?感谢您的回复...
    猜你喜欢
    • 2021-11-19
    • 2023-03-15
    • 1970-01-01
    • 2013-01-19
    • 1970-01-01
    • 2013-04-24
    • 2011-03-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多