1、实验一 MATLAB 图像处理基础MATLAB 图像处理工具箱提供了强大的图像处理能力,在运用 MATLAB 对图像进行处理之前,首先需要了解 MATLAB 中有关图像的一些基本知识。1.1 MATLAB 中图像文件的格式MATLAB 支持以下几种图像文件格式。1 PCX(windows paintbrush)格式:可处理 1、4、8、16、24 位等图像数据。2 BMP(Windows Bitmap)格式:Microsoft Windows 定义的图像文件格式,能存储单色、16 色、256 色和真彩色图像数据。BMP 文件结构包括表头、位图信息数据块和图像数据三部分组成。3 HDF(Hier
2、archical Data Format)格式:支持 8 位、24 位光栅图像数据集。4 JPEG(Joint Photographic Experts Group)格式:静态图像压缩的一种国际压缩标准。5 TIF(Tag Image File Format)格式:可实现多幅图像存储,TIF 文件由表头、标识信息区和图像数据区三部分组成。6 XWD(X Windows Dump)格式。7 PNG(Portable Network Graphics)格式。1.2 MATLAB 图像处理基本操作命令(1)图像文件的读取格式:A=imread(文件名.文件格式 )图 1.1 图像 pout.tif
3、的显示效果(2)检查内存中的图像格式:whos例 2:使用 whos 命令来查看图像数据 I 是如何存储在内存中,其程序为:whosMATLAB 做出的相应如下:Name Size Bytes ClassI 291x240 69840 uint8 arrayGrand total is 69840 elements using 69840 bytes(3)保存图像格式:imwrite (A,文件名.文件格式)显示结果如下:ans = Filename: pout1.pngFileModDate: 04-Jun-2004 20:57:04FileSize: 31559Format: pngFor
4、matVersion: Width: 240Height: 291BitDepth: 8ColorType: grayscaleFormatSignature: 137 80 78 71 13 10 26 101.3 MATLAB 图像类型图像类型是指数组数值与像素颜色之间定义的关系,它与图像格式概念有所不同,在MATLAB 图像处理工具箱中,有五种类型的图像,其基本情况分别介绍如下:(1) 灰度图像灰度图像通常由一个 unit8、unit16 或双精度类型的数组来描述,其实质是一个数据矩阵 I,该矩阵中的数据代表了在一定范围内的灰度级,每一个元素对应于图像的一个像素点。通常 0 代表黑色,1
5、、255 或 65535 代表白色。大多数情况下,灰度图像很少和颜色影射表一起保存。但在显示灰度图像时,MATLAB 仍然在后台使用预定义的默认的灰度颜色影射表。(2)二值图像与灰度图像相同,二值图像只需要一个数据矩阵,每个象素只取两个灰度值。(3)RGB 图像RGB 图像又称为真彩图像,它由 R、G、B 三个分量表示一个象素的颜色,通过三基色可以合成任意的颜色。对一个尺寸为 nm 的彩色图像来说,在 MATLAB 中则存储为一个nm3 的多维数据数组。图形文件格式把 RGB 图像存储为 24 位的图像,红、绿、蓝分别占 8 位,这样可以有 22416 777 216 种颜色。图 1.4 RG
6、B 图像图 1.5 索引图像在上面的 RGB 图像中,要确定象素(56,80)的颜色,可以在命令行中键入RGB(56,80,:)回车,得到ans(:,:,1) = %红色颜色值188ans(:,:,2) = %绿色颜色值53ans(:,:,3) = %蓝色颜色值92即象素(56,80)的 RGB 颜色为:188(红色) 、53(绿色) 、92(蓝色) 。(4)索引图像索引图像包括一个数据矩阵 X,一个颜色映像矩阵 Map。颜色映射表通常和索引图像存在一起。当调用函数 imread 时,MATLAB 自动将颜色映射表与图像同时加载。(5)图像序列图像序列是一个四维的数组,由图像的长、宽、颜色深度
7、和图像帧的序号组成四维数组。要将分散的图像合并成图像序列,使用 cat 函数。其格式为:A=cat(4,A1,A2,A3,A4,A5)图 1.6 序列图像1.4 图像类型的转换MATLAB 图像处理工具箱提供了许多图像类型转换函数。1Dither 函数dither 函数通过抖动算法转换图像类型,其语法格式为:Xdither(RGB,map)Xdither(RGB, map, Qm, Qe)BW=dither(I)这里 X=dither(I1,map)通过抖动算法将真彩色图像 RGB 按指定的调色板 map 转换成索引色图像 X。Xdither(RGB,map,Qm,Qe)利用给定的参数 Qm,
8、Qe 从真彩色图像 RGB 中产生索引色图像 X。Qm 对于补色决定各颜色轴的量化位数,Qe 决定量化误差的位数。如果QeQm,则不进行抖动操作。Qm 的默认值是 5,Qe 的默认值是 8。BW=dither(I2)将灰度图像 I 抖动成二值图像 BW。输入图像可以是 double 或 uint 8 类型,如果输出的图像是二值图像或颜色种类不超过 256 的索引色图像,则是 uint 8 类型,否则为 double 型。运行结果如图 1.7 所示。(a)RGB 图像 (b)索引图像图 1.7 图像抖动示例2. gray2ind 函数灰度图像转换为索引图像,语法格式为:X,map=gray2in
9、d(I,n)功能:按指定的灰度级数 n 和颜色图 map,将灰度图像 I 转换成索引色图像 X,n 的默认值为 64。(a) gray(128)图 (b)gray(16)图 (c) 原图3. ind2gray 函数将索引图像转换为灰度图像,格式为:I=ind2gray(X,map).I=ind2gray(X,map)将具有调色板 map 的索引色图像 I 转换成灰度图像 I,它去掉了图像的色度和饱和度,仅保留了图像的亮度信息。4ind2rgb 函数将索引色图像转换成真彩色图像,其语法格式为:RGBind2rgb (X,map)。将具有颜色图 map 的索引图像 X 转换为真彩色图像。5mat2
10、gray 函数将个数据矩阵转换成一幅灰度图像,其语法格式为:Imat2gray(A,amin amax)。按指定的取值区间amin amax将数据矩阵 A 转换为灰度图像 I。6graslice 函数通过设定阈值将灰度图像转换成索引色图像,其语法格式为:Xgraslice (I,n)Xgraslice (I,v )这里 Xgraslice (I,n)将灰度图像 I 均匀量化为 n 个等级,然后转换为伪彩色图像 X。Xgraslice (I,v )按指定的阈值向量 v(每一个元素部在 0 和 1 之间)对图像 1 的值域进行划分,而后转换成索引图像 X。8 rgb2gray 函数用于将一幅真彩色
11、图像转换成灰度图像,其语法格式为:Irgb2gray (RGB)9 rgb2ind 函数用于将真彩色图像转换成索引色图像,语法格式为:X,map=rgb2ind(RGB)1.5 图像的显示显示图像的最基本的手段是使用 image 函数,如 1.3 节例 4。此外,imagesc 函数也具有 image 的功能,所不同的是 imagesc 函数还自动将输入数据比例化,以全色图的方式显示。自己编写程序看看二者的区别。imshow 用于显示各类图像,它比 image 和 imagesc 更常用,其图像显示的不同格式如下:imshow(X,map):显示索引图像。imshow (I):显示灰度图像。i
12、mshow(BW):显示二值图像。imshow(RGB):显示 RGB 图像。imshow filename:显示图像文件。imshow(I,low high):将非图像数据显示为图像。还有相关图像显示的函数如下:colorbar: 为图像的显示增加一个颜色条。getimage: 获取图像数据。immovie:将多帧索引图像制作成连续的图像格式(电影) 。montage:多帧图像的一次显示。movie:播放多帧连续图像。subimage:在一个图形区域内显示多个图像。truesize:调整图像显示的尺寸。warp:显示图像的纹理表面图。zoom:将图像或二维图形进行放大或缩小显示。图 1.8
13、添加颜色条的灰度图图 1.9 多帧图像的显示1.6 图像的算术运算与几何运算1.6.1 图像的算术运算图像的算术运算比较简单,主要有加、减、乘、除等四则运算。在进行算术运算时,如果所操作的图像为两个以上,需要保证这些图像的尺寸维数都相等。有关算术运算的几个函数如下:imabsdiff:比较两幅图像的绝对差异。imadd:将两幅图像相加,或者将图像与常数相加。imsubtract:将两幅图像相减,或者将图像减去一个常数。immultiply:将两幅图像相乘,或者将图像乘以一个常数。imdivide: 将两幅图像相除,或者将图像除以一个常数。imcomplement:图像互补操作。imlincom
14、b:对图像进行线形复合运算。图 1.10 两幅图像的加法运算1.6.2 图像的几何运算1插值运算在图像处理中,插值运算时一个基本的运算,插值运算的实质就是图像的重采样。如果想要图像的像素数增加,则新增加的像素就需要通过插值得到。有些指令函数如imresize、imrotate、improfile 等都需要插值运算。插值的方法主要有三种:(1) 最近邻插值:输出像素的灰度值由距离其坐标位置最近的像素的灰度值代替。(2) 双线性插值:输出像素的灰度值由位于该像素坐标位置周围的 2*2 个近邻像素的灰度值经加权平均得到。(3) 双三次插值:输出像素的灰度值由位于该像素坐标位置周围的 4*4 个近邻像
15、素的灰度值经加权平均得到。2改变图像尺寸imresize 函数用于改变图像的尺寸,其常见的调用方法有两种:(1) B=imresize(A,m,method)返回一个 m 倍于原图像 A 的图像 B,使用插值的方法由 method 指定。Method 可选值为nearest neighber(最近邻法)、 bilinear(双线性插值) 、 bicubic(双三次插值)。如果没有指定为缺省的插值方法是最近邻插值法。(2) B=imresize(A,mrows mcols,method)返回一个尺寸大小为 mrows 行乘以 mcols 列的图像 B,使用插值的方法同上。3图像的旋转imrota
16、te 函数用于图像的旋转,其主要的调用格式有:(1) B=imrotate(A,angle,method)图像 B 由图像 A 旋转 angle 大小的角度得到,通常大于图像 A。使用的插值方法同上。(2) B=imrotate(A,angle,method,crop)图像 B 由图像 A 旋转 angle 大小的角度得到,不过尺寸与图像 A 相等。用户可以指定crop参数对旋转后的图像进行剪切(取图像的中间部分) 。4图像的裁剪imcrop 函数用于裁剪图像的一部分。其调用格式有三种:(1) I2=imcrop(I)(2) X2=imcrop(X,map,rect)(3) RGB2=imcr
17、op(RGB,rect)其中 I 指的是灰度图像,X 指的是索引图像,RGB 指的是 RGB 图像,rect 为可选参数,指定选取的图像区域,其数据格式为xmin ymin width height1.7 图像块操作图像块操作是将图像的数据矩阵划分为同样大小的矩阵区域的操作,它是图像分析和图像压缩的基础。同时由于图像划分为图像块后可以转化为矩阵或者向量运算,因此可以大大加快图像处理的速度。MATLAB 进行图像块操作的函数有:1) blkproc 函数该函数能将每个显示块从影像中提取出来,然后将其作为参数传递给任何用户函数量。其语法格式为:B=blkproc(A,m n,fun)2) best
18、blk 函数该函数用于选择图像块的尺寸,其语法格式为:bestblk(m n,k)3) col2im 函数该函数用于将向量重新排列成图像块,其作用在于提高其运算速度,其语法格式为:B=col2im(A,m n,mm nn,block_type)其功能是将图像 A 的每一列重新排列成 mn 的图像块,block_type 为指定排列的方式,即:当 block_type 为 distinct 时,图像块不重叠;当为 sliding 时,图像块滑动。用这些图像块组成 mmnn 的图像 A。4) im2col 函数该函数实现将图像块排列成向量的功能,其语法格式为:B=im2col(A,m n,block_type)