1旋转图像,并显示图像的傅里叶频谱
1 I=zeros(256,256);
2 I(28:228,108:148)=1;
3 subplot(2,4,1);
4 imshow(I);
5 title('原始图像');
6 J=fft2(I);%对信号进行快速Fourier变换,注释一
7 F=abs(J);%求得Fourier变换后的振幅,注释二
8 J1=fftshift(F)%注释三
9 subplot(2,4,2);
10 imshow(J1,[5 50])
11 title('原图像的傅里叶频谱');
12 J=imrotate(I,30,'bilinear','crop');%逆时针旋转30度,注释四
13 subplot(2,4,3);
14 imshow(J);
15 title('旋转30度');
16 J1=fft2(J);
17 F=abs(J1);
18 J2=fftshift(F);
19 subplot(2,4,4)
20 imshow(J2,[5 50])
21 title('旋转30度傅里叶频谱');
22 J=imrotate(I,60,'bilinear','crop');%逆时针旋转60度
23 subplot(2,4,5);
24 imshow(J);
25 title('旋转60度后');
26 J1=fft2(J);
27 F=abs(J1);
28 J2=fftshift(F);
29 subplot(2,4,6)
30 imshow(J2,[5 50])
31 title('旋转60度傅里叶频谱');
32 J=imrotate(I,90,'bilinear','crop');%逆时针旋转90度
33 subplot(2,4,7);
34 imshow(J);
35 title('旋转90度后');
36 J1=fft2(J);
37 F=abs(J1);
38 J2=fftshift(F);
39 subplot(2,4,8)
40 imshow(J2,[5 50])
41 title('旋转90度傅里叶频谱');
2二维余弦正反变换
1 I=imread('C:\\Users\\Administrator\\Desktop\\lenagray.jpg');
2 subplot(1,3,1)
3 imshow(I);
4 title('原始图像')
5 J=dct2(I);
6 subplot(1,3,2)
7 imshow(log(abs(J)),[]);
8 title('余弦变换系数');
9 k=idct2(J)/255;
10 subplot(133);
11 imshow(k);
12 title('余弦反变换恢复图像');
3尺度变化
1 I=zeros(256,256);
2 I(8:248,110:136)=255;
3 figure(1);
4 imshow(I);
5 J3=fft2(I);
6 F2=abs(J3);
7 F3=fftshift(F2);
8 figure(2);
9 imshow(F3,[5 30]);
10 a=0.1;
11
12 for i=1:256
13 for j=1:256;
14 I(i,j)=I(i,j)*a;
15 end
16 end
17 J2=fft2(I);
18 F1=abs(J2);
19 J3=fftshift(F1);
20 figure(3);
21 imshow(J3,[5 30])
当f(x,y)在水平方向进行扩展,相同间隔下频谱中u方向零点的数量也增加
4傅里叶变换实例
1 I=imread('D:/picture/lenagray.jpg');
2 figure;imshow(I);
3 p=fft2(I);
4 p=fftshift(p);
5 figure;imshow(log(abs(p)),[8 10]);
6 I1=imnoise(I,'gaussian',0,0.01);
7 figure;imshow(I1);
8 p1=fft2(I);
9 p1=fftshift(p1);
10 figure;imshow(log(abs(p1)),[8 10]);
figure1是原图figure2是原图的傅里叶频谱图(已经移中),
figure3是加了高斯噪声的lena图,及其对应的频谱图。
有一些关于频谱图的结论:中心白色区域是低频,但能量高,幅角大,中心之外的区域是黑色区域,对应的是高频,能量幅度小,
对于图像灰度变化缓慢的区域,对应它变换后的低频分量部分;图像灰度呈阶跃变换的区域,对应变换后的高频部分。除颗粒噪声外,图像细节的边缘、轮廓处都是灰度变化突出区域。他们都具有变换后的高频分量特征。我个人观点是图像的灰度值越小即越黑则对应的频谱中心区域越小,高频成分占的比重越高。
具体关于频谱的内容可以看一下这两篇博客
1 Load lena.mat; 2 Load boy.mat; 3 Jf=fft2(J1); 4 FAi=abs(If); 5 FPi=angle(If); 6 FAj=abs(Jf); 7 FPj=angle(Jf); 8 IR=FAi.*cos(FPj)+FAi.*sin(FPj).*i; 9 JR=FAj.*cos(FPi)+FAj.*sin(FPi).*i; 10 IR1=abs(ifft2(IR)); 11 JR1=abs(ifft2(JR)); 12 subplot(221) 13 imshow(I1); 14 title('男孩原图像'); 15 subplot(222) 16 imshow(J1); 17 title('美女原图像'); 18 subplot(223) 19 imshow(IR1,[]); 20 title('男孩的幅值谱和美女的相位谱组合'); 21 subplot(224) 22 imshow(JR1,[]); 23 title('美女的幅值谱和男孩的相位谱组合');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
注释一:
1. Y = fft(y);
2. Y = fft(y,N);
式中,y是序列,Y是序列的快速傅里叶变换。y可以是一向量或矩阵,若y为向量,则Y是y的FFT,并且与y具有相同的长度。若y为一矩阵,则Y是对矩阵的每一列向量进行FFT。
注释二:
注释三:
fft是一维傅里叶变换,即将时域信号转换为频域信号fftshift是针对频域的,将FFT的DC分量移到频谱中心
即对频域的图像,(假设用一条水平线和一条垂直线将频谱图分成四块)对这四块进行对角线的交换与反对角线的交换
fft:对模拟信号进行变换,变换结果是左右对称的,有负频率,如下图(a)中的作图所示。
DFT的求和区间是0~N-1,DFT的物理意义是对fft的结果等间隔的采样N点,但是人为的规定0~N-1使得只采样了正频率,和fft结果不一致。由于fft的对称性或者说是周期性(见(b)的右图),所以可以以DFT结果以Fs/2为中心, 把Fs/2频率右半部分移到左半部分(即N/2~N-1)个点平移到负半轴,这样的结果的形状就同(a)中右面的图一致了,这也即是fftshift的原因。。其实是为了与fft结果一致。
注释四:
imrotate函数说明
调用格式
编辑
B = imrotate(A,angle)
B = imrotate(A,angle,method)
B = imrotate(A,angle,method,bbox)
调用格式说明
B = imrotate(A,angle)
将图像A(图像的数据矩阵)绕图像的中心点旋转angle度, 正数表示逆时针旋转, 负数表示顺时针旋转。返回旋转后的图像矩阵。
B = imrotate(A,angle,method)
使用method参数可以改变插值算法,method参数可以为下面这三个值: 'nearest':最邻近线性插值(Nearest-neighbor interpolation) 'bilinear': 双线性插值(Bilinear interpolation) 'bicubic': 双三次插值(或叫做双立方插值)(Bicubic interpolation)
B = imrotate(A,angle,method,bbox)
bbox参数用于指定输出图像属性: 'crop': 通过对旋转后的图像B进行裁剪, 保持旋转后输出图像B的尺寸和输入图像A的尺寸一样。 'loose': 使输出图像足够大, 以保证源图像旋转后超出图像尺寸范围的像素值没有丢失。 一般这种格式产生的图像的尺寸都要大于源图像的尺寸。
作者:你的雷哥
本文版权归作者所有,欢迎转载,但未经作者同意必须在文章页面给出原文连接,否则保留追究法律责任的权利。