2012-05-18 80 views
0

我想在C編程中沿着GOP(圖片組 - 基本上是一個視頻)計算1d DFT。我需要沿時間方向應用1d DFT將gop轉變爲時域頻率域。 在這個領域,空間信息和時間頻率信息存在於同一個框架中。因此,大小爲(M,N,T)的視頻f(x,y,t)的一維DFT其中,M×N是每個幀的大小,並且T是該幀中的總幀數1d使用openCV在C中的3d函數[視頻]的DFT

formula equation

有誰知道我怎麼能這樣使用OpenCV的或類似的東西處理:GOP由以下公式計算的?

如果您需要任何其他信息,請讓我知道!

回答

1

如果我正確理解你的問題,你想計算關於時間座標的傅里葉變換。

爲了做到這一點,我認爲您需要將您的3D立方體重塑爲二維矩陣,其中垂直座標是像素索引(範圍[0,MN-1]),水平座標是時間(範圍[0,T-1]),即每行包含序列中一個像素的值。 然後,您可以使用函數cv::dft()和標誌CV_DFT_ROWS沿每行應用DFT例程。

矩陣生成

要創建矩陣,你將進行如下(假設一個視頻幀具有M行和N列):

  1. 分配一個cv::MatNM行和T列,其中T是您的時間窗口的寬度(它可以是幾幀或while序列長度)。我們稱之爲矩陣W(用於窗口)。 (x,y,t)(x範圍在[0,N-1]和y in] 0,M中的每一個幀I(。,。,t) -1])到W中的相應位置,即W(y * M + x,t)

在該過程結束時,W將在每行中包含一個像素的時間變化值。然後,在標記爲CV_DFT_ROWS的W上調用cv::dft以將二維傅里葉變換限制到水平方向,在這裏是時間。

+0

我想我明白你的意思。但是當你說「把3D立方體重塑成二維矩陣」時,我該怎麼做?我輸入了一個.mpeg視頻,我使用cvCaptureFromAVI進行捕捉。那之後我該如何繼續? 謝謝你的迴應... – user1404102