二維傅利葉變換簡化方式

2021-10-12 13:49:48 字數 2048 閱讀 3145

在處理二維矩陣時,常想著如何把時域轉換到頻域來處理,因此翻來了以往數分裡面的常用的傅利葉(fourier transform);

(notes:一下公式中 m,n分別為二維矩陣的列數和行數,f(x,y) 代表改二維矩陣,f(u,v)為轉換後的矩陣);

i. 傅利葉變換的公式:

拆分到這裡,我也很開心的掏出祖傳的matlab寫了幾行**來實現:

function [fuv] = myft2(fxy)

[n,m,dim] = size(fxy);

if dim > 1

txy = double((rgb2gray(fxy)))/255;

else

txy = double(fxy)/255;

end[u,v] = meshgrid(0:m-1,0:n-1);

gxv = zeros(n,m);

for y = 1:n

a2 = txy.*exp(-2*pi*1i * (y-1)*v./n);

gxv(y,:) = sum(a2,1);

endfuv = zeros(n,m);

for x = 1:m

a1 = gxv .* exp(-2*pi*1i * (x-1)*u ./ m);

fuv(:,x) = sum(a1,2);

end

然後與matlab自帶函式fft2 做組對比:

disp(['是否為空:',num2str(te)]);

disp(['時間長(s):',num2str(sp1 - sp2)]);

但是時間卻相差甚遠:

看了看原公式,想了想如果把上述**轉換成matlab 矩陣運算是不是會提速。然後就實際行動起來:

上面公式可以轉換成 f = g1* f *g2;(矩陣與**如下:)

重複上面的對比:

果然matlb矩陣計算還是有優勢的,效果看起來還可以;

ii. 傅利葉逆變換公式:

用同樣的方式,寫傅利葉逆變換的**,即可獲取同樣的效果,這裡就只貼上公式了;下一期打算做一下基於fft的高通濾波

二維傅利葉變換需知

from 如下,這個 是實現灰度影象作二維傅利葉變換後的非線性變換哈 clear all i imread coins.png f fft2 im2double i f fftshift f f abs f t log f 1 subplot 1,2,1 imshow f,title 未經變換的頻譜...

Matlab中二維離散傅利葉變換

fft是快速傅利葉變換 中值濾波的理解 還有一種非線性濾波 中值濾波器。中值濾波器對脈衝型雜訊有很好的去掉。因為脈衝點都是突變的點,排序以後輸出中值,那麼那些最大點和最小點就可以去掉了。中值濾波對高斯噪音效果較差。常見的影象增強方法有對比度拉伸,直方圖均衡化,影象銳化等。前面兩個是在空域進行基於畫素...

二維DCT變換

出處 dct,又叫離散預先變換,它的第二種型別,經常用於訊號和影象資料的壓縮。經過dct變換後的資料能量非常集中,一般只有左上角的數值是非零的,也就是能量都集中在離散余弦變換後的直流和低頻部分。1,一維dct變換 我們首先看著一維的dct變換,這是二維的基礎。一維的dct變換共有8種,其中最實用的是...