数字图像处理matlab上机实验 (四)

前言:作为一名图像算法攻城狮,那是在2014年大三下学期,一本深绿色的《数字图像处理》(冈萨雷斯的英文版)出现在自己课桌前。偶然间打开的一扇意外之门,就这样结下了一段不解之缘,那些日子不断上网搜代码的自己,那个刚上机不到二十分钟就把作业提交的自己,早已随往日的岁月飘扬而去。三年的烟酒僧,两年的酱油工,而今只觉脑子越来越不够用,这次决心回炉重造,希望能够通过固本培基,打开思路,话不多说,开始上课!
----2020-7-6


实验4 图像的二维傅里叶变换和频谱

一、实验目的
通过本实验使学生掌握使用 MATLAB 进行二维傅里叶变换的方法,加深对二维傅里叶变换的理解和图像频谱的理解。
二、实验原理
本实验是基于数字图像处理课程中的二维傅里叶变换理论来设计的。
本实验的准备知识:第四章 频域图像增强中的一维傅里叶变换和二维傅里叶变换,频
域图像增强的步骤,频域滤波器。
实验用到的基本函数:
一维傅里叶变换函数: fft,
一维傅里叶反变换函数:ifft
频谱搬移函数:fftshift
二维傅里叶变换函数:fft2
二维傅里叶反变换函数:ifft2
绘图函数:imshow, mesh
【说明,如对上述函数的使用方法有疑问,请先用help命令查询。建议先用help命令
查询器应用方法,再做具体实验内容。 】
例:计算图像f的频谱并显示

F=fft2(f);
S=abs(F); %求幅度
imshow(S,[]);%显示图像幅度频谱
Fc=fftshift(F); %将图像频谱原点移动到中心显示
imshow(abs(Fc));

三、实验内容
(一) 一维傅里叶变换的实现和分析 一维傅里叶变换的实现和分析 一维傅里叶变换的实现和分析 一维傅里叶变换的实现和分析
1、 生成一个一维向量,x=[1 2 3 4 5 6 7 8]; 计算该向量的傅里叶变换,并由傅里叶变换求反变换,验证结果。

x=1:8

x =
1 2 3 4 5 6 7 8

X=fft(x)

X =
Columns 1 through 6
36.0000 -4.0000 + 9.6569i -4.0000 + 4.0000i -4.0000 + 1.6569i -4.0000 -4.0000 - 1.6569i
Columns 7 through 8
-4.0000 - 4.0000i -4.0000 - 9.6569i

x1=ifft(X)

x1 =
1 2 3 4 5 6 7 8

2、 在时间域中将x乘以(-1)n,计算其傅里叶变换,实现傅里叶变换的平移性质

clc
n=1:8;
y=n.*(-1).^n
y1=fft(y)
y2=fftshift(y1)
y =

-1     2    -3     4    -5     6    -7     8


y1 =

Columns 1 through 4

4.0000 + 0.0000i   4.0000 + 1.6569i   4.0000 + 4.0000i   4.0000 + 9.6569i

Columns 5 through 8

-36.0000 + 0.0000i   4.0000 - 9.6569i   4.0000 - 4.0000i   4.0000 - 1.6569i


y2 =

Columns 1 through 4

-36.0000 + 0.0000i   4.0000 - 9.6569i   4.0000 - 4.0000i   4.0000 - 1.6569i

Columns 5 through 8

4.0000 + 0.0000i   4.0000 + 1.6569i   4.0000 + 4.0000i   4.0000 + 9.6569i

3、 使用fftshift函数,实现频谱的平移

x=1:8
X=fft(x)
X1=fftshift(X)
x =
  1     2     3     4     5     6     7     8
X =
Columns 1 through 6 
36.0000            -4.0000 + 9.6569i  -4.0000 + 4.0000i  -4.0000 + 1.6569i  -4.0000            -4.0000 - 1.6569i
Columns 7 through 8 
-4.0000 - 4.0000i  -4.0000 - 9.6569i
X1 =
Columns 1 through 6 
-4.0000            -4.0000 - 1.6569i  -4.0000 - 4.0000i  -4.0000 - 9.6569i  36.0000            -4.0000 + 9.6569i
Columns 7 through 8 
-4.0000 + 4.0000i  -4.0000 + 1.6569i

(二)二维傅里叶变换的实现和分析
产生如图所示图象 f1(x,y)(64×64 大小,中间亮条宽16,高 40,居中,暗处=0,亮处=255) ,用 MATLAB 中的 fft2函数求其傅里叶变换,要求:
1、同屏显示原图f1和FFT(f1)的幅度谱图;
2、若令f2(x,y)=(-1)x+yf1(x,y),重复过程1,比较二者幅度谱的异同,简述理由;
3、若将 f2(x,y)顺时针旋转 90 度得到 f3(x,y),试显示 FFT(f3)的幅度谱,并与FFT(f2)的幅度谱进行比较。

clc,clear,close all;
f1=zeros(64,64);  
f1(32-20:32+20,32-8:32+8)=255;
F1=fft2(f1);
subplot(2,3,1),imshow (f1);
subplot(2,3,2),imshow (log(abs(F1)),[]);

for i=1:64
    for j=1:64
        h(i,j)=255;
    end
end  
f2=h.*f1;
F2=fft2(f2);
subplot(2,3,3),imshow (f2);
subplot(2,3,4),imshow (log(abs(F2)),[]);

f3=imrotate(f2,90);
F3=fft(f3);
subplot(2,3,5),imshow (f3);
subplot(2,3,6),imshow (log(abs(F3)),[]);

在这里插入图片描述

(三)任意图像的频谱显示 任意图像的频谱显示 任意图像的频谱显示 任意图像的频谱显示
1、读入图像lenagray.tif,计算该图像的频谱,并将频谱原点移到中心位置显示。

i=imread('F:\Images\lenagray.tif');
i1=fft2(i);
subplot(1,3,1),imshow(i)
title('lena原图像')
 
subplot(1,3,2),imshow(log(abs(i1)),[])
title('lena频谱图')
 
i2=fftshift(i1);
subplot(1,3,3),imshow(log(abs(i2)),[])
title('lena频谱原点移到中心位置')

在这里插入图片描述

2、读入图像rice.tif,计算该图像的频谱,并将频谱原点移到中心位置显示。

A=imread('F:\Images\rice.tif');
B=fft2(A);
subplot(1,3,1)
imshow(A)
title('rice原图像')
subplot(1,3,2)
imshow(log(abs(B)),[])
title('rice频谱图')
subplot(1,3,3)
C=fftshift(B);
imshow(log(abs(C)),[])
title('rice频谱原点移到中心位置')

在这里插入图片描述

**思考:
图像频谱有何特点?低频分量和高频分量在图像频谱中是怎样分布的?

四、实验方法与步骤
1、顺序完成上述实验内容
2、按照实验内容要求,分析编程,将程序和实验结果整理成word文档,分析结果,编写实验报告。
五、实验报告要求
1、本实验由学生单人独立完成。
2、每个实验均按统一格式编写实验报告。
实验报告内容包括:实验要求,实验项目,典型程序流程图,程序清单,数据结果和分析讨论。
**

本系列文章列表如下:
数字图像处理matlab上机实验 (一)
数字图像处理matlab上机实验 (二)
数字图像处理matlab上机实验 (三)
数字图像处理matlab上机实验 (四)
数字图像处理matlab上机实验 (五)
数字图像处理matlab上机实验 (六)
数字图像处理matlab上机实验 (七)
数字图像处理matlab上机实验 (八)
数字图像处理matlab上机实验 (九)

猜你喜欢

转载自blog.csdn.net/sinat_34897952/article/details/107116232