OpenCV C 二維傅利葉譜和相角陣列

2021-09-11 23:44:25 字數 2379 閱讀 4330

傅利葉變換

    二維dft的極座標表示

    幅度或頻率譜為

r(u,v)和i(u,v)分別是f(u,v)的實部和虛部

    相角或相位譜為

使用書中圖4-24和圖4-25測試,顯示傅利葉譜和相位譜

**如下:

#include "opencv2/opencv.hpp"

using namespace cv;

#define pi2 2*3.141592654

int main( int argc, char *ar** )

;mat complexi;

merge(temp, 2, complexi);

dft(complexi, complexi);    //傅利葉變換

//顯示頻譜圖

split(complexi, temp);

mat amplitude, angle;

magnitude(temp[0], temp[1], amplitude);

phase(temp[0], temp[1], angle);

//    carttopolar(temp[0], temp[1],amplitude, angle);

int cx = amplitude.cols/2;

int cy = amplitude.rows/2;

mat q0(amplitude, rect(0, 0, cx, cy));   // top-left - create a roi per quadrant

mat q1(amplitude, rect(cx, 0, cx, cy));  // top-right

mat q2(amplitude, rect(0, cy, cx, cy));  // bottom-left

mat q3(amplitude, rect(cx, cy, cx, cy)); // bottom-right

mat tmp;                           // swap quadrants (top-left with bottom-right)

q0.copyto(tmp);

q3.copyto(q0);

tmp.copyto(q3);

q1.copyto(tmp);                    // swap quadrant (top-right with bottom-left)

q2.copyto(q1);

tmp.copyto(q2);

mat amplitude_src;

divide(amplitude, oph*opw, amplitude_src );

imshow("amplitude_src",amplitude_src);

amplitude += scalar::all(1);                    // switch to logarithmic scale

log(amplitude, amplitude);

normalize(amplitude, amplitude, 0, 255, norm_minmax); //歸一化 方便顯示,和實際資料沒有關係

amplitude.convertto(amplitude, cv_8u);

imshow("amplitude",amplitude);

normalize(angle, angle, 0, 255, norm_minmax); //歸一化 方便顯示,和實際資料沒有關係

}結果:

圖4-24 原圖及原始傅利葉圖

log變換後的傅利葉圖及相位圖

圖4-25的影象

ifft2 二維快速傅利葉逆變換(Matlab)

x ifft2 y x ifft2 y,m,n x ifft2 symflag x ifft2 y 使用快速傅利葉變換演算法返回矩陣的二維離散傅利葉逆變換。如果 y 是乙個多維陣列,則 ifft2 計算大於 2 的每個維度的二維逆變換。輸出 x 的大小與 y 相同。x ifft2 y,m,n 在計算...

Get 二維陣列的維數 行和列

平時我不太常用二維陣列,所以比較陌生,為熟悉和了解二維陣列整理此文。1 二維陣列的宣告與初始化 int arrayint2 定義乙個二維陣列 arrayint2 newint 3 5 初始化 2 遍歷二維陣列 最常用的遍歷陣列的方式是使用foreach,foreach語句可以訪問陣列中的每個元素,而...

尋找二維矩陣裡的乙個數

題目是 乙個二維矩陣,給乙個數,判斷這個數存不存在於這個矩陣當中,當然,這個矩陣也是乙個有規律的矩陣。即從上往下,從左往後都是遞增的。最普通的就是從上到下,從左到右乙個乙個的進行判斷尋找。這時,在最壞情況下,就得將整個矩陣輪訓一遍。那麼時間複雜度就為o n 那麼可不可以減少呢?就要從這個矩陣的特殊地...