在处理二维矩阵时,常想着如何把时域转换到频域来处理,因此翻来了以往数分里面的常用的傅里叶(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);
end
Fuv = zeros(N,M);
for x = 1:M
A1 = Gxv .* exp(-2*pi*1i * (x-1)*U ./ M);
Fuv(:,x)