您好,欢迎访问三七文档
傅里叶变换的MATLAB函数在MATLAB中提供了fft函数用于实现一维快速傅里叶变换。其调用格式为:(1)Y=fft(X):返回向量X的离散傅里叶变换。如果X为矩阵,fft函数返回矩阵每列的傅里叶变换。(2)Y=fft2(X):返回二维离散傅里叶变换,结果Y和X的大小相同。(3)Y=fftn(X):返回X的多维离散傅里叶变换,结果Y和X的大小相同。(4)Y=fftshift(X):把fft函数、fft2函数和fftn函数输出结果的零频率部分移到数组的中间。傅里叶变换的MATLAB函数构造一幅黑白二值图像,在256*256的黑色背景中心产生一个8*16的白色矩形方块,然后对该图像进行二维傅里叶变换。I=zeros(256,256);I(124:132,120:136)=1;subplot(131);imshow(I);xlabel(‘(a)原始图像’);I=im2double(I);%把图像数据转换为双精度数,因为FFT要求输入的矩阵为双精度浮点型。傅里叶变换的MATLAB函数F1=fft2(I);subplot(132);imshow(log(1+abs(F1)),[]);xlabel(‘(b)傅里叶变换’);FC1=fftshift(F1);%将二维傅里叶变换的零频率由左上角移到频谱的中心subplot(133);imshow(FC1);xlabel(‘(c)中心化’)傅里叶变换的MATLAB函数例二:对一幅图像实施二维DFT,显示并观察其频谱。对单缝进行快速傅里叶变换,以三种方式显示频谱。即:直接显示(坐标原点在左上角);把坐标原点平移至中心后显示;以对数方式显示。f=zeros(512,512);f(246:266,230:276)=1;subplot(221);imshow(f,[]);xlabel(‘单狭缝图像’);F=fft2(f);S=abs(F);傅里叶变换的MATLAB函数subplot(222);imshow(S,[]);xlabel(‘幅度谱(频谱坐标原点在左上角)’);Fc=fftshift(F);%把频谱坐标原点由左上角移至屏幕中央。subplot(223);Fd=abs(Fc);imshow(Fd,[]);xlabel(‘幅度谱(频谱坐标原点在屏幕中央)’);S2=log(1+abs(Fc));subplot(224);imshow(S2,[]);xlabel(‘以对数方式显示频谱’)傅里叶变换的MATLAB函数例三:对rice.png图像进行傅里叶变换I1=imread(‘rice.png’);I1=im2double(I1);F1=fft2(I1);FC1=fftshift(F1);subplot(121);imshow(I1);xlabel(‘(a)原始图像’);subplot(122);imshow(log(1+abs(FC1)));xlabel(‘(b)傅里叶谱’);傅里叶变换的MATLAB函数f=zeros(1000,1000);f(350:649,475:524)=1;subplot(221);imshow(f,’notruesize’);%‘notruesize’图片去适应窗口,窗口大小不动,自动调节图片大小。所以显示出来的图片跟实际尺寸可能不一致。‘truesize’就是按图片实际大小显示图片,窗口会自动调节大小去适应图片尺寸。这个是默认情况,跟省略这个参数一样。xlabel(‘(a)原始图像’);subplot(222);F=fftshift(abs(fft2(f)));傅里叶变换的MATLAB函数imshow(F,[-1,5],’notruesize’);%将F值域设置为[-1,5]xlabel(‘(b)傅里叶变换频谱’);f=zeros(1000,1000);f(350:649,475:524)=1;f=imrotate(f,45,’bilinnear’,’crop’);%以图像中心为原点旋转45度,才用双线性插值,如果旋转后的图像有所增大,则剪切其中间部分,返回和原图大小一致的图像subplot(223);imshow(f,’notruesize’);xlabel(‘(c)图像正向旋转45度‘);傅里叶变换的MATLAB函数F=fftshift(abs(fft2(f)));subplot(224);imshow(F,[-1,5],’notruesize’);xlabel(‘(d)图像旋转45度的傅里叶变换频谱’);
本文标题:图像的傅里叶变换
链接地址:https://www.777doc.com/doc-1726657 .html