数字图像处理实验_

更新时间:2024-05-15 03:04:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

目 录

实验一 MATLAB数字图像处理初步 ............................................................. 1 实验二 图像的代数运算 ................................................................................... 7 实验三 图像增强—灰度变换 ......................................................................... 15 实验四 图像增强—直方图变换 ..................................................................... 17 实验五 图像增强—空域滤波 ......................................................................... 20 实验六 图像的傅立叶变换 ............................................................................. 23 实验七 图像增强—频域滤波 ......................................................................... 26 实验八 彩色图像处理 ..................................................................................... 29 实验九 图像分割 ............................................................................................. 33 实验十 形态学运算 ......................................................................................... 36 附 录 MATLAB简介 ................................................................................... 39

实验一 MATLAB数字图像处理初步

一、实验目的与要求

1.熟悉及掌握在MATLAB中能够处理哪些格式图像。 2.熟练掌握在MATLAB中如何读取图像。

3.掌握如何利用MATLAB来获取图像的大小、颜色、高度、宽度等等相关信息。

4.掌握如何在MATLAB中按照指定要求存储一幅图像的方法。 5.图像间如何转化。

二、实验原理

1、数字图像的表示和类别

一幅图像可以被定义为一个二维函数f(x,y),其中x和y是空间(平面)坐标,f 在任何坐标处(x,y)处的振幅称为图像在该点的亮度。灰度是用来表示黑白图像亮度的一个术语,而彩色图像是由单个二维图像组合形成的。例如,在RGB彩色系统中,一幅彩色图像是由三幅独立的分量图像(红、绿、蓝)组成的。因此,许多为黑白图像处理开发的技术适用于彩色图像处理,方法是分别处理三副独立的分量图像即可。

图像关于x和y坐标以及振幅连续。要将这样的一幅图像转化为数字形式,就要求数字化坐标和振幅。将坐标值数字化成为取样;将振幅数字化成为量化。采样和量化的过程如图1所示。因此,当f的x、y分量和振幅都是有限且离散的量时,称该图像为数字图像。

作为MATLAB基本数据类型的数值数组本身十分适于表达图像,矩阵的元素和图像的像素之间有着十分自然的对应关系。

1

图1 图像的采样和量化

根据图像数据矩阵解释方法的不同,MATLAB把其处理为4类:

? 亮度图像(Intensity images) ? 二值图像(Binary images) ? 索引图像(Indexed images) ? RGB图像(RGB images)

(1) 亮度图像

一幅亮度图像是一个数据矩阵,其归一化的取值表示亮度。若亮度图像的像素都是uint8类或uint16类,则它们的整数值范围分别是[0,255]和[0,65536]。若图像是double类,则像素取值就是浮点数。规定双精度型归一化亮度图像的取值范围是[0,1] (2) 二值图像

一幅二值图像是一个取值只有0和1的逻辑数组。而一幅取值只包含0和1的uint8类数组,在MATLAB中并不认为是二值图像。使用logical函数可以把数值数组转化为二值数组或逻辑数组。创建一个逻辑图像,其语法为:

B=logical(A) 其中,B是由0和1构成的数值数组。

要测试一个数组是否为逻辑数组,可以使用函数:

islogical(c)

若C是逻辑数组,则该函数返回1;否则,返回0。

2

(3) 索引图像

索引颜色通常也称为映射颜色,在这种模式下,颜色都是预先定义的,并且可供选用的一组颜色也很有限,索引颜色的图像最多只能显示256种颜色。

一幅索引颜色图像在图像文件里定义,当打开该文件时,构成该图像具体颜色的索引值就被读入程序里,然后根据索引值找到最终的颜色。 (4) RGB图像

一幅RGB图像就是彩色像素的一个M×N×3数组,其中每一个彩色相似点都是在特定空间位置的彩色图像相对应的红、绿、蓝三个分量。按照惯例,形成一幅RGB彩色图像的三个图像常称为红、绿或蓝分量图像。

令fR,fG和fB分别代表三种RGB分量图像。一幅RGB图像就利用cat(级联)操作将这些分量图像组合成彩色图像:

rgb_image=cat(3,fR,fG,fB) 在操作中,图像按顺序放置。

2、数据类和图像类型间的转化

表1中列出了MATLAB和IPT为表示像素所支持的各种数据类。表中的前8项称为数值数据类,第9项称为字符类,最后一项称为逻辑数据类。

工具箱中提供了执行必要缩放的函数(见表2)。以在图像类和类型间进行转化。

表1-1 MATLAB和IPT支持数据类型

名称 double uint8 uint16 uint32 int8 int16 int32 single char logical 描述 双精度浮点数,范围为 ?10308?10308无符号8比特整数,范围为[0 255] 无符号16比特整数,范围为[0 65536] 无符号32比特整数,范围为[0 4294967295] 有符号8比特整数,范围为[-128 127] 有符号16比特整数,范围为[-32768 32767] 有符号32比特整数,范围为[-2147483648 2147483647] 单精度浮点数,范围为 字符 值为0或1 3

?10308?10308

表1-2 格式转换函数

名称 im2uint8 im2uint16 mat2gray im2double im2bw 将输入转化为 uint8 uint16 double,范围为[0 1] double logical 有效的输入图像数据类 logical,uint8,uint16和doulbe logical,uint8,uint16和doulbe double logical,uint8,uint16和doulbe uint8,uint16和double

下面给出读取、压缩、显示一幅图像的程序(%后面的语句属于标记语

句,编程时可不用输入)

I=imread(‘原图像名.tif’); % 读入原图像,tif格式 whos I % 显示图像I的基本信息 imshow(I) % 显示图像

% 这种格式知识用于jpg格式,压缩存储图像,q是0-100之间的整数 imfinfo filename imwrite(I,'filename.jpg','quality',q);

imwrite(I,'filename.bmp'); % 以位图(BMP)的格式存储图像

% 显示多幅图像,其中n为图形窗口的号数 figure(n), imshow('I');

gg=im2bw('I'); % 将图像转为二值图像 figure, imshow(gg) % 显示二值图像

三、实验内容及步骤

1.利用imread( )函数读取一幅图像,假设其名为flower.tif,存入一个数组中;

2.利用whos 命令提取该读入图像flower.tif的基本信息; 3.利用imshow()函数来显示这幅图像;

4.利用imfinfo函数来获取图像文件的压缩,颜色等等其他的详细信息;

5.利用imwrite()函数来压缩这幅图象,将其保存为一幅压缩了像素的jpg文件,设为flower.jpg;语法:imwrite(原图像,新图像,‘quality’,q), q取0-100。

4

加50 减50

原图

加50 减50

图2.3 亮度增加与变暗

两幅图像的像素值相加时产生的结果很可能超过图像数据类型所支持的最大值,尤其对于uint8类型的图像,溢出情况最为常见。当数据值发生溢出时,imadd函数将数据截取为数据类型所支持的最大值,这种截取效果称之为饱和。为了避免出现饱和现象,在进行加法计算前最好将图像转换为一种数据范围较宽的数据类型。例如,在加法操作前将uint8图像转换为uint16类型。

2.图像的减法运算

图像减法也称为差分方法,是一种常用于检测图像变化及运动物体的图像处理方法。图像减法可以作为许多图像处理工作的准备步骤。例如,可

10

以使用图像减法来检测一系列相同场景图像的差异。图像减法与阈值化处理的综合使用往往是建立机器视觉系统最有效的方法之一。在利用图像减法处理图像时往往需要考虑背景的更新机制,尽量补偿由于天气、光照等因素对图像显示效果造成的影响。

在MATLAB中,使用imsubtract函数可以将一幅图像从另一幅图像中减去,或者从一幅图像中减去一个常数。imsubtract函数将一幅输入图像的像素值从另一幅输入图像相应的像素值中减去,再将这个结果作为输出图像相应的像素值。imsubtract函数的调用格式如下:

Z = imsubtract(X,Y);

其中,Z是X-Y操作的结果。以下代码首先根据原始图像(如图2.4(a)所示)生成其背景亮度图像,然后再从原始图像中将背景亮度图像减去,从而生成图2.4(b)所示的图像:

rice = imread(‘rice.tif’);

background =imopen(rice, strel(‘disk’,15)); rice2 = imsubtract(rice, background); subplot(1,2,1);imshow(rice); subplot(1,2,2);imshow(rice2);

图2.4 原始图像、减去背景图像

式中的Y替换为一个指定的常数值,例如:

Z = imsubtract(I,50);

如果希望从图像数据I的每一个像素减去一个常数,可以将上述调用格

减法操作有时会导致某些像素值变为一个负数,对于uint8或uint16类型的数据,如果发生这种情况,那么imsubtract函数自动将这些负数截取为0。为了避免差值产生负值,同时避免像素值运算结果之间产生差异,可以调用函数imabsdiff。imabsdiff将计算两幅图像相应像素差值的绝对值,因而返回结果不会产生负数。该函数的调用格式与imsubtract函数类似。

11

3. 图像的乘法运算

两幅图像进行乘法运算可以实现掩模操作,即屏蔽掉图像的某些部分。一幅图像乘以一个常数通常被称为缩放,这是一种常见的图像处理操作。如果使用的缩放因子大于1,那么将增强图像的亮度,如果因子小于1则会使图像变暗。缩放通常将产生比简单添加像素偏移量自然得多的明暗效果,这是因为这种操作能够更好地维持图像的相关对比度。此外,由于时域的卷积或相关运算与频域的乘积运算对应,因此乘法运算有时也被作为一种技巧来实现卷积或相关处理。

在MATLAB中,使用immultiply函数实现两幅图像的乘法。immultiply函数将两幅图像相应的像素值进行元素对元素的乘法操作(MATLAB点乘),并将乘法的运算结果作为输出图形相应的像素值。immulitply函数的调用格式如下:

Z = immulitply(X,Y)

其中,Z=X*Y。例如,以下代码将使用给定的缩放因子对图2.5(a)所示的图像进行缩放,从而得到如图2.5(b)所示的较为明亮的图像:

I = imread(‘moon.tif’); J = immultiply(I,1.2); subplot(1,2,1);imshow(I); subplot(1,2,2);imshow(J);

图2.5 原图和乘以因子1.5 的图像

uint8图像的乘法操作一般都会发生溢出现象。Immultiply函数将溢出的数据截取为数据类型的最大值。为了避免产生溢出现象,可以在执行乘法操作之前将uint8图像转换为一种数据范围较大的图像类型,例如uint16。

4.图像的除法运算

除法运算可用于校正成像设备的非线性影响,这在特殊形态的图像(如断层扫描等医学图像)处理中常常用到。图像除法也可以用来检测两幅图像间的区别,但是除法操作给出的是相应像素值的变化比率,而不是每个像素

12

的绝对差异,因而图像除法也称为比率变换。

在MATLAB中使用imdivide函数进行两幅图像的除法。imdivide函数对两幅输入图像的所有相应像素执行元素对元素的除法操作(点除),并将得到的结果作为输出图像的相应像素值。imdivide函数的调用格式如下:

Z = imdivide(X,Y)

其中,Z=X/Y。例如,以下代码将图4所示的两幅图像进行除法运算,请将这个结果和减法操作的结果相比较,对比它们之间的不同之处:

Rice = imread(‘rice.tif’); I = double(rice); J= I * 0.43 + 90; Rice2 = uint8(J); Ip = imdivide(rice, rice2); Imshow(Ip, []);

除法操作的结果如图2.6所示。

图2.6 原图和减背景后的图像相除的图像效果

5.图像的四则代数运算

可以综合使用多种图像代数运算函数来完成一系列的操作。例如,使用以下语句计算两幅图像的平均值:

I = imread(‘rice.tif’); I2 = imread(‘cameraman.tif’); K = imdivide(imadd(I,I2),2);

建议最好不要用这种方式进行图像操作,这是因为,对于uint8或uint16数据,每一个算术函数在将其输出结果传递给下一项操作之前都要进行数据截取,这个截取过程将会大大减少输出图像的信息量。执行图像四则运算操作较好的一个办法就是使用函数imlincomb。函数imlincomb按照双精度执行

13

所有代数运算操作,而且仅对最好的输出结果进行截取,该函数的调用格式如下:

Z = imlincomb(A,X,B,Y,C);

其中,Z=A*X+B*Y+C。MATLAB会自动根据输入参数的个数判断需要进行的运算。例如,以下语句将计算Z=A*X+C:

Z = imlincomb(A,X,C)

而以下语句将计算Z=A*X+B*Y: Z = imlincomb(A,X,B,Y,) 四、 实验报告要求

1 描述实验的基本步骤,用数据和图片给出各个步骤中取得的实验结果并进行必要的讨论。

2 必须包括原始图像及其计算处理后的图像以及相应的解释。

五、 思考题

由图像算术运算的运算结果,思考图像减法运算在什么场合上发挥优势?

14

实验五 图像增强—空域滤波

一、 实验目的

进一步了解MatLab软件/语言,学会使用MatLab对图像作滤波处理,使学生有机会掌握滤波算法,体会滤波效果。

了解几种不同滤波方式的使用和使用的场合,培养处理实际图像的能力,并为课堂教学提供配套的实践机会。

二、实验要求

(1)学生应当完成对于给定图像+噪声,使用平均滤波器、中值滤波器对不同强度的高斯噪声和椒盐噪声,进行滤波处理;能够正确地评价处理的结果;能够从理论上作出合理的解释。

(2)利用MATLAB软件实现空域滤波的程序:

I=imread('electric.tif');

J = imnoise(I,'gauss',0.02); %添加高斯噪声

J = imnoise(I,'salt & pepper',0.02); (注意空格) %添加椒盐噪声 ave1=fspecial('average',3); %产生3×3的均值模版 ave2=fspecial('average',5); %产生5×5的均值模版 K = filter2(ave1,J)/255; %均值滤波3×3 L = filter2(ave2,J)/255; %均值滤波5×5 M = medfilt2(J,[3 3]); %中值滤波3×3模板 N = medfilt2(J,[4 4]); %中值滤波4×4模板 imshow(I); figure,imshow(J); figure,imshow(K); figure,imshow(L); figure,imshow(M); figure,imshow(N);

三、实验设备与软件

(1) IBM-PC计算机系统

20

(2) MatLab软件/语言包括图像处理工具箱(Image Processing Toolbox) (3) 实验所需要的图片

四、实验内容与步骤

a) 调入并显示原始图像Sample2-1.jpg 。

b) 利用imnoise 命令在图像Sample2-1.jpg 上加入高斯(gaussian) 噪声 c)利用预定义函数fspecial 命令产生平均(average)滤波器

??1?1?1???19?1?????1?1?1?? ?d)分别采用3x3和5x5的模板,分别用平均滤波器以及中值滤波器,对加入噪声的图像进行处理并观察不同噪声水平下,上述滤波器处理的结果;

e)选择不同大小的模板,对加入某一固定噪声水平噪声的图像进行处理,观察上述滤波器处理的结果。

f)利用imnoise 命令在图像Sample2-1.jpg 上加入椒盐噪声(salt & pepper)

g)重复c)~ e)的步骤 h)输出全部结果并进行讨论。

五、思考题/问答题

(1) 简述高斯噪声和椒盐噪声的特点。

(2) 结合实验内容,定性评价平均滤波器/中值滤波器对高斯噪声和椒盐噪声的去噪效果?

(3) 结合实验内容,定性评价滤波窗口对去噪效果的影响?

六、实验报告要求

描述实验的基本步骤,用数据和图片给出各个步骤中取得的实验结果,并进行必要的讨论,必须包括原始图像及其计算/处理后的图像。

七、实验图像

21

electric.tif(原始图像)

22

实验六 图像的傅立叶变换

一、 实验目的

1了解图像变换的意义和手段; 2熟悉傅立叶变换的基本性质; 3熟练掌握FFT变换方法及应用; 4通过实验了解二维频谱的分布特点;

5通过本实验掌握利用MATLAB编程实现数字图像的傅立叶变换。 6评价人眼对图像幅频特性和相频特性的敏感度。

二、 实验原理

1 应用傅立叶变换进行图像处理

傅里叶变换是线性系统分析的一个有力工具,它能够定量地分析诸如数字化系统、采样点、电子放大器、卷积滤波器、噪音和显示点等的作用。通过实验培养这项技能,将有助于解决大多数图像处理问题。对任何想在工作中有效应用数字图像处理技术的人来说,把时间用在学习和掌握博里叶变换上是很有必要的。

2 傅立叶(Fourier)变换的定义

对于二维信号,二维Fourier变换定义为:

??F(u,v)?逆变换:

??????f(x,y)e?j2?(ux?uy)dxdy

??f(x,y)?二维离散傅立叶变换为:

??????F(u,v)ej2?(ux?uy)dudv

ik?j2?(m?n)1N?1N?1NN F(m,n)???f(i,k)eNi?0k?023

逆变换:

1f(i,k)?Nm?0n?0??F(m,n)eN?1N?1j2?(mik?n)NN

图像的傅立叶变换与一维信号的傅立叶变换变换一样,有快速算法,具体参见参考书目,有关傅立叶变换的快速算法的程序不难找到。实际上,现在有实现傅立叶变换的芯片,可以实时实现傅立叶变换。

3利用MATLAB软件实现数字图像傅立叶变换的程序: I=imread(‘原图像名.gif’); %读入原图像文件 imshow(I); %显示原图像

fftI=fft2(I); %二维离散傅立叶变换 sfftI=fftshift(fftI); %直流分量移到频谱中心 RR=real(sfftI); %取傅立叶变换的实部 II=imag(sfftI); %取傅立叶变换的虚部 A=sqrt(RR.^2+II.^2); %计算频谱幅值

A=(A-min(min(A)))/(max(max(A))-min(min(A)))*225 %归一化 figure; %设定窗口

imshow(A); %显示原图像的频谱

三、 实验步骤

1.将图像内容读入内存;

2.用Fourier变换算法,对图像作二维Fourier变换; 3.将其幅度谱进行搬移,在图像中心显示; 4.用Fourier系数的幅度进行Fourier反变换; 5.用Fourier系数的相位进行Fourier反变换;

6.比较4、5的结果,评价人眼对图像幅频特性和相频特性的敏感度。 7.记录和整理实验报告。

四、 实验仪器

1.计算机;

24

2 .MATLAB程序;

3.移动式存储器(软盘、U盘等)。 4.记录用的笔、纸。

五、 实验报告内容

1.叙述实验过程;

2.提交实验的原始图像和结果图像。

六、 思考题

1.傅里叶变换有哪些重要的性质?

2.图像的二维频谱在显示和处理时应注意什么?

七、实验图片

number.tif

25

实验七 图像增强—频域滤波

一、 实验目的

1.掌握怎样利用傅立叶变换进行频域滤波 2.掌握频域滤波的概念及方法 3.熟练掌握频域空间的各类滤波器 4.利用MATLAB程序进行频域滤波

二、 实验原理及知识点

频域滤波分为低通滤波和高通滤波两类,对应的滤波器分别为低通滤波器和高通滤波器。频域低通过滤的基本思想:

G(u,v)=F(u,v)H(u,v)

F(u,v)是需要钝化图像的傅立叶变换形式,H(u,v)是选取的一个低通过滤器变换函数,G(u,v)是通过H(u,v)减少F(u,v)的高频部分来得到的结果,运用傅立叶逆变换得到钝化后的图像。

理想地通滤波器(ILPF)具有传递函数:

?1ifD(u,v)?D0 H(u,v)???0ifD(u,v)?D0其中,D0为指定的非负数,D(u,v)为(u,v)到滤波器的中心的距离。

D(u,v)?D0的点的轨迹为一个圆。

n阶巴特沃兹低通滤波器(BLPF)(在距离原点D0处出现截至频率)的传递函数为H(u,v)?11?[D(u,v)D0]2n

与理想地通滤波器不同的是,巴特沃兹率通滤波器的传递函数并不是在

D0处突然不连续。

高斯低通滤波器(GLPF)的传递函数为

H(u,v)?eD2(u,v)2?2其中,?为标准差。

26

相应的高通滤波器也包括:理想高通滤波器、n阶巴特沃兹高通滤波器、高斯高通滤波器。给定一个低通滤波器的传递函数Hlp(u,v),通过使用如下的简单关系,可以获得相应高通滤波器的传递函数:Hhp?1?Hlp(u,v)

利用MATLAB实现频域滤波的程序

f=imread('room.tif');

F=fft2(f); %对图像进行傅立叶变换

%对变换后图像进行队数变化,并对其坐标平移,使其中心化 S=fftshift(log(1+abs(F)));

S=gscale(S); %将频谱图像标度在0-256的范围内 imshow(S) %显示频谱图像 h=fspecial('sobel'); %产生空间‘sobel’模版 freqz2(h) %查看相应频域滤波器的图像 PQ=paddedsize(size(f)); %产生滤波时所需大小的矩阵 H=freqz2(h,PQ(1),PQ(2)); %产生频域中的‘sobel’滤波器

H1=ifftshift(H); %重排数据序列,使得原点位于频率矩阵的左上角 imshow(abs(H),[]) %以图形形式显示滤波器 figure,imshow(abs(H1),[])

gs=imfilter(double(f),h); %用模版h进行空域滤波 gf=dftfilt(f,H1); %用滤波器对图像进行频域滤波 figure,imshow(gs,[]) figure,imshow(gf,[]) figure,imshow(abs(gs),[]) figure,imshow(abs(gf),[])

f=imread('number.tif'); %读取图片

PQ=paddedsize(size(f)); %产生滤波时所需大小的矩阵 D0=0.05*PQ(1); %设定高斯高通滤波器的阈值

H=hpfilter('gaussian',PQ(1),PQ(2),D0); %产生高斯高通滤波器 g=dftfilt(f,H); %对图像进行滤波 figure,imshow(f) %显示原图像 figure,imshow(g,[]) %显示滤波后图像

三、 实验步骤:

1.调入并显示所需的图片;

2.利用MATLAB提供的低通滤波器实现图像信号的滤波运算,并与

27

空间滤 波进行比较。

3.利用MATLAB提供的高通滤波器对图像进行处理。 4.记录和整理实验报告。

四、实验仪器

1.计算机; 2.MATLAB程序;

3.移动式存储器(软盘、U盘等)。 4.记录用的笔、纸。

五、实验报告内容

1.叙述实验过程;

2.提交实验的原始图像和结果图像。

六、实验报告要求

描述实验的基本步骤,用数据和图片给出各个步骤中取得的实验结果,

并进行必要的讨论,必须包括原始图像及其计算/处理后的图像。

七、思考题

1.结合实验,评价频域滤波有哪些优点? 2.在频域滤波过程中需要注意哪些事项?

八、实验图片

room.tif number.tif

28

实验八 彩色图像处理

一、实验目的

", 使用MatLab 软件对图像进行彩色处理。使学生通过实验熟悉使用

MatLab软件进行图像彩色处理的有关方法,并体会到图像彩色处理技术以及对图像处理的效果。

二、实验要求

",要求学生能够完成彩色图像的分析,能正确讨论彩色图像的亮度、色调

等性质;会对彩色图像进行直方图均衡,并能正确解释均衡处理后的结果;能够对单色图像进行伪彩色处理、利用多波长图像进行假彩色合成、进行单色图像的彩色变换。

三、实验内容与步骤

(1) 彩色图像的分析

", 调入并显示彩色图像flower1.tif ; ", 拆分这幅图像,并分别显示其R,G,B分量;

", 根据各个分量图像的情况讨论该彩色图像的亮度、色调等性质。 (2) 彩色图像的直方图均衡 ", 接内容(1);

", 显示这幅图像的R,G,B分量的直方图,分别进行直方图均衡处理,并显示均衡后的直方图和直方图均衡处理后的各分量; ", 将处理完毕的各个分量合成彩色图像并显示其结果; ", 观察处理前后图像的彩色、亮度、色调等性质的变化。 (3) 假彩色处理

", 调入并显示红色可见光的灰度图像vl_red.jpg、绿色可见光的灰度图像vl_green.jpg和蓝色可见光的灰度图像vl_blue.jpg;以及近红外灰度图像infer_near.jpg和中红外灰度图像infer_mid.jpg;

", 以图像vl_red.jpg为R;图像vl_green.jpg为G;图像vl_blue.jpg为B,将这三幅图像组合成可见光RGB彩色图像;

", 分别以近红外图像infer_near.jpg和中红外图像infer_mid替换R分量,

29

本文来源:https://www.bwwdw.com/article/qn07.html

Top