计算机视觉---2.2---频率与傅里叶变换

傅里叶变换的意义

傅里叶变换的意义在于提取一张图片的频率成分,理论推导见笔记本。

映射关系

其映射关系可以大致总结成

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)e2πi(ux+vy)dxdy
e2πi(ux+vy)=cos(2π(ux+vy))+isin(2π(ux+vy))
  1. 两个函数的乘积后积分。对应的离散形式就是两个函数在某点的值相乘,求和。
  2. 这是向量的乘法推广,向量的乘法代表在某个方向的分量投影,这里函数的乘法也是一样。
  3. 如果u,v是确定的,那么可以认为这是f(x,y)在特定正弦函数和特定余弦函数上的分量。
  4. 一连串的正弦函数和余弦函数构成了无穷维空间的基。
  5. 同时由于有无穷多的基,所以u,v是连续变化的。
  6. 傅里叶变换结果F(u,v)表示在某特定基(cos(u,v),sin(u,v))上函数的投影值。如果把(u,v)看作是一个平面,那么可以找到u,v坐标系下,函数在特定基上的投影值。
  7. 傅里叶变换结果对图像的旋转是敏感的。同一张图旋转后其傅里叶变换结果不同。
  8. 实际上,是用二维平面各个方向上的正弦余弦函数来对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里必须加上[]
否则会导致频谱图一篇空白

最后必须对频谱取对数再作图,否则会导致一片空白

版权声明:本文为博主原创文章,未经博主允许不得转载。

原文地址:https://www.cnblogs.com/ironstark/p/4892627.html