MATLAB对图像进行傅里叶变换及频域滤波

任务一:图像傅里叶变换演示

程序代码:

f = imread('autumn.tif');%读取图像

f = im2double(rgb2gray(f));%转换图像格式

figure, imshow(f, []);%显示原始图像

title('原始图像');

F = fft2(f);%傅里叶变换

S = abs(F);%取模

figure, imshow(S, []);%显示取模后图像

title('傅立叶频谱图像');

Fc = fftshift(F);%中心化

S = abs(Fc);%显示中心化图像

figure, imshow(S, []);

title('居中的傅立叶频谱图像');

S = abs(F);

S2 = log(1+S);

figure, imshow(S2, []);

title('使用对数变换进行视觉增强后的傅立叶频谱图像');

Fc = fftshift(F);

S = abs(Fc);

S2 = log(1+S);

figure, imshow(S2, []);

title('使用对数变换进行视觉增强并居中后的傅立叶频谱图像');

运行结果:

MATLAB对图像进行傅里叶变换及频域滤波_第1张图片  MATLAB对图像进行傅里叶变换及频域滤波_第2张图片

MATLAB对图像进行傅里叶变换及频域滤波_第3张图片  MATLAB对图像进行傅里叶变换及频域滤波_第4张图片

MATLAB对图像进行傅里叶变换及频域滤波_第5张图片

任务二:图像傅里叶变换的频谱和相位谱

程序代码:

I = imread('autumn.tif');

I = im2double(I);

I_Gray = rgb2gray(I);%灰度处理

If = fft2(I_Gray);%傅里叶变换

I_Shift = fftshift(If);%对频谱进行移动,是0频率点在中心

I_fudu = log(abs(I_Shift));%获得傅里叶变换的幅度谱

I_xiangwei = log(angle(I_Shift)*180/pi);%获得傅里叶变换的相位谱

I_Restructure = ifft2(abs(If).*exp(j*(angle(If))));%双谱重构

figure(1)

subplot(231)

imshow(I_Gray)

title('原图像')

subplot(232)

imshow(I_fudu,[])

title('图像幅度谱')

subplot(233)

imshow(I_xiangwei,[]);

title('图像相位谱')

subplot(234)

imshow(ifft2(abs(If)),[]);

title('幅度谱重构')

subplot(235)

imshow(ifft2(exp(j*(angle(If)))),[]);

title('相位谱重构')

subplot(236)

imshow(I_Restructure,[]);

title('双谱重构图')

%显示重构的三种图像

运行结果:

MATLAB对图像进行傅里叶变换及频域滤波_第6张图片

任务三:基于空域滤波模板的图像频域滤波

程序代码:

I = imread('autumn.tif');

I = im2double(I);

figure,imshow(I,[]);

h=-ones(7,7);%建立滤波模板

h(4,4)=30;%给模板中心赋值

s=sum(h(:));

h=h/s;%归一化

H=zeros(size(I));

H(100:106,170:176)=h;

H=ifftshift(H);%中心化

FI=fft2(I);FH=fft2(H);

FJ=FI.*FH;

J=real(ifft2(FJ));

figure,imshow(J,[]);

运行结果:

MATLAB对图像进行傅里叶变换及频域滤波_第7张图片 MATLAB对图像进行傅里叶变换及频域滤波_第8张图片

任务四:基于频域滤波器的图像频域滤波

clc;

clear;

I=imread('moon.tif');

I=im2double(I);

figure,imshow(I,[]);

S=size(I);

D0=10;%截止频率

FH=ones(S);

M=S(1);N=S(2);%图像尺寸

I_fft=fft2(I);

I_fft=fftshift(I_fft);

for i=1:1:M

    for j=1:1:N

        if (i-M/2)^2+(j-N/2)^2<=D0^2

            FH(i,j)=1-exp((-(i-M/2)^2-(j-N/2)^2)/(2*D0*D0));

        end

    end

end

figure,imshow(real(ifft2(I_fft.*FH)));

%将FH构造成一个高通滤波器;

%原图像利用FH进行滤波,形成FJ;

%对FJ进行逆变换形成图像J;

运行结果:

MATLAB对图像进行傅里叶变换及频域滤波_第9张图片  MATLAB对图像进行傅里叶变换及频域滤波_第10张图片

你可能感兴趣的:(MATLAB,图像处理,matlab,图像处理,开发语言)