实验二 图像的频域变换

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

相关文档
最新文档