《数字图像处理》实验指导书
实验一 数字图像文件基本类型转换
一、实验目的
1. 了解Matlab支持4种图像类型:灰度图像、二值图像、索引图像和RGB图像。 2. 学会运用MATLAB实现4种类型之间的转换。 3. 熟练掌握在MATLAB中如何读取和存储图像。
4. 掌握图像间的基本运算。
二、实验原理
数字图像处理就是将图像信号转换成数字格式并利用计算机对其进行一系列的操作,以得到所期望的结果。它基本的步骤可分为图像信息的获取、存储、处理、传输、输出和显示。 数字图像处理的基本方法包括图像数字化、图像变换、图像增强、图像恢复、图像压缩编码、图像分割、图像分析与描述和图像识别分类。应用领域则是非常广泛,主要包括有宇宙探测、通信工程、遥感、生物医学、工业生产、军事公安、信息安全和信息检索等。 1、数字图像的特点
⑴相比于语音等其他信号,图像具有信息量大、占用频带宽的特点。在图像通信中,有限信道根本无法实时传输图像,这对图像频带压缩提出了很高的要求。
⑵像素间相关性大。在同一帧内各相邻像素间具有相同或相近的灰度可能性很大,而运动图像的相邻帧相关性更大。这些都说明数字图像中存在着大量的冗余,通过减少或消除这些冗余,进行图像压缩的可能性很大。
在数字图像处理中,一方面要充分考虑人的视觉特性,简化处理过程。 2、图像的读取及存储
⑴ 图像的读取 读取图像函数:imread()
格式:变量名=imread(‘路径\\文件名’,‘文件格式’) 例:x=imread('city.jpg', 'jpg');
需要注意的是这是简略的写法,说明这幅图片在MATLAB的默认路径下。 ⑵ 图像的保存
①将图像写到文件 imwrite() 格式:imwrite(变量名,‘新文件名’) 例: imwrite(x,'new_image.bmp')
此时图片会自动存入默认路径下。
②将图像用save命令以mat文件形式保存到磁盘中,以后可用load命令调用。 格式:save 保存的文件名 变量名(图像) load 保存的文件名 3、数字图像的表示和类别
一幅图像可以被定义为一个二维函数f(x,y),其中x和y是空间(平面)坐标,f 在任何坐标处(x,y)处的振幅称为图像在该点的亮度。灰度是用来表示黑白图像亮度的一个术语,而彩色图像是由单个二维图像组合形成的。例如,在RGB彩色系统中,一幅彩色图像是由三幅独立的分量图像(红、绿、蓝)组成的。因此,许多为黑白图像处理开发的技术适用于彩色图像处理,方法是分别处理三副独立的分量图像即可。
图像关于x和y坐标以及振幅连续。要将这样的一幅图像转化为数字形式,就要求数字化坐标和振幅。将坐标值数字化成为取样;将振幅数字化成为量化。采样和量化的过程如图1-1所示。因此,当f的x、y分量和振幅都是有限且离散的量时,称该图像为数字图像。
作为MATLAB基本数据类型的数值数组本身十分适于表达图像,矩阵的元素和图像的像素之间有着十分自然的对应关系。
图1-1 图像的采样和量化
根据图像数据矩阵解释方法的不同,MATLAB把其处理为4类:
? 索引图像(Indexed images) ? 灰度图像(Intensity images) ? 二值图像(Binary images) ? RGB图像(RGB images)
MATLAB图像处理工具箱为开发者提供了丰富的图像处理函数,内容包括图像I/O、图像空间变换、图像配准、图像变换、线性滤波及滤波器设计、邻域与块处理、图像增强、图像模糊消除、感兴趣区域操作和图像形态学分析等。
⑴ 索引图像
索引图像包括图像矩阵与颜色图数组。其中颜色图是按照图像中颜色值进行排序后的数
组。对于每个象素,图像矩阵包含一个值,这个值就是颜色图数组中的索引。索引颜色通常也称为映射颜色,在这种模式下,颜色都是预先定义的,并且可供选用的一组颜色也很有限,索引颜色的图像最多只能显示256种颜色。
一幅索引颜色图像在图像文件里定义,当打开该文件时,构成该图像具体颜色的索引值就被读入程序里,然后根据索引值找到最终的颜色。 颜色图为m*3双精度值矩阵,各行分别指定红、绿、蓝单色值。图像矩阵与颜色图的关系依赖于图像矩阵是双精度还是无符号8位整数(unit8)。 ⑵ 灰度图像
灰度图像也成为亮度图像,一幅灰度。图像是一个数据矩阵,其归一化的取值表示亮度。若亮度图像的像素都是uint8类或uint16类,则它们的整数值范围分别是[0,255]和[0,65536]。若图像是double类,则像素取值就是浮点数。规定双精度型归一化亮度图像的取值范围是[0,1]
⑶ 二值图像
二值图像也成为二进制图像,一幅二值图像是一个取值只有0和1的逻辑数组。而一幅取值只包含0和1的uint8类数组,在MATLAB中并不认为是二值图像。使用logical函数可以把数值数组转化为二值数组或逻辑数组。创建一个逻辑图像,其语法为:
B=logical(A) 其中,B是由0和1构成的数值数组。
要测试一个数组是否为逻辑数组,可以使用函数:
islogical(c)
若C是逻辑数组,则该函数返回1;否则,返回0。
⑷ RGB图像
一幅RGB图像就是彩色像素的一个M×N×3数组,M和N表示图像像素的行列数。其中每一个彩色相似点都是在特定空间位置的彩色图像相对应的红、绿、蓝三个分量。按照惯例,形成一幅RGB彩色图像的三个图像常称为红、绿或蓝分量图像。
令fR,fG和fB分别代表三种RGB分量图像。一幅RGB图像就利用cat(级联)操作将这些分量图像组合成彩色图像:
rgb_image=cat(3,fR,fG,fB)
在操作中,图像按顺序放置。 4、数据类和图像类型间的转化 ⑴ 数据类型间的转换
表1-1中列出了MATLAB表示像素所支持的各种数据类。表中的前8项称为数值数据类,第9项称为字符类,最后一项称为逻辑数据类。
工具箱中提供了执行必要缩放的函数(见表1-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 表1-2 格式转换函数
?10308?10308名称 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 ⑵ 图像类型间的转换
MATLAB支持BMP(windows位图格式)、JPG(联合图像专家组格式)、PCX(windows画刷格式)、PNG(可移动网络图形格式)、TIF(编制图像文件格式)等多种图像文件格式。
① 灰度图像与索引图像的相互转换:gray2ind( ),ind2gray( )。 格式: [X,MAP]=gray2ind(I,[n])
其中,I表示存放灰度图像的变量, n为颜色值(缺省64)。 I=ind2gray(X,MAP)
其中,X表示图像矩阵变量 , MAP表示颜色图数组变量 。
② RGB图像与灰度图像的转换:rgb2gray( )。 格式: I=rgb2gray(RGB)
表示将真彩图像RGB转换为灰度级亮度图像I。注意!灰度图像是不能转成RGB图像的。
③ RGB图像与索引图像的相互转换:rgb2ind( ),ind2rgb( )。 格式: [X,MAP]=rgb2ind(RGB) RGB=ind2rgb(X,MAP)
其中X表示索引图像变量名,MAP为索引图像调色板。