频域滤波
- 对图像平滑的低通滤波
- 对图像锐化的高通滤波
- 去除周期的选择性滤波
二维傅里叶变换
二维傅里叶变换:
二维傅里叶逆变换:
二维离散傅里叶变换
f(x,y)代表一幅大小为M×N的图像,其中x=0,1,……,M-1,y=0,1,…..,N-1,DFT如下
IDFT:
这里的F(u,v)被称为展开的傅里叶级数
频域原点出的变换的值F(0,0)称为傅里叶变换的直流(dc)分量,F(0,0)等于f(0,0)平均值的MN倍。要注意的是在MATLAB中索引是从1开始的而不是从0开始的
MATLAB实现对图像的Fourier变换和逆变换
Fourier变换,f为原图像
1
>> F = fft2(f);
Fourier谱
1
>> S = abs(F);
该函数计算的是数组中每个元素的幅值( $ \sqrt{r^2+i^2} $ )
可以在这里观察到4个角的亮点,这就是周期特性的结果,不便观察
- 将交换的原点移动到频域矩形的中心
1
>> Fc = fftshift(F)
频谱范围大,不边观察
取模,缩放
1
S2 = log(1 + abs(Fc));
Fourier逆变换
1
>> f = ifft2(F);
下面是完整代码1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23img=imread('moon.jpg');
subplot(2,2,1);
imshow(img);
title('原图');
f=rgb2gray(img); %对于RGB图像必须做的一步,也可以用im2double函数
F=fft2(f); %Fourier变换
F1=log(abs(F)+1); %取模,缩放
subplot(2,2,2);
imshow(F1,[]);
title('傅里叶变换频谱图');
Fs=fftshift(F); %将频谱图中零频率成分移动至频谱图中心
S=log(abs(Fs)+1); %取模并进行缩放
subplot(2,2,3);
imshow(S,[]);
title('频移后的频谱图');
fr=real(ifft2(ifftshift(Fs))); %频率域反变换到空间域,并取实部
ret=im2uint8(mat2gray(fr)); %更改图像类型
subplot(2,2,4);
imshow(ret);
title('逆傅里叶变换');
结果
如果使用>> f = im2double(img)
进行处理,则会出现以下结果
-分析
- 图像Fourier变换之后立即imshow会报错
这是因为经过fourier变换之后的图像矩阵为复数矩阵,包含实部和虚部,此时进行abs(f)
取复数矩阵的模,再显示。 rgb2gray()
和im2double()
的使用
这一点要特别注意,对于RGB图像,imread()
是已三维矩阵的形式来存储的,要先进行类型转换,否则会出现空白rgb2gray()
转换为灰度图像,得到的图像呈灰色基调,见‘结果’im2double()
转换成双精度图像,得到的图像呈白色基调,见‘结果’
其他图像处理结果
可以看到Fourier逆变换处理之后的图片为原图的灰度图片。
对图像Fourier变换的意义分析
对于一个图像,其频率是表征图像中灰度变化剧烈程度的指标,是灰度在平面空间的梯度。设f为一个能量有限的模拟信号,其傅里叶变换代表f的频谱。从纯粹的数学意义上来看,Fourier变换是将一个函数转换成一系列的周期函数来进行处理的。从物理角度来看,Fourier变换是将图像从空间域转换到频率域,逆变换是将图像从频率域转换到空间域。也就是说,Fourier变换是将图像的灰度分布函数变换成图像的频率分布函数。==这里要注意是灰度分布函数==,下面还会说到。
Fourie逆变换是将图像的频率分布函数转换成灰度分布函数(原始图像的灰度分布函数),图像的概念前边说过,用一个二维矩阵来表示空间上的各点,z=f(x,y),但空间是三维的,因此空间上的物体在另一个维度上的关系必须由梯度来表示。
Fourier频谱图上的明暗点,意义是指图像上的某一点与邻域点差异的强弱,即梯度的大小。
对频谱移频到原点之后,可以看出图像的频率分布是以原点为圆心,对称分布的.