傅利葉變換
二維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 那麼可不可以減少呢?就要從這個矩陣的特殊地...