Matlab图像处理工具箱1
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
BMP图像文件具有以下特点:①只存放一幅图像; ②只能存储单色、16色、256色和真彩色四种图像数据; ③图像数据有压缩和非压缩两种处理方式;④调色板 的数据存储结构较为特殊,存储格式不是固定的,而 是与文件头的某些具体参数密切相关的。 BMP图像文件的文件结构可分为三部分:表头、调 色板和图像数据。表头长度固定为54个字节,只有真 彩色BMP图像文件内没有调色板数据,其余不超过256 种颜色的图像文件都必须有调色板信息。
GIF图像文件结构一般由表头、通用调色板、图像数 据区以及四个补充区共七个数据单元组成。
(3) TIF文件
TIF(Tag Image File Format)图像文件格式是现有 图像文件格式中最复杂的一种,它是由Aldus公司与微 软公司共同开发设计的图像文件格式,提供了各种信息 存储的完备手段。其主要特点如下:①应用指针功能, 实现多幅图像存储;②文件内数据区没有固定的排列顺 序;③可制定私人用的标识信息;④能够接受多种不同 的图像模式;⑤可存储多份调色板数据;⑥能够提供多 种不同的压缩数据的方法;⑦图像数据可分割成几个部 分进行分别存档。
3.2.2 MATLAB图像类型
图像类型是指数组数值与像素颜色之间定义的关系, 它与图像格式概念有所不同,在MATLAB图像处理工具箱 中,有五种类型的图像,其基本情况分别介绍如下:
(1) 二进制图像(二值图像) 在一幅二进制图像中,每一个像素将取两个离散 数值(0或1)中的一个,从本质上说,这两个数值分别 代表状态“开”(on)或“关”(off)。 二进制图像仅使用uint8或双精度类型的数组来存 储。在图像处理工具箱中,任何返回一幅二进制图像 的函数均使用uint8逻辑数组存储该图像,并且使用一 个逻辑标志来指示uint8逻辑数组的数据范围。若逻辑 状态为“开” (on),数组范围则为[0,1];若为 “关”(off),则数组范围为[0,255]。图3.7所示为 一幅典型的二进制图像示例。
3.1 MATLAB图像处理初步
MATLAB (MATrix LABoratory) 是一种基于向量 (数组)而不是标量的高级程序语言,因而从本质上就 提供了对图像的支持。数字图像实际上就是一组有序 的离散数据,使用MATLAB可以对这些离散数据形成的 矩阵进行一次性的处理。
3.1.1 图像处理的基本操作
Windows 位图文件结构示意图 位图文件头 BITMAPFILEHEADER 位图信息头 BITMAPINFOHEADER 调色板 Palette 实际的位图数据 ImageDate
(2) GIF文件
GIF(Graphics Interchange Format)图像文件格式是
CompuServe公司最先在网络中用于在线传送图像数据。 GIF图像文件经常用于网页的动画、透明等特技制作。具 有以下特点:①文件具有多元化结构,能够存储多张图像, 多图像的定序或覆盖,交错屏幕绘图以及文本覆盖;②调 色板数据有通用调色板和局部调色板之分;③采用了 LZW 压缩法;④图像数据一个字节存储一点;⑤文件内的各种 图像数据区和补充区多数没有固定的数据长度和存储位置; ⑥图像数据有顺序排列和交叉排列两种方式;⑦图像最多 只能存储256色图像。
运行结果:
25 20 15 10 5 0
0
200
400
600
800
3 .2 MATLAB图像处理工具箱简介
3.2.1 常用图像格式
图像格式指的是存储图像采用的文件格式。不同的操作系 统、不同的图像处理软件,所支持的图像格式都有可能不同。 在实际应用中经常会遇到的图像格式有:BMP、GIF、TIFF、 JPEG等。 (1) BMP(Bitmap)文件 如今Windows已经成为绝大多数用户使用的操作系统,它比 DOS成功的一个重要因素是它可视化的漂亮界面。 BMP文件是 Microsoft Windows所定义的图像文件格式,最早应用在微软 公司的Microsoft Windows窗口系统中。
(3)实现直方图均衡化 pout.tif 图像对比度较低,为了观察图像当前状态 下亮度分布情况,可以通过使用 imhist 函数创建描述该 图像灰度分布的直方图。首先使用figure命令创建一个新 的图像窗口,避免直方图覆盖图像数组I的显示结果。其 程序为:figure, imhist (I); 运行结果如图3.2所示。由图可见,图像没有覆盖整 个灰度范围[0,255],仅在较狭窄范围内,同时图像中灰 度值的高低区分不明显,无较好的对比度。
(1) 读入并显示一幅图像 首先清除MATLAB所有的工作平台变量,关闭已打开的图 形窗口。其程序如下: clear; close all;
使用图像读取函数imread来读取一幅图像。假设要读 取图像pout.tif,并将其存储在一个名为I的数组中, 其程序为: I=imread(‘pout.tif’); 使用imshow命令来显示数组I,其程序如下: imshow(I) 显示结果如下图所示。
(2) 估计图像背景 图像 rice.tif 中心位置的背景亮度要高于其 他部分的亮度。使用 imopen 函数和一个半径为 15的圆盘形结构元素对输入的图像I进行形态打 开操作。形态打开操作将会删除那些不完全包括
在半径为15的圆盘中的对象,从而实现背景亮度
的估计,其程序如下: background=imopen (I,strel (‘disk’,15));
使用find命令来返回这个最大尺寸米粒的标记号, 其程序如下: biggrain=find(allgrains==695) biggrain= 68 获取米粒的平均大小: mean(allgrains) ans= 249 绘制一个包含20柱的直方图来说明米粒大小的分布 况,程序如下: hist(allgrains,20);
(8) 计算图像中对象的统计属性 regionprops 命令可以用来调节图像中对象或区域的 属性,并将这些属性返回到一个结构体数组中。当调用 regionprops函数来返回一个包含图像中所有米粒阈值的 基本属性度量结构体时,使用以下MATLAB函数来计算 阈值对象的一些统计属性:首先使用 max 获取最大的米 粒大小,其程序如下: graindata=regionprops(labeled,‘basic’ ); allgrains=[graindata.Area]; max(allgrains) 运行后MATLAB将返回以下数据: ans= 695
(4) 保存图像 将新调节后的图像I2保存到磁盘中。假设希望将该图 像保存为PNG格式图像文件,使用 imwrite 函数并指定一 个文件名,该文件的扩展名为.png。其程序为: imwrite (I2,‘pout2.png’); (5) 检查新生成文件的内容 利用 imfinfo 函数可以观察上述语句写了什么内容 在磁盘上。值得注意的是:在 imfinfo 函数语句行末尾 不要加上分号,以保证MATLAB能够显示图形输出结果;另 外,要保证此时的路径与调用 imwrite 时的路径一致。 imfinfo (‘pout2.png’) 运行结果如下所示:
(7) 检查标记矩阵 观察标记矩阵的一个好办法就是将其显示为一个伪 彩色的索引图像。函数label2rgb可以指定调色板、背 景颜色以及标记矩阵中的对象将如何被映射为调色板中 的颜色,其程序如下:
RGB_label=label2rgb(labeled,@spring,’c’,’shuffle’ ); imshow(RGB_label);
(2) 索引图像 索引图像有叫索引色图像,它把不同的颜色对应为 不同的序号,各像素存储的是颜色的序号而不是颜色本 身。在MATLAB中,索引图像包含有一个数据矩阵X和一 个颜色映射(调色板)矩阵map。数据矩阵可以是uint8 、 uint16或双精度类型的,颜色映射矩阵map是一个m×3 的数据阵列,其中每个元素的值均为[0,1]之间的双精 度浮点型数据,map矩阵的每一行分别表示红色、绿色 和蓝色的颜色值。索引图像可把像素值直接映射为调色 板数值,每一个像素的颜色通过使用X的数值作为map的 下标来获得,如值1指向矩阵map中的第一行,值2指向 第二行,依此类推。 图3.8显示了索引图像的结构。该图像中的像素用 整数类型表示,这个整数将作为存储在颜色映射表中的 颜色数据的指针。
(3) 从原始图像中减去背景图像 将背景图像 background 从原始图像I中减去,从 而创建一个新的、背景较为一致的图像,其程序如下: I2=imsubtract (I,background); figure, imshow(I2);
(4)调节图像对比度 从上图可以看出,修改后的图像很暗,可以使用 imadjust函数来调节图像的对比度,并显示调节后的效果。 I3 = imadjust(I2,stretchlim(I2),[0 1]); figure,imshow(I3);
可以通过调用histeq 函数将图像的灰度值扩展到 整个灰度范围中,从而达到提高数组I的对比度。其程 序为: I2= histeq(I); figure,imshow(I2); 运行结果如下图所示。此时修改过的图像数据保存 在变量I2中。然后,再通过调用 imhist 函数观察其拓 展后的灰度值的分布情况。
TIF图像文件主要由表头、标识信息区和图像数据 区三部分组成。
(4) JPEG格式 JPEG (Joint Photographic Experts Group) 是对 静止灰度或彩色图像的一种国际压缩标准,其正式的名 称为“连续色调静态图像的数字压缩和编码”,已在数 字照相机上得到广泛使用,当选用有损压缩方式时其可 节省相当大的空间。
ans = Filename: 'pout.png' FileModDate: '08-Mar-2005 12:23:58' FileSize: 36938 Format: 'png' ……
3.1.2 图像处理的高级应用
(1) 读取和显示图像 首先清除MATLAB所有 的工作平台变量,关闭已打 开的图形窗口,读取和显示 灰度图像 rice.tif ,其程 序如下: clear; close all; I=imread('rice.tif'); imshow(I);
表1.1 颜色 红 蓝
常见颜色的RGB组合值 R 255 0 G 0 255 B 0 0
绿
黄
0
255
0
255
255
0
紫
青 白 黑 灰
255
0 255 0 128
0
255 255Hale Waihona Puke Baidu0 128
255
255 255 0 128
图像矩阵与颜色映射表之间的关系依赖于图像数 据矩阵的类型。如果图像数据矩阵是双精度类型,则 数据1指向矩阵map中的第一行,数据值2将指向map中 的第二行,依此类推;如果图像是uint8或uint16类 型时,将产生一个偏移量,即数值0表示矩阵map中的 第一行,数据值1指向map中的第二行,依此类推。
(2) 检查内存中的图像 使用whos命令来查看图像数据I是如何存储在内存中, 其程序为: whos MATLAB做出的响应如下: Name Size Bytes Class I 291×240 69840 uint8 array
Grand total is 69840 elements using 69840 bytes
(5) 使用阈值操作将图像转换为二进制图像 通过使用函数 graythresh 和 im2bw 创建一个新的二值图 像 bw,其程序如下: level=graythresh(I3); bw=im2bw(I3,level); figure,imshow (bw);
(6) 检查图像中的对象个数 为了确定图像中的米粒的个数,使用bwlabel函数, 该函数标示了二值图像bw中的所有相关成分,并且返回 在图像中找到的对象个数 numobjects: [labeled,numobjects]=bwlabel(bw,4); numobjects= 80