实验二 图像的频域变换
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验二图像频域变换
一.实验目的
了解图像频域变换的意义和方法,熟悉离散傅立叶变换、离散余弦变换等变换的基本性质。通过实验了解二维频谱的分布特点,掌握使用MATLAB 编程实现
数字图像变换的方法。。
二.预习
1.预习实验内容,阅读教材熟悉实验原理;
2.查阅资料,熟悉MATLAB的操作环境和基本功能。熟悉实验中涉及的有关函数。
三. 实验仪器及软件
计算机、MATLAB软件。
四.实验原理和内容
4.1. 图像的二维离散傅立叶变换
MATLAB 提供了fft 函数、fft2 函数和fftn 函数分别用于进行一维DFT、二维DFT 和n维DFT 的快速傅立叶变换, ifft 函数、ifft2 函数和ifftn 函数分别用于进行一维DFT、二维DFT和n 维DFT 的快速傅立叶反变换。
快速傅立叶变换的算法思想:
(1)首先将原图像进行转置;
(2)按行对转置后的图像矩阵做一维FFT,将变换后的中间矩阵再转置;
(3)对转置后的中间矩阵做一维FFT,最后得到的就是二维FFT。
相应函数:
1. fft2 函数
计算二维快速傅立叶变换,语法格式为:
B=fft2(I)
B=fft2(I,m,n), 通过对图像I 剪切或补零,按用户指定的点数计算fft。
2. fftn 函数
计算n维fft,语法格式同fft2
3. fftshift 函数
将变换后的图像频谱移到中心。语法格式为:
B=fftshift(I)
4. ifft2 函数
计算二维傅立叶反变换,语法格式同fft2。
5. ifftn 函数
计算n维傅立叶反变换。
实验1. 对给定的一幅图像进行傅立叶变换,显示无平移的DFT 和原点移到中心的DFT。 %建立简单图像d并显示之
d = zeros(64,64); %图像大小64?64
d(26:41,26:41) =1; %中心白色方块大小为16x16
figure(1); %建立图形窗口1
imshow(d); %显示图像d如图3.5(a)所示
%计算傅里叶变换并显示之
D = fft2(d); %计算图像d的傅里叶变换,fft2(d) = fft(fft(d).').'
figure(2); %建立图形窗口2
imshow(abs(D),[]); %显示图像d的傅里叶变换谱
Dc = fftshift(D);
figure(3);
imshow(abs(Dc),[]); %中心后结果
figure(4);
imshow(log(1+ abs(Dc)), []) %增强后观察fft
%逆变换
iF =ifft2(D);
figure(6), imshow(real(iF),[])
读入一副复杂图像,如:d = imread('rose_512.tif'),显然其fft结果; 这里图像名可以是matlab自带的例图(..\toolbox\images 目录下的),也可以是其它灰度图像,如是彩色图像,用rgb2gray转为灰度图像。
实验2. 已知一个1000×1000 二值图像,中间为一个50×30 的白色区域,其它为黑色,研究图像的DFT 的平移和旋转特性。
%实现图像平移特性代码
f=zeros(1000,1000);
f(350:649,475:524)=1;
subplot(2,2,1);imshow(f,'notruesize'); %图像定义
title('原始图像');
F=fftshift(abs(fft2(f)));
subplot(2,2,2);imshow(F,[-1,5],'notruesize');
title('原始图像的傅里叶变换频谱');
f=zeros(1000,1000);
f(350:649,800:849)=1;
subplot(2,2,3);imshow(f,'notruesize');
title('X轴方向移到后的图像');
F=fftshift(abs(fft2(f)));
subplot(2,2,4);imshow(F,[-1,5],'notruesize');
title('X轴方向移动后的傅里叶变换频谱');
%实现图像旋转特性代码
f=zeros(1000,1000);
f(350:649,475:524)=1;
subplot(2,2,1);imshow(f,'notruesize'); %图像定义
title('原始图像');
F=fftshift(abs(fft2(f)));
subplot(2,2,2);imshow(F,[-1,5],'notruesize');
title('原始图像的傅里叶变换频谱');
f=zeros(1000,1000);
f(350:649,475:524)=1;
f=imrotate(f,45,'bilinear','crop'); %以图像中心为原点旋转45°
subplot(2,2,3);imshow(f,'notruesize');
title('图像正向旋转45°');
F=fftshift(abs(fft2(f)));
subplot(2,2,4);imshow(F,[-1,5],'notruesize');
title('图像旋转45°后的傅里叶变换频谱');
通过MATLAB程序研究图像二维DFT变换的平移特性和旋转特性。
4.2. 图像的二维离散余弦变换
离散余弦变换(DCT)的变换核为余弦函数,计算速度快,有利于图像压缩和其他处理。在大多数情况下,DCT 主要用于图像的压缩操作中,静态图像压缩标准JPEG就是采用的DCT 变换。
MATLAB提供了dct2实现图像的DCT。dct2方法是基于FFT算法来实现较大输入的快速计算方法。MATLAB提供了idct2实现二维图像的逆余弦变换。
1. dct2 函数
实现图像的二维离散余弦变换,语法格式为:
B=dct2(A) 返回图像A 的二维离散余弦变换值,其大小与A相同,且各元素为离散余弦变换的系数F(k1,k2)。
B=dct2(A,m,n)
B=dct2(A,[m n])其功能是:在对图像A进行二维离散余弦变换之前,先将图像A补零至m×n。如果m和n 比图像A小,则进行变换之前,将图像A剪切。
2. idct2 函数
实现图像的二维离散余弦变换的反变换,语法格式为:
B=idct2(A)
B=idct2(A,m,n)
B=idct2(A,[m n])
3. dctmtx 函数
该函数用于计算二维离散余弦变换矩阵,其语法格式为:
D=dctmtx(n), 返回n×n 的DCT 变换矩阵。
实验3 例图的离散余弦变换及逆变换重建
clear all, close all
f=imread('cameraman.tif'); %读cameraman.tif