数字图象处理实验要求应用MATLAB语言实现.docx
- 文档编号:2803326
- 上传时间:2023-05-04
- 格式:DOCX
- 页数:16
- 大小:163.79KB
数字图象处理实验要求应用MATLAB语言实现.docx
《数字图象处理实验要求应用MATLAB语言实现.docx》由会员分享,可在线阅读,更多相关《数字图象处理实验要求应用MATLAB语言实现.docx(16页珍藏版)》请在冰点文库上搜索。
数字图象处理实验要求应用MATLAB语言实现
数字图象处理实验要求(应用MATLAB语言实现)
实验一数字图象的读取与灰度直方图
一、实验目的
1、初步了解与掌握MATLAB语言的基本用法;
2、掌握MATLAB语言中图象数据与信息的读取方法;
3、掌握在MATLAB中绘制灰度直方图的方法,了解灰度直方图的均衡化的方法。
二、实验原理
MATLAB是集数值计算,符号运算及图形处理等强大功能于一体的科学计算语言。
作为强大的科学计算平台,它几乎能够满足所有的计算需求。
MATLAB软件具有很强的开放性和适用性。
在保持内核不便的情况下,MATLAB可以针对不同的应用学科推出相应的工具箱(toolbox)。
目前,MATLAB已经把工具箱延伸到了科学研究和工程应用的诸多领域,诸如数据采集、概率统计、信号处理、图像处理和物理仿真等,都在工具箱(Toolbox)家族中有自己的一席之地。
在实验中我们主要用到MATLAB提供图象处理工具箱(ImageProcessingToolbox)。
1、MATLAB与数字图像处理
MATLAB全称是MatrixLaboratory(矩阵实验室),一开始它是一种专门用于矩阵数值计算的软件,从这一点上也可以看出,它在矩阵运算上有自己独特的特点。
实际上MATLAB中的绝大多数的运算都是通过矩阵这一形式进行的。
这一特点也就决定了MATLAB在处理数字图像上的独特优势。
理论上讲,图像是一种二维的连续函数,然而在计算机上对图像进行数字处理的时候,首先必须对其在空间和亮度上进行数字化,这就是图像的采样和量化的过程。
二维图像进行均匀采样,就可以得到一幅离散化成M×N样本的数字图像,该数字图像是一个整数阵列,因而用矩阵来描述该数字图像是最直观最简便的了。
而MATLAB的长处就是处理矩阵运算,因此用MATLAB处理数字图像非常的方便。
MATLAB支持五种图像类型,即索引图像、灰度图像、二值图像、RGB图像和多帧图像阵列;支持BMP、GIF、HDF、JPEG、PCX、PNG、TIFF、XWD、CUR、ICO等图像文件格式的读,写和显示。
MATLAB对图像的处理功能主要集中在它的图像处理工具箱(ImageProcessingToolbox)中。
图像处理工具箱是由一系列支持图像处理操作的函数组成,可以进行诸如几何操作、线性滤波和滤波器设计、图像变换、图像分析与图像增强、二值图像操作以及形态学处理等图像处理操作。
2、MATLAB语言的基本操作
MATLAB语言是一种运算纸型的运算语言,其特点就是与平时在运算纸上书写运算的形式相同,这使得它成为一种比较容易掌握的语言;其变量均以矩阵向量形式表示(单独一个数据可以认为是一维向量);其程序语法类似于C语言,只要有一点C语言基础的人可以很快掌握。
针对数字图象处理的需要,可以重点掌握以下几个内容:
矩阵、向量的输入和操作(包括如何输入一个矩阵,如何产生一个全零全一的矩阵,如何对一个矩阵的行列元素进行读取、写入);矩阵与向量的基本运算(包括加、减、点乘等)
主要介绍一下如何读取矩阵的指定行或指定列,举例说明:
x=4:
6%产生一个一维数组,范围从4到6,步长为1
x=
456
插入:
通过对x进行插入运算创建矩阵A
>>A=[x-3;x;x+3]%当然也可以用别的方法产生A矩阵此处只作为示例
A=
123
456
789
提取:
提取A的前两行和后两列形成矩阵C。
>>C=A(1:
2,2:
3)
C=
23
56
置零:
将矩阵A的第二行第二列的元素置零
>>A(2,2)=0
A=
123
406
789
将矩阵A的第一列全置1
A(:
1)=1
A=
123
106
189
强调一下矩阵的乘法与矩阵的点乘的不同,举例说明:
A=eye
(2)%产生二维单位矩阵
A=
10
01
>>B=[1,2;3,4]%直接法输入矩阵
B=
12
34
>>A+B%求A与B的和(符合矩阵求和原则)
ans=
22
35
>>A.*B%求A与B的点积(即两矩阵中对应元素分别相乘
ans=
10
04
>>A*B%求A与B的乘积(符合矩阵乘积原则A的列数与B的行数相等)
ans=
12
34
其他的一些用法请参考教科书。
注意:
由于实验室的管理规定所有的程序不能存在C盘和D盘,因此请大家在E盘建一个目录(matlab),在每次启动时都要将这个目录加入到MATLAB的搜索路径中,添加的方法为File----SetPath----Tool---AddPath
3、MATLAB中图象数据的读取
A、imread
imread函数用于读入各种图象文件,其一般的用法为
[X,MAP]=imread(‘filename’,‘fmt’)
其中,X,MAP分别为读出的图象数据和颜色表数据,fmt为图象的格式,filename为读取的图象文件(可以加上文件的路径)。
例:
[X,MAP]=imread(’flowers.tif’,’tif’);
B、imwrite
imwrite函数用于输出图象,其语法格式为:
imwrite(X,map,filename,fmt)
imwrite(X,map,filename,fmt)按照fmt指定的格式将图象数据矩阵X和调色板map写入文件filename。
C、imfinfo
imfinfo函数用于读取图象文件的有关信息,其语法格式为
imfinfo(filename,fmt)
imfinfo函数返回一个结构info,它反映了该图象的各方面信息,其主要数据包括:
文件名(路径)、文件格式、文件格式版本号、文件的修改时间、文件的大小、文件的长度、文件的宽度、每个像素的位数、图象的类型等。
例:
imfinfo('rice.tif')
ans=
Filename:
'D:
\MATLAB6p1\toolbox\images\imdemos\rice.tif'
FileModDate:
'26-Oct-199606:
11:
58'
FileSize:
65966
Format:
'tif'
FormatVersion:
[]
Width:
256
Height:
256
BitDepth:
8
ColorType:
'grayscale'
FormatSignature:
[7373420]
ByteOrder:
'little-endian'
NewSubfileType:
0
BitsPerSample:
8
Compression:
'Uncompressed'
PhotometricInterpretation:
'BlackIsZero'
StripOffsets:
[8x1double]
SamplesPerPixel:
1
RowsPerStrip:
32
StripByteCounts:
[8x1double]
XResolution:
72
YResolution:
72
ResolutionUnit:
'Inch'
Colormap:
[]
PlanarConfiguration:
'Chunky'
TileWidth:
[]
TileLength:
[]
TileOffsets:
[]
TileByteCounts:
[]
Orientation:
1
FillOrder:
1
GrayResponseUnit:
0.0100
MaxSampleValue:
255
MinSampleValue:
0
Thresholding:
1
ImageDescription:
[1x166char]
4、MATLAB中图象文件的显示
imshow
imshow函数是最常用的显示各种图象的函数,其语法如下:
imshow(X,map)
其中X是图象数据矩阵,map是其对应的颜色矩阵,若进行图象处理后不知道图象数据的值域可以用[]代替map。
需要显示多幅图象时,可以使用figure语句,它的功能就是重新打开一个图象显示窗口。
例:
I=imread(‘rice.tif’);
Imshow(I);
J=imread(‘flowers.tif’);
figure,imshow(J);
5、MATLAB中灰度直方图的显示
MATLAB图象处理工具箱提供了imhist函数来计算和显示图象的直方图,imhist函数的语法格式为:
imhist(I,n)
imhist(X,map)
其中imhist(I,n)计算和显示灰度图象I的直方图,n为指定的灰度级数目,默认值为256。
imhist(X,map)计算和显示索引色图象X的直方图,map为调色板。
例:
I=imread('rice.tif');
imshow(I)
figure,imhist(I)
6、对比度增强
如果原图象f(x,y)的灰度范围是[m,M],我们希望调整后的图象g(x,y)的灰度范围是[n,N],那么下述变换,
,就可以实现这一要求。
MATLAB图象处理工具箱中提供的imadjust函数,可以实现上述的线性变换对比度增强。
Imadjust函数的语法格式为:
J=imadjust(I,[low_inhigh_in],[low_outhigh_out])
J=imadjust(I,[low_inhigh_in],[low_outhigh_out])返回图象I经过直方图调整后的图象J,[low_inhigh_in]为原图象中要变换的灰度范围,[low_outhigh_out]指定了变换后的灰度范围。
其详细的用法可参见《计算机图象处理与识别技术》。
例:
I=imread('pout.tif');
J=imadjust(I,[0.30.7],[]);
imshow(I),figure,imshow(J)
三、实验要求
1、用MATLAB在自建的文件夹中建立example1.m文件,在这个文件的程序中,将MATLAB目录下work文件夹中的girl.bmp图象文件读出,用到imread,imfinfo等文件,观察一下图象数据,了解一下数字图象在MATLAB中的处理就是处理一个矩阵。
将这个图象显示出来(用imshow),尝试修改map颜色矩阵的值,再将图象显示出来,观察图象颜色的变化。
(用figure函数再打开一个图象对话框)
2、用MATLAB在自建的文件夹中建立example2.m文件,在这个文件的程序中,将MATLAB目录下work文件夹中的girl2.bmp图象文件读出,显示它的图象及灰度直方图,可以发现其灰度值集中在一段区域,用imadjust函数将它的灰度值调整到[0,1]之间,并观察调整后的图象与原图象的差别,调整后的灰度直方图与原灰度直方图的区别。
实验二傅立叶变换及图象的频域处理
一、实验目的
1、了解离散傅立叶变换的基本原理;
2、掌握应用MATLAB语言进行FFT及逆变换的方法;
3、了解图象在频域中处理方法,应用MATLAB语言作简单的低通滤波器。
二、实验原理
1、傅立叶变换的基本知识。
在图象处理的广泛应用领域中,傅立叶变换起着非常重要的作用,具体表现在包括图象分析、图象增强及图象压缩等方面。
假设f(x,y)是一个离散空间中的二维函数,则该函数的二维傅立叶变换的定义如下:
p=0,1…M-1q=0,1…N-1
(1)
或
p=0,1…M-1q=0,1…N-1
(2)
离散傅立叶反变换的定义如下:
m=0,1…M-1n=0,1…N-1(3)
F(p,q)称为f(m,n)的离散傅立叶变换系数。
这个式子表明,函数f(m,n)可以用无数个不同频率的复指数信号和表示,而在频率(w1,w2)处的复指数信号的幅度和相位是F(w1,w2)。
例如,函数f(m,n)在一个矩形区域内函数值为1,而在其他区域为0,如图所示。
为了简便起见,假设f(m,n)为一个连续函数,则f(m,n)的傅立叶变换的幅度值(即
)显示为网格图,如图所示。
将傅立叶变换的结果进行可视化的另一种方法是用图象的方式显示变换结果的对数幅值
,如图所示。
几种简单函数的傅立叶变换的频谱可以直观的表示为图所示的样子。
2、MATLAB提供的快速傅立叶变换函数
(1)fft2
fft2函数用于计算二维快速傅立叶变换,其语法格式为:
B=fft2(I)
B=fft2(I)返回图象I的二维fft变换矩阵,输入图象I和输出图象B大小相同。
例如,计算图象的二维傅立叶变换,并显示其幅值的结果,如图所示,其命令格式如下
loadimdemossaturn2
imshow(saturn2)
B=fftshift(fft2(saturn2));
imshow(log(abs(B)),[],'notruesize')
(2)fftshift
MATLAB提供的fftshift函数用于将变换后的图象频谱中心从矩阵的原点移到矩阵的中心,其语法格式为:
B=fftshift(I)
对于矩阵I,B=fftshift(I)将I的一、三象限和二、四象限进行互换。
(2)ifft2
ifft2函数用于计算图象的二维傅立叶反变换,其语法格式为:
B=ifftn(I)
B=ifftn(A)返回图象I的二维傅立叶反变换矩阵,输入图象I和输出图象B大小相同。
其语法格式含义与fft2函数的语法格式相同,可以参考fft2函数的说明。
3、简单低通滤波器的设计
一个图象经过傅立叶变换后,就从空域变到了频域,因此我们可以用信号处理中对于频域信号的处理方法对一幅图象进行处理。
比如对图象进行低通滤波等。
一个二维的理想低通滤波器(ILPF),它的传递函数由下式确定:
若
(4)
0若
式中D0是一个规定的非负的量,称为截止频率,虽然在计算机中必定能够模拟一个锐截止频率的理想低通滤波器,但它们不能用电子元件来实现。
实际中比较常用的低通滤波器有:
巴特沃思(Butterworth)滤波器、指数滤波器(ELPF)、梯形低通滤波器等。
在实验中我们设计一个理想的低通滤波器。
设计理想的低通滤波器由其定义可知只要设计一个与频域图象大小完全相同的矩阵。
在某一个域值内该矩阵的值为1,其余为0即可。
例:
若图象的大小为128*128,则可以这样设计一个低通滤波器:
H=zeros(128);
H(32:
96,32:
96)=1;%此处的范围是人为取定的,可以根据需要更改。
若图象矩阵I的傅立叶变换是B(已经用fftshift将频谱中心移至矩阵的中心),则对这幅图象做低通滤波,再做傅立叶逆变换命令为
LOWPASS=B.*H;%此处设变换后的矩阵为LOWPASS,另注意这儿是矩阵的点乘。
C=ifft2(LOWPASS);
Imshow(abs(C))
三、实验要求
1、读取图象girl.bmp,显示这幅图象,对图象作傅立叶变换,显示频域振幅图象。
作傅立叶逆变换,显示图象,看是否与原图象相同。
2、设计一个低通滤波器,截止频率自选,对图象作低通滤波,再作反变换,观察不同的截止频率下反变换后的图象与原图象的区别。
3、选做:
显示一幅频域图象的相位分布图,分别对振幅分布和相位分布作傅立叶逆变换,观察两幅图象,体会频域图象中振幅与位相的作用。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数字图象处理 实验 要求 应用 MATLAB 语言 实现