傅里叶变换的意义
傅里叶变换的意义在于提取一张图片的频率成分,理论推导见笔记本。
映射关系
其映射关系可以大致总结成
f(x,y)−−−>F(u,v)
其中图片可以看作是一个矩阵,矩阵里的元素是灰度值。而矩阵又可以看作是函数的离散形式。(就像向量可以看作一元函数离散一样,见笔记本)。那么f(x,y)就可以认为是矩阵的函数形式。f(x,y)就相当于一张图片,x,y是像素坐标,f(x,y)是像素灰度值。
F(u,v)是这张图片的某个函数。虽然也可以表示为图片,但是它的意义并不是图片而是一种分析数据。
具体形式
傅里叶变换的具体形式是
F(u,v)=∬f(x,y)e−2πi(ux+vy)dxdy
e−2πi(ux+vy)=cos(2π(ux+vy))+isin(2π(ux+vy))
- 两个函数的乘积后积分。对应的离散形式就是两个函数在某点的值相乘,求和。
- 这是向量的乘法推广,向量的乘法代表在某个方向的分量投影,这里函数的乘法也是一样。
- 如果u,v是确定的,那么可以认为这是f(x,y)在特定正弦函数和特定余弦函数上的分量。
- 一连串的正弦函数和余弦函数构成了无穷维空间的基。
- 同时由于有无穷多的基,所以u,v是连续变化的。
- 傅里叶变换结果F(u,v)表示在某特定基(cos(u,v),sin(u,v))上函数的投影值。如果把(u,v)看作是一个平面,那么可以找到u,v坐标系下,函数在特定基上的投影值。
- 傅里叶变换结果对图像的旋转是敏感的。同一张图旋转后其傅里叶变换结果不同。
- 实际上,是用二维平面各个方向上的正弦余弦函数来对f(x,y)进行重构,u,v指定了方向, u2+v2−−−−−−√ 指定了频率的大小。
如图所示
左图表示的是(u,v)=(0,0.4),傅里叶变换实数部分所对应的图片
中图表示的是(u,v)=(1,2),傅里叶变换实数部分所对应的图片
右图表示的是(u,v)=(10,-5),傅里叶变换实数部分所对应的图片
从图中可以看出,纹理在某个方向出现的频率升高,那么对应点傅里叶变换的数值也会增大。如果图片旋转,频域图也会变化。
matlab
A=imread('window.jpg'); %载入图片
A=rgb2gray(A);
B=fftshift(fft2(A)); % 进行傅立叶变换,并且移位
subplot(231)
imshow(A);
title('原始图像');
subplot(232)
imshow(abs(B),[ ]);
title('原始频谱图');
subplot(233)
imshow(log(abs(B)),[]);
title('取对数后的频谱图');
subplot(234)
imshow(angle(B),[ ]);
title('相位图');
subplot(235)
imshow(real(B),[ ]);
title('实部图');
subplot(236)
imshow(imag(B),[ ]);
title('虚部图');
%代码转自网络
傅里叶变换结果
这里值得注意的是如果不先变化成灰度图,傅里叶变换的结果是一片空白。
如图
没转成灰度图。
同时imshow里必须加上[]
否则会导致频谱图一篇空白
最后必须对频谱取对数再作图,否则会导致一片空白