数字图像处理实验 -

更新时间:2024-03-19 04:23: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

6.同样利用imwrite()函数将最初读入的tif图象另存为一幅bmp图像,设为flower.bmp。

7.用imread()读入图像:Lenna.jpg 和camema.jpg; 8.用imfinfo()获取图像Lenna.jpg和camema.jpg 的大小;

9.用figure,imshow()分别将Lenna.jpg和camema.jpg显示出来,观察两幅图像的质量。

10.用im2bw将一幅灰度图像转化为二值图像,并且用imshow显示出来观察图像的特征。

11.将每一步的函数执行语句拷贝下来,写入实验报告,并且将得到第3、9、10步得到的图像效果拷贝下来。

四、考核要点

1、熟悉在MATLAB中如何读入图像、如何获取图像文件的相关信息、如何显示图像及保存图像等,熟悉相关的处理函数。

2、明确不同的图像文件格式,由于其具体的图像存储方式不同,所以文件的大小不同,因此当对同一幅图像来说,有相同的文件大小时,质量不同。

五、实验仪器与软件

(1) PC计算机

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

六、实验报告要求

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

七、思考题

(1) 简述MatLab软件的特点。

(2) MatLab软件可以支持哪些图像文件格式?

(3) 说明函数imread 的用途格式以及各种格式所得到图像的性质。

5

(4) 为什么用I = imread(‘lena.bmp’) 命令得到的图像I 不可以进行算术运算?

八、实验图像

Fig.1 flower.jpg Fig.3 Lenna.jpg

Fig.2 elephant.jpg

Fig.4 camema.jpg

6

实验二 图像的代数运算

一、 实验目的

1.了解图像的算术运算在数字图像处理中的初步应用。 2.体会图像算术运算处理的过程和处理前后图像的变化。

二、 实验原理

图像的代数运算是图像的标准算术操作的实现方法,是两幅输入图像之间进行的点对点的加、减、乘、除运算后得到输出图像的过程。如果输入图像为A(x,y)和B(x,y),输出图像为C(x,y),则图像的代数运算有如下四种形式:

C(x,y) = A(x,y) + B(x,y) C(x,y) = A(x,y) - B(x,y) C(x,y) = A(x,y) * B(x,y) C(x,y) = A(x,y) / B(x,y)

图像的代数运算在图像处理中有着广泛的应用,它除了可以实现自身所需的算术操作,还能为许多复杂的图像处理提供准备。例如,图像减法就可以用来检测同一场景或物体生产的两幅或多幅图像的误差。

使用MATLAB的基本算术符(+、-、*、/ 等)可以执行图像的算术操作,但是在此之前必须将图像转换为适合进行基本操作的双精度类型。为了更方便地对图像进行操作,MATLAB图像处理工具箱包含了一个能够实现所有非稀疏数值数据的算术操作的函数集合。下表列举了所有图像处理工具箱中的图像代数运算函数。

7

表2-1 图像处理工具箱中的代数运算函数

函数名 Imabsdiff Imadd Imcomplement Imdivide Imlincomb Immultiply imsubtract 两幅图像的加法 补足一幅图像 两幅图像的除法 功能描述 两幅图像的绝对差值 计算两幅图像的线性组合 两幅图像的乘法 两幅图像的减法 使用图像处理工具箱中的图像代数运算函数无需再进行数据类型间的转换,这些函数能够接受uint8和uint16数据,并返回相同格式的图像结果。虽然在函数执行过程中元素是以双精度进行计算的,但是MATLAB工作平台并不会将图像转换为双精度类型。

代数运算的结果很容易超出数据类型允许的范围。例如,uint8数据能够存储的最大数值是255,各种代数运算尤其是乘法运算的结果很容易超过这个数值,有时代数操作(主要是除法运算)也会产生不能用整数描述的分数结果。图像的代数运算函数使用以下截取规则使运算结果符合数据范围的要求:超出数据范围的整型数据将被截取为数据范围的极值,分数结果将被四舍五入。例如,如果数据类型是uint8,那么大于255的结果(包括无穷大inf)将被设置为255。

注意:无论进行哪一种代数运算都要保证两幅输入图像的大小相等,且类型相同。

三、 实验步骤

1.图像的加法运算

图像相加一般用于对同一场景的多幅图像求平均效果,以便有效地降低具有叠加性质的随机噪声。直接采集的图像品质一般都较好,不需要进行加法运算处理,但是对于那些经过长距离模拟通讯方式传送的图像(如卫星图像),这种处理是必不可少的。

在MATLAB中,如果要进行两幅图像的加法,或者给一幅图像加上一个常数,可以调用imadd函数来实现。imadd函数将某一幅输入图像的每一个像素值与另一幅图像相应的像素值相加,返回相应的像素值之和作为输出图像。imadd函数的调用格式如下:

8

Z = imadd(X,Y)

其中,X和Y表示需要相加的两幅图像,返回值Z表示得到的加法操作结果。 图像加法在图像处理中应用非常广泛。例如,以下代码使用加法操作将图2.1中的(a)、(b)两幅图像叠加在一起:

I=imread('flower1.jpg'); subplot(1,3,1);imshow(I); J=imread('flower2.jpg'); subplot(1,3,2);imshow(J); k=imadd(I,J);

subplot(1,3,3);imshow(k)

叠加结果如图2.2所示。

flower1.jpg flower2.jpg

图2.1 待叠加的两幅图像

图2.2 叠加后的图像效果

给图像的每一个像素加上一个常数可以使图像的亮度增加。例如,以下代码将增加图3(a)所示的RGB图像的亮度,加亮后的结果如图3(b)所示。

RGB=imread('flower.jpg'); RGB2=imadd(RGB,50); RGB3=imsubtract(RGB,50); subplot(1,3,1);imshow(RGB); subplot(1,3,2);imshow(RGB2); subplot(1,3,3);imshow(RGB3);

9

加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

形成假彩色图像;

", 观察处理的结果,注意不同波长红外线图像组成图像的不同结果 (4) 伪彩色处理1:灰度切片处理 ", 调入并显示灰度图像head.jpg;

", 利用MATLAB提供的函数对图像在8~256级的范围内进行切片处理,并使用hot模式和cool模式进行彩色化; ", 观察处理的结果。 (5) 彩色变换(选做)

", 调入并显示灰度图像Lenna.jpg;

", 使用不同相位的正弦函数作为变换函数,将灰度图像变换为RGB图像。其中红色分量R的变换函数为-sin( ),绿色分量G的变换函数为-cos( );,蓝色分量B的变换函数为sin( );

", 显示变换曲线及变换合成的彩色图像并观察彩色变换图像的色调与原始图像灰度之间的关系;

", 将RGB的变换公式至少互换一次(例如R与G互换),显示变换曲线、变换结果并观察处理的结果。 (6)打印全部结果并进行讨论。

利用MATLAB软件实现彩色图像处理的程序:

rgb_image=imread('flower1.tif'); %读取图像flower1.tif fR=rgb_image(:,:,1); %获取图像的红色分量 fG=rgb_image(:,:,2); %获取图像的绿色分量 fB=rgb_image(:,:,3); %获取图像的蓝色分量 figure(1),imshow(fR) %分别显示图像 figure(2),imshow(fG) figure(3),imshow(fB)

%实现rgb图像转化为NTSC彩色空间的图像 yiq_image=rgb2ntsc(rgb_image);

fY=yiq_image(:,:,1); %图像flower1.tif的亮度 fI=yiq_image(:,:,2); %图像flower1.tif的色调 fQ=yiq_image(:,:,3); %图像flower1.tif的饱和度 figure(4),imshow(fY) figure(5),imshow(fI) figure(6),imshow(fQ)

fR=histeq(fR,256); %对彩色图像的分量进行直方图均衡化

30

fG=histeq(fG,256); fB=histeq(fB,256);

RGB_image=cat(3,fR,fG,fB); %将直方图均衡化后的彩色图像合并 figure,imshow(RGB_image) %观察处理后的彩色图色度,亮度参照前面

f1=imread('v1_red.jpg'); f2=imread('v1_green.jpg'); f3=imread('v1_blue.jpg'); f4=imread('infer_near.jpg'); ture_color=cat(3,f1,f2,f3);

figure,imshow(ture_color) %显示由红、绿、蓝三幅图合成的彩色图 false_color=cat(3,f4,f2,f3); %用近红外图像代替R分量

figure,imshow(false_color) %显示由近红外、绿、蓝三幅图合成的假彩色图

f=imread('head.jpg');

cut_1=imadjust(f,[0.0925 0.5],[0.0925 0.5]);%提取灰度在16-128之间的像素 cut_2=imadjust(f,[0.5 1],[0.5 1]); %提取灰度在128-256之间的像素 figure,imshow(cut_1),colormap(hot) %显示图像cut_1,并使用hot模型彩色化 figure,imshow(cut_2),colormap(cool) %显示图像cut_2,并使用cool模型彩色化 (选做)

f=imread('Lenna.jpg');

g=ice('image',f); %通过ice(交互彩色编辑)函数对图像进行变换 ice(交互彩色编辑)函数的参数参照书后面的注释。

四、实验仪器与软件

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

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

五、实验报告要求

1.叙述实验过程;

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

六、思考题

1. 为什么经彩色直方图均衡后的图像除了对比度会有所增强外,还有

31

色调的变化?

2. 实验内容(3)的假彩色处理方案是否可以有多种?若有,请估计其它方案的可能结果。

3. 在实验内容(4)中,对于灰度切片处理的图像head.gif使用多少级切片比较合适?

七、实验图片

32

实验九 图像分割

一、实验目的

", 使用MatLab 软件进行图像的分割。使学生通过实验体会一些主要的分

割算子对图像处理的效果,以及各种因素对分割效果的影响。

二、实验要求

", 要求学生能够自行评价各主要算子在无噪声条件下和噪声条件下

的分割性能。能够掌握分割条件(阈值等)的选择。完成规定图像的处理并要求正确评价处理结果,能够从理论上作出合理的解释。

三、实验内容与步骤

(1)使用Roberts 算子的图像分割实验

", 调入并显示图像room.tif中图像;使用Roberts 算子对图像进行边缘检测处理; Roberts 算子为一对模板:

", 相应的矩阵为:rh = [0 1;-1 0]; rv = [1 0;0 -1];这里的rh 为水平Roberts 算子,rv为垂直Roberts 算子。分别显示处理后的水平边界和垂直边界检测结果;用“欧几里德距离”和“街区距离”方式计算梯度的模,并显示检测结果;对于检测结果进行二值化处理,并显示处理结果;

提示:先做检测结果的直方图,参考直方图中灰度的分布尝试确定阈值;应反复调节阈值的大小,直至二值化的效果最为满意为止。分别显示处理后的水平边界和垂直边界检测结果;将处理结果转化为“白底黑线条”的方式;给图像加上零均值的高斯噪声;对于噪声图像重复步骤b~f。

(2)使用Prewitt 算子的图像分割实验

", 使用Prewitt 算子进行内容(1)中的全部步骤。

33

(3)使用Sobel 算子的图像分割实验

使用Sobel 算子进行内容(1)中的全部步骤。 (4)使用LoG (拉普拉斯-高斯)算子的图像分割实验

使用LoG (拉普拉斯-高斯)算子进行内容(1)中的全部步骤。提示1:处理后可以直接显示处理结果,无须另外计算梯度的模。提示2:注意调节噪声的强度以及LoG (拉普拉斯-高斯)算子的参数,观察处理结果。

(5) 打印全部结果并进行讨论。

下面是使用sobel监测器对图像进行分割的MATLAB程序

f=imread('room.tif');

[gv,t1]=edge(f,'sobel','vertical');%使用edge函数对图像f提取垂直的边缘 imshow(gv)

[gb,t2]=edge(f,'sobel','horizontal');%使用edge函数对图像f提取垂直的边缘 figure,imshow(gb)

w45=[-2 -1 0;-1 0 1;0 1 2];%指定模版使用imfilter计算45度方向的边缘 g45=imfilter(double(f),w45,'replicate'); T=0.3*max(abs(g45(:))); %设定阈值 g45=g45>=T; %进行阈值处理 figure,imshow(g45);

在函数中使用'prewitt'和'roberts'的过程,类似于使用sobel边缘检测器的过程。

四、实验设备及软件

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

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

五、实验报告要求

1.叙述实验过程;

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

六、思考题/问答题

1. 评价一下Roberts 算子、Prewitt 算子、Sobel 算子对于噪声条件下边界检测的性能。

34

> figure(1); 生成一个图像窗口1 MatLab Command : imshow 键入

? imshow(I,[]);

上图为显示结果。

C。 MatLab命令的连续执行 D。 本实验中需要了解/使用的函数

本实验中需要学生了解并学会使用下列命令或函数 clear 清除所有变量。执行本命令将会清除内存中的全部变量。

title(' ') 在当前的图像窗口中加上标题,例如title('原始图像'); % 在当

前显示的图像上加上标题

imread() 读入一个图像文件,在使用图像进行运算时,图像的像素必须

使用双精度浮点制式,而I = imread (‘lena.bmp’) 只能得到8比特的数字图像,可以显示但不能满足运算的要求,因此在读入文件时,采用这样的格式[Im, map] = imread ('girl.bmp'); 这个命令将文件girl.bmp 中的图像作为索引图像读入矩阵Im 之中,索引图像包括一个图像数据矩阵Im和一个调色板矩阵map ,然后使用MatLab 提供了数制转换的函数,将其转换成双精度浮点制式的灰度函数,I = ind2gray(Im, map); 这时的图像I ,便成为双精度浮点制式的灰度图像。这样,就可以适用于各种运算的要求。

Imcrop() 图像剪裁。 使用格式为i = imcrop ( I, [Xmin, Ymin, dX, dY] );

这里i为剪裁后的图像,I 为被剪裁的原始图像。Xmin 为检测的水平起始点,即X方向的最小值,Ymin为检测的垂直起始点,

40

即Y方向的最小值(请注意图像坐标与普通平面直角坐标的区别)。dX 为水平方向的剪裁宽度,即剪裁下来的图像在水平方向所具有的像素数量;dY为垂直方向的剪裁高度,即剪裁下来的图像在垂直方向所具有的像素数量。例如i = imcrop (I, [180, 200, 200, 200])的操作会将输入的原始图像I 从坐标(180, 200)处起,剪切下200 × 200 的一块子图像i。

MatLab 中图像的运算:在MatLab中,图像就是一个矩阵,用一个符号代

替运算时当作一个变量即可,因此运算的书写十分简洁,故MatLab有草稿纸式的算法语言之称。下面是一些运算实例: I_a = I + 0。5;%为原始图像I 加上一个常数0。5,并将结果赋予变量I_a;以此类推可以书写出减法I_s = I - 0。5; 乘法(数乘)I_m = I * 2; 除法I_d = I / 3;

E。 其它可能用到命令有 imresize() 调节图像大小 imcontour() 画出图像的轮廓

imadjust(f,[low_in high_in],[low_out high_out]) 对灰度图进行亮度变化 imtist() 计算图像的直方图 histeq() 直方图均衡

rgb2gray() 将RGB图像转换成灰度图像 g=ice('porperty name','property value');

函数ice的有效输入

属性名称 'image' 'space' 'wait' 属性值 一幅RGB或单色输入图像f,它由指定的映射交互的变化 将被修改得分量的彩色空间。可能的值是'rgb','cmy','hsi' 若值为'on',则g是被映射的输入图像。若值为'off',则g是被映射的输入图像句柄

41

使用鼠标操作控制点

鼠标动作 左按钮 左按钮+shift键 左按钮+control键 结果 按下并拖动左按钮来移动控制点 假如一个控制点。拖动可改变控制点的位置 删除控制点 函数ice的图型用户界面中的按钮和复选框的功能

GUI函数 Smooth 功能 若选中,则进行三次样条(平滑曲线)插值,若不选,则分段的进行线形插值 若选中,则在三次样条插值中强制开始和结束曲线滚滑降为零。分段的进行线形插值不受影响 显示手映射函数影响的图像分量的概率密度函数(直方图) 显示累计分布函数而不是PDF 若选中,则启用图像映射;否则不启用 若选中,则启用伪彩色和全彩色映射;否则不启用 初始化当前显示的映射函数并取消对所有曲线参数选定 初始化所有映射函数 显示变化曲线上选取的控制点的坐标,input指水平轴,output指垂直轴 为交互式操作选择映射函数 Clamp ends Show PDF Show CDF Map image Map bars Reset Reset all Input/output Component

42

3 参考资料

[1] 徐飞,施宵红编,MATLAB应用——图像处理,西安电子科技

大学出版社,西安,2002,5 .

[2] 冈萨雷斯,数字图像处理(MATLAB版),电子工业出版社. [3] 章毓晋,图像工程(上,中),清华大学出版社,2008. [4] 龚声蓉,等. 数字图像处理与分析,清华大学出版社.

43

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

Top