1、 . 数字图像处理 实验指导 东北林业大学机电工程学院 目 录 实验一 图像处理基础 .1 实验二 图像的代数运算 .4 实验三 图像 空域处理 .8 实验四 图像频域处理 .11 实验五 图像分割 .14 附录: MATLAB 简介 .16 1 实验一 MATLAB 数字图像处理初步 一、实验目的与要求 1熟悉及掌握在 MATLAB 中能够处理哪些 格式 图像。 2熟练掌握在 MATLAB 中如何读取图像。 3掌握如何利用 MATLAB 来获取图像的大小、颜色、高度 、宽度等等相关信息。 4掌握如何在 MATLAB 中按照指定要求存储一幅图像的方法。 5图像间如何转化。 二、实验原理及知识点
2、 1、数字图像的表示和类别 图 1 图像的采样和量化 根据图像数据矩阵解释方法的不同, MATLAB 把其处理为 4 类: 亮度图像 (Intensity images) 二值图像 (Binary images) 索引图像 (Indexed images) RGB 图像 (RGB images) 2、数据类和图像类型间的转化 表 1 中列出了 MATLAB 和 IPT 为表示像素所支持的各种数据类。表中的前 8 项称为数值数据类,第 9 项称为字符类,最后一项称为逻辑数据类。 工具箱中提供了执行必要缩放的函数 (见表 2)。以在图像类和类型间进行转化。 表 1-1 MATLAB 和 IPT 支
3、持数据类型 名称 描述 double 双精度浮点数,范围为 uint8 无符号 8 比特整数,范围为 0 255 308308 1010 2 uint16 无符号 16 比特整数,范围为 0 65536 uint32 无符号 32 比特整数,范围为 0 4294967295 int8 有符号 8 比特整数,范围为 -128 127 int16 有符号 16 比特整数,范围为 -32768 32767 int32 有符号 32 比 特整 数, 范围 为 -2147483648 2147483647 single 单精度浮点数,范围为 char 字符 logical 值为 0 或 1 表 1-2
4、格式转换函数 名称 将输入转化为 有效的输入图像数据类 im2uint8 uint8 logical,uint8,uint16 和 doulbe im2uint16 uint16 logical,uint8,uint16 和 doulbe mat2gray double,范围为 0 1 double im2double double logical,uint8,uint16 和 doulbe im2bw logical uint8,uint16 和 double 下面给出读取、压缩、显示一幅图像的程序 (%后面的语句属于标记语句,编程时可不用输入 ) I=imread(原图像名 .tif);
5、% 读入原图像 ,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(filename); gg=im2bw(filename); % 将图像转为二值图 像 figure, imshow(gg
6、) % 显示二值图像 三、实验内容及步骤 1利用 imread( )函数读取一幅图像,假设其名为 flower.tif,存入一个数组中; 2利用 whos 命令提取该读入图像 flower.tif 的基本信息; 3利用 imshow()函数来显示这幅图像; 308308 1010 3 4利用 imfinfo 函数来获取图像文件的压缩,颜色等等其他的详细信息; 5利用 imwrite()函数来压缩这幅图象,将其保存为一幅压缩了像素的jpg 文件 , 设为 flower.jpg; 语法: imwrite(原图像 ,新图像, quality,q), q取 0-100。 6同样利用 imwrite()
7、函数将最初读入的 tif 图象另存为一幅 bmp 图像 ,设为 flower.bmp。 7用 imread()读入图像: Lenna.jpg 和 camerman.jpg; 8用 imfinfo()获取图像 Lenna.jpg 和 camerman.jpg 的大小; 9用 figure,imshow()分别将 Lenna.jpg 和 camerman.jpg 显示出来,观察两幅图像的质量。 10 用 im2bw 将一幅灰度图像转化为二值图像,并且用 imshow 显示出来观察图像的特征。 11将每一步的函数执行语句拷贝下来,写入实验报告,并且将得到第 3、 9、 10 步得到的图像效果拷贝下来
8、。 四、 实验仪器与软件 (1) PC 计算机 (2) MatLab 软件 /语言包括图像处理工具箱 (Image Processing Toolbox) (3) 实验所需要的图片 五 、实验报告要求 描述实验的基本步骤,用数据和图片给出各个步骤中取得的实验结果 和源代码 ,并进行必要的讨论,必须包括原始图像及其计算 /处理后的图像。 六 、思考题 (1) MatLab 软件可以支持哪些图像文件格 式? (2) 说明函数 imread 的用途格式以及各种格式所得到图像的性质。 (3) 为什么用 I=imread(lena.bmp)命令得到的图像 I不可以进行算术运算? 实验图像 : Fig.1
9、 flower.tif Fig.2 elephant.jpgFig. 3 Lenna.jpg Fig.4 camema.jpg 4 实验二 图像的代数运算 一、 实验目的 1 了解图像的算术运算在数字图像处理中的初步应用。 2 体会图像算术 运算处理的过程和处理前后图像的变化。 二、 实验原理 图像的代数运算是图像的标准算术操作的实现方法,是两幅输入图像之间进行的点对点的加、减、乘、除运算后得到输出图像的过程。 表 2-1 图像处理工具箱中的代数运算函数 函数名 功能描述 Imabsdiff 两幅图像的绝对差值 Imadd 两幅图像的加法 Imcomplement 补足一幅图像 Imdivid
10、e 两幅图像的除法 Imlincomb 计算两幅图像的线性组合 Immultiply 两幅图像的乘法 imsubtract 两幅图像的减法 注意:无论进行哪一种代数运算都要保证两幅输入图像的大小相等,且类型相同。 三、实验步骤 1图像的加法运算 imadd函数的调用格式如下: Z = imadd( X, Y) 其中, X和 Y表示需要相加的两幅图像,返回值 Z表示得到的加法操作结果。 I = imread(rice.tif); J = imread(camerman.tif); K = imadd(I,J); imshow(K); 叠加结果如图 2.2所示。 图 2.1 待叠加的两幅图像 图
11、2.2 叠加后的图像效果 给图像的每一个像素加上一个常数可以使图像的亮度增加。例如,以下代码将增加图 3(a)所示的 RGB图像的亮度,加亮后的结果如图 3(b)所示。 5 RGB = imread(flower.tif); RGB2 = imadd(RGB,50); subplot(1,2,1); imshow(RGB); subplot(1,2,2); imshow(RGB2); 原图 加 50 减 50 原图 加 50 减 50 图 2.3 亮度增加与变暗 两幅图像的像素值相加时产生的结果很可能超过图像数据类型所支持的最大值,尤其对于 uint8类型的图像,溢出情况最为常见。当数据值发生
12、溢出时, imadd函数将数据截取为数据类型所支持的最大值,这种截取效果称之为饱和。为了避免出现饱和现象,在进行加法计算前最好将图像转换为一种数据范围较宽的数据类型。例如,在 加法操作前将 uint8图像转换为 uint16类型。 2图像的减法运算 imsubtract函数的调用格式如下: Z = imsubtract(X,Y); 其中, Z是 X-Y操作的结果。以下代码首先根据原始图像(如图 2.4(a)所示)生成其背景亮度图像,然后再从原始图像中将背景亮度图像减去,从而生成图 2.4(b)所示的图像: rice = imread(rice.tif); background = (rice,
13、 strel(disk,15); rice2 = imsubtract(rice, background); subplot(1,2,1); imshow(rice); subplot(1,2,2); imshow(rice2); 图 2.4 原始图像、减去背景图像 6 如果希望从图像数据 I的每一个像素减去一个常数,可以将上述调用格式中的 Y替换为一个指定的常数值,例如: Z = imsubtract(I,50); 减法操作有时会导致某些像素值变为一个负数,对于 uint8或 uint16类型的数据,如果发生这种情况,那么 imsubtract函数自动将这些负数截取为 0。为了避免差值产生负
14、值, 同时避免像素值运算结果之间产生差异,可以调用函数 imabsdiff。 imabsdiff将计算两幅图像相应像素差值的绝对值,因而返回结果不会产生负数。该函数的调用格式与 imsubtract函数类似。 3. 图像的乘法运算 在 MATLAB中,使用 immultiply函数实现两幅图像的乘法。 immultiply函数将两幅图像相应的像素值进行元素对元素的乘法操作( MATLAB点乘),并将乘法的运算结果作为输出图形相应的像素值。 immulitply函数的调用格式如下: Z = immulitply(X,Y) 其中, Z=X*Y。例如,以下代码将使用给定的缩放因子对图 2.5(a)所
15、示的图像进行缩放,从而得到如图 2.5(b)所示的较为明亮的图像: I = imread(room.tif); J = immultiply(I,1.5); subplot(1,2,1); imshow(I); subplot(1,2,2); imshow(J); 图 2.5 原图和乘以因子 1.5 的图像 uint8图像的乘法操作一般都会发生溢出现象。 Immultiply函数将溢出的数据截取为数据类型的最大值。为了避免产生溢出现象,可以在执行 乘法操作之前将 uint8图像转换为一种数据范围较大的图像类型,例如 uint16。 4图像的除法运算 除法运算可用于校正成像设备的非线性影响,这在
16、特殊形态的图像(如断层扫描等医学图像)处理中常常用到。图像除法也可以用来检测两幅图像间的区别,但是除法操作给出的是相应像素值的变化比率,而不是每个像素的绝对差异,因而图像除法也称为比率变换。 在 MATLAB中使用 imdivide函数进行两幅图像的除法。 imdivide函数对两幅输入图像的所有相应像素执行元素对元素的除法操作(点除),并将得到的结果作为输出图像的相应 像素值。 imdivide函数的调用格式如下: Z = imdivide(X,Y) 7 其中, Z=X/Y。例如,以下代码将图 4所示的两幅图像进行除法运算,请将这个结果和减法操作的结果相比较,对比它们之间的不同之处: 除法操
17、作的结果如图 2.6所示。 图 2.6 原图和减背景后的图像相除的图像效果 四、 实验报告要求 1 描述实验的基本步骤,用数据和图片给出各个步骤中取得的实验结果并进行必要的讨论。 2 必须包括原始图像及其计算处理后的图像以及相应的解释。 五、 思考题 由图像算术运算的运算结果,思考图像减法运 算在什么场合上发挥优势? 8 实验三 图像 空域处理 一、实验目的: 1、了解图像增强的目的及意义,加深对图像增强的感性认识,巩固所学理论知识。 2、学会对图像直方图的分析。 3、掌握直接灰度变换的图像增强方法。 4、 学会使用 MatLab对图像作滤波处理,使学生有机会掌握滤波算法,体会滤波效果。 二
18、、 实验要求 (1)学生应当完成对于给定图像 +噪声,使用平均滤波器、中值滤波器对不同强度的高斯噪声和椒盐噪声,进行滤波处理;能够正确地评价处理的结果;能够从理论上作出合理的解释。 (2)利用 MATLAB软件实现空域滤 波的程序 。 三、实验内容 和步骤 1、 利用直接灰度变换法对图像进行灰度变换 、 图像直方图 均衡化。 灰度变 换 的 MATLAB程序 : %读入原图像(第二幅图) %显示其直方图 %灰度转换,实现明暗转换 (负片图像 ) figure,imshow(g1) %将 0.5 到 0.75 的灰度级扩展到范围 0 1 %显示灰度扩展后图像 %对输入图像对数映射变换 ( h) %将矩阵 h 转换为灰度图片 %将灰度图转换为 8 位图 %显示最终实验结果图像 直方图均衡化增强图像对比度的 MATLAB程序 %读入原图像 (第三幅图) %对原图像进行直方 图均衡化处理 %显示原图像 %给原图像加标题名 %对原图像进行屏幕控制;显示直方图均衡化后的图像 %给直方图均衡化后的图像加标题名