首页 《MATLAB图像处理宝典》02章

《MATLAB图像处理宝典》02章

举报
开通vip

《MATLAB图像处理宝典》02章 www .do zan .cn MATLAB 图像处理 20 第 章 MATLAB 图像处理的特点及学习方法 ◆ MATLAB 和其他图像处理软件的比较 ◆ MATLAB 图像处理程序的开发特 点 ◆ MATLAB 图像处理适用人员 ◆ 从图像入手学习 MATLAB ◆ MATLAB 图像处理研究的基本问题 ◆ 更新的 Demos 计算机专业的人也许写程序比较厉害,但是谈到做软件就不一定了。软件是完成指定功能的, 程序是软件的具体...

《MATLAB图像处理宝典》02章
www .do zan .cn MATLAB 图像处理 20 第 章 MATLAB 图像处理的特点及学习方法 ◆ MATLAB 和其他图像处理软件的比较 ◆ MATLAB 图像处理程序的开发特 点 ◆ MATLAB 图像处理适用人员 ◆ 从图像入手学习 MATLAB ◆ MATLAB 图像处理研究的基本问题 ◆ 更新的 Demos 计算机专业的人也许写程序比较厉害,但是谈到做软件就不一定了。软件是完成指定功能的, 程序是软件的具体实现,会写程序不一定做得好软件。非计算机专业人员需要进行图像处理,但是 写软件不在行,MATLAB 提供了简便易用的图像处理功能和功能强大,且不断更新的工具箱,为非 计算机专业人士提供了完成自己功能软件的平台。 既然用户使用 MATLAB 进行图像处理是为了付出最小的学习成本从而得到最大的收益,就必须 掌握科学的学习方法,进行高效学习,以便尽快完成自己的功能软件。 2.1 MATLAB 和其他图像处理软件的比较 学习方法中有种方法叫学习知识的迁移,也就是学习一门学科知识的时候,借鉴原来已经学习 掌握过的知识,将原来的经验有条件地搬过来用,即经常所说的举一反三,学一当十。有的用户可 能没有 MATLAB 的图像处理功能,但是相信用过其他的图像处理软件。在当今这个图像技术飞速发 展,数码产品不断更新的时代,相当多的人会遇到和图像有关的问题。最为常见的是用数码相机或 者手机拍个照,然后进行一下图像处理。 普通用户用到的软件一般是通用图像处理软件,如: ‹ ACDSee,主要用来浏览图片,具有简单的图像处理功能。 ‹ Photoshop,一般用来处理数码照片,具有强大的图像处理功能。 ‹ PhotoImpact,Ulead(立友)公司的,具有丰富的图像处理 模板 个人简介word模板免费下载关于员工迟到处罚通告模板康奈尔office模板下载康奈尔 笔记本 模板 下载软件方案模板免费下载 。 ‹ Turbo Photo,光影魔术手,友锋图像处理系统,处理手机照片的。 ‹ 各类数码相机的配套图像处理程序。 高级用户用到的软件一般是专业图像处理分析软件,很多和专业领域有关,如: ‹ Image-Pro Plus,偏重医学图像分析的图像处理软件。 ‹ SPIP(The Scanning Probe Image Processor),是用于定量测量图像结构的。它有很多自 动精确的校准和测量工具,主要用于微观表面的图像处理和分析。 ‹ AFM(原子力显微镜),Taylor Hobson 等专业测量仪器自带的图像分析处理软件。 ‹ Surfer,地表图像处理分析软件。 www.dozan.cn 秦襄培 编著 www .do zan .cn 第 章 MATLAB 图像处理的特点及学习方法 21 ‹ 3D-Doctor,Mimics,医学用三维图像处理软件。 ‹ 各类显微镜配套图像处理分析软件。 这里列举的图像处理软件限于作者的学习和工作经历,只是现有图像处理软件中非常 小的一部分。 MATLAB 相对于通用图像处理软件来说,是专业软件,但是相对于专业图像处理分析软件,它 又可以说是通用软件,是专业软件中的通用软件。 这些软件之间主要是功能偏重点不同,但是也有融合交叉的地方。比如最为常见的图像处理软 件 Photoshop,通常认为它是处理数码照片用的,做做图像效果什么。但是它实际上也可以完成一 些测量工作。在 Adobe Photoshop CS3 Extended 中可以看到专门的分析菜单,如图 2.1 所示。 一般的读者可能觉得这个功能也没有什么用,但是如果你和显微镜打交道,又没有配套软件的 话,就知道这个功能是非常有用的。现在的显微镜一般称为数码显微镜,说白了就是在显微镜上装 个 CCD,进行显微图像采集,如果买这个 CCD 的话会配套有专门的测量软件,一般价格比较高, 不是所有的实验室都会买。因此在实验室里面常常可以看到配套测量软件的替代产品,Photoshop。 原来版本的 Photoshop 是没有设置测量比例功能的,现在它加的这一项功能可以说抢了很多软件 的饭碗,因为有很多测量软件最为有用,最为常用的功能就是定义标尺后测量长度。 图2.1 使用 MATLAB 开发的商业软件效果图 MATLAB 作为一个平台,它的功能适应性非常强,用它干什么的专业人士都有,这些专业人士 用 MATLAB 著书立说,留下的财富就是工具箱,和图像有关的就是图像处理工具箱和图像获取工具 箱,MATLAB 和其他图像处理软件的差异如表 2.1 所示。 表 2.1 MATLAB 和其他图像处理软件的差异 比较的方面 MATLAB 其他图像处理软件 操作方式 命令操作 菜单操作 是否具有图像处理以外的其他功能 拥有很多其他功能 没有 是否带有编程工具 是 部分带有编程工具,并有自身的编程语言 图像硬件设备适应性 范围广 范围小 www.dozan.cn 秦襄培 编著 www .do zan .cn MATLAB 图像处理 22 从表 2.1 可以看到,MATLAB 由于可以进行编程操作,在图像处理上具有很大的自由度与灵活 性,其他图像处理软件主要基于菜单操作,灵活度相对较小,但操作相对简单。从图像硬件适应性 来说,由于 MATLAB 功能多样,支持多种硬件设备,在图像硬件适应性上有明显优势。 如果是完成特定的图像任务,目的比较单一的话,可以优先选择其他图像软件。如果希望在图 像处理分析上有更大的自由度,需要自己完成某种图像处理功能软件,则需要 MATLAB。 2.2 MATLAB 图像处理程序的开发特点 MATLAB 图像成立程序开发的特点是上手容易,开发周期短,见效快。和 VB、VC 等专业级编 程工具相比,在 MATLAB 平台上开发图像处理软件程序代码编写量明显较小。这是因为 MATLAB 有 专门的图像处理工具箱,有很多实现某种图像处理功能的函数,而专业级的编程工具并没有专门为 图像处理而编写的函数,很多图像处理函数需要开发者自己编写。因此为了完成一般的图像处理工 作采用 MATLAB 编程是非常合适的。但是凡事有利有弊,如果你用 MATLAB 写了几个功能强大的图 像处理程序就觉得自己可以进行商业软件开发的话,问题就来了,由于你的程序是基于 MATLAB 图像处理工具箱函数的,因此你的图像处理程序不能脱离 MATLAB 平台。而商业软件只有独立存在 才能产生商业价值,你不可能买出自己的图像处理程序还搭配一套 MATLAB,正版的 MATLAB 巨贵 无比。因此使用 MATLAB 开发商业软件绕不开的问题就是如何让 MATLAB 上编写的图像处理程序脱 离 MATLAB 平台而独立运行。这就涉及程序编译发布问题了。当 MATLAB 调用的是一些平台基本函 数的时候,程序编译发布并不是一件困难的事情,但是当你调用了图像处理工具箱的一些专门函数 的时候,程序编译发布就是一件比较困难的事情了。特别是完整的图形界面程序的编写就比较麻烦 了,你需要花很多时间和精力来使用 MATLAB 进行程序界面编程,最后你花在程序编译和界面编程 上的时间有可能超过图像处理功能程序部分。 使用 MATLAB 进行图像处理程序的开发是典型的先甜后苦。当然如果你不考虑商业化,只是做 做研究,自己使用的话就不存在这些问题了。虽然使用 MATLAB 进行图像处理程序的开发后期有比 较大的困难,但是由于它的优势太明显了,上手快,功能强大,图像处理工具箱不断更新函数,还 是有很多人使用 MATLAB 来进行程序开发。而且由于 MATLAB 的易用性,很多专业人士很容易选择 MATLAB 作为自己的程序开发工具,因此 MATLAB 有很多涉及较深专业内容的程序代码可以找到, 这对专业人士来说是比较难得的。 这里可以看到,进行图像处理程序的开发,无论对于专业人士还是非专业人士,都是一种需要 思考的选择。要考虑前期投入和后期投入,不能被 MATLAB 表面的易用性所迷惑,该花精力的地方 一点都省不了。一句话,天下没有白吃的午餐,没有轻松的工作。 2.3 MATLAB 图像处理适用人员 虽然在国内的高校学校 MATLAB 没有像国外的高校那么普遍,但是现在课程设计、毕业设计中 已经可以比较多地看到 MATLAB 软件的使用了。从各个高校学生与图像处理有关的论文来看,使用 MATLAB 来做软件平台的数量不少。从高校学生的编程基础学习来看,目前高校大学生学习的基本 上还是 C 语言,但是 C 语言本身不适合做一些短平快的应用程序,与图像处理有关的一些 C 语言 共享程序,无论从数量和易用性上来说,都比不上 MATLAB 的图像处理共享软件。因此 MATLAB 作 www.dozan.cn 秦襄培 编著 www .do zan .cn 第 章 MATLAB 图像处理的特点及学习方法 23 为图像处理软件平台,很适合高校学生。 下面来看看高校和 MATLAB 图像处理有关的研究题目是什么? 随便上网搜索了一下,就找到了一堆相关论文,《基于 MATLAB 的炉膛火焰图像温度测量》、《基 于MATLAB 6.5的图像处理演示程序设计》、《MATLAB仿真在图像处理中的应用实验》、《基于MATLAB 的图像分割算法研究》、《基于 MATLAB 的一维条码识别》、《傅里叶理论在图像处理中的应用》、《基 于 MATLAB 的数字图像处理的实验软件的研究》、《数字图像的识别》,等等。可以看到,这些论文 涉及的内容还是比较广泛的。 MATLAB 除了作为高校学生完成学业的工具外,以 MATLAB 作为图像相关软件平台的公司也不 少,如许多通讯公司就是用 MATLAB 平台做软件的,图 2.2 是通信公司工程师开发软件效果图,看 了效果图以后,作者对手机移动蜂窝信号有了感性认识,知道了为什么称为蜂窝。图 2.2(a)用 到了位图和矢量图的复合,底层地表三维使用的是地表高度图,为位图,上面的信号图是矢量图, 加在位图上面。图 2.2(b)需要编程解决大小六边形的自动绘制问题。图 2.2(c)中需要解决复 杂图形交互界面的问题,如左边的选择控制窗口“显示选择小区栅格图”。 (a) 软件框架 (b) 上海某地区虚拟网络 UE 接收总功率 (c) 显示部分栅格图 图2.2 使用 MATLAB 开发的商业软件效果图 www.dozan.cn 秦襄培 编著 www .do zan .cn MATLAB 图像处理 24 这些图全部都是 cwit 采用 MATLAB 6.1 做出来的,没有使用 Java 的类库。从图 2.2 可以看出, MATLAB 的图像处理功能完全可以满足公司商业软件开发的需要。 使 用 MATLAB 作 为 商 业 软 件 开 发 工 具 国 内 比 较 著 名 的 是 恒 润 公 司 , 公 司 网 址 为 http://www.hirain.com。 2.4 从图像入手学习 MATLAB MATLAB 由于其易用性、扩充性、众多实用的工具箱以及广泛的用户而成为研究者和学生的必 会工具,成为专业交流语言。根据自己的学习经验,觉得从图像入手学习 MATLAB 是一条较好的路 径。MATLAB 本身由于众多专业人员的参与,变得博大精深,本书只是从图像知识入手谈一谈 MATLAB,很多概念只是从感性认识来说,不具备概念性的精确。 2.4.1 视觉图像和 MATLAB 的联系 视觉是人获取知识的主要途径,视觉的分析判断能力本身也很高。如果用 MATLAB 的功能来对 视觉功能做一下仿真,还是很有意思的。 图像的采集。眼睛是通过视网膜来得到图像信号的,网膜,可以想像视觉细胞按照矩阵的形式 规则分布,那么每个矩阵里面的每个元素都会得到一个光感电压值,通过视神经传导,将二维的信 号变成一维传输,然后在大脑中对应的区间又转换为二维,这一点应该不难想像。可以想像大脑中 的记忆细胞有一块矩阵空间通过加电得到了一副完整的图像。大脑使用神经网络功能对其进行识别 运算,得到了图像中自己关注的目标体。 到了 MATLAB 这里,情况是非常类似的,摄像头的 CCD 本身就是矩形的,得到的图像也是用 矩阵来描述的。不过在没有使用白平衡基准对其处理前,得到的矩阵还只是原始的 RAW 文件,还 不能得到所需的图像。还记得电影《黑客帝国》里面不断往下掉的 0 和 1 吗,可以想像由于计算 速度跟不上,原始数据还没有计算成还原图像所需的数据,但是如果看熟了的话,你还是可以想像 到你看到了什么,比如看到(255,0,0)就会想到红色。对了,在二进制中应该是 11111111,0, 0。到了 MATLAB 里面,图像具有图像模式,不同的模式下图像存在的数据矩阵是不同的。比如用 RGB 模式,用一个三维矩阵就可以描述了,一个矩阵里面是 R 值,像素的下标位置就是矩阵元素 的下标位置,可以看到使用矩阵的优势了吧,不用单独描述 X,Y 值,下标就可以描述 X,Y 值了,这 样省了多少事情啊。要不然对一个图像像素的描述是: 1, 0, 255 1, 0, 0 1, 1, 0 x y R x y G x y B = = = = = = = = = 在这里可以看到 CCD 里面得到的是电压值,但是通过标定可以把电压值转换为图像。那么, 各种传感器得到的数据自然也可以通过一定的人为标定变成图像了,进一步讲,只要是数字就可以 变成图像了。这就是 MATLAB 里面的伪彩色的意义了,从物理意义上来说,某个数据可能没有颜色, 比如 0.01 是什么颜色呢,但是使用标定法,比如所有的数据×100,那么 0.01×100=1,如果用灰度 图像来描述这个数据的话,它的颜色就是 1 级灰度了。如果用索引色来描述这个数据的话,在颜色 表里面,1 对应的颜色可能是红色。如果得到的数据是 1.2 呢,那么还是将其颜色描述为 1 级灰度, www.dozan.cn 秦襄培 编著 www .do zan .cn 第 章 MATLAB 图像处理的特点及学习方法 25 这里可以看到,颜色是有精度问题的。颜色范围越大精度越高。所以医院里面,X 光片的数字化显 示遇到了困难,因为使用计算机显示的图像灰度可能只有 256 级灰度,但是冲洗出来的 X 胶片的 灰度等级可能几百上千,比 256 级高得多,一些事关人命的细节图像可能就会显示出来供医生识 别。当然,人眼对于灰度级别的识别能力有限,如果要想方便识别的话,还是变成彩色容易识别。 灰度变成彩色简单的算法就是将灰度等级数变成索引号,这样灰色就变彩色了。 这里看到只要是数据都可以变成视觉图像,而数据又可以以矩阵的形式存在,数据的运算可以 变成矩阵的运算,矩阵运算的结果可以用图像表示。MATLAB 就是这样一个矩阵数据运算的可视化 工具。它的最大特点就是运算结果的可视化。当然,现在的仿真软件一般都有可视化功能,通常可 以称为后处理工具,可视化工具包。 2.4.2 图像在 MATLAB 中的处理 作为图像处理来说,首选当然是 Photoshop。如果要对照片进行处理,当然最好用的工具是 Photoshop。但是如果说到工程图像分析的话,Photoshop 就显得不够方便了,缺少明确的数字化 显示与控制。这主要是因为 Photoshop 的目标人群主要是一般用户。如果了解 Photoshop 的历史 的话,就会发现早期 Photoshop 的菜单思路和 MATLAB 有相似的地方。如在 Photoshop 3.0 中,很 多菜单的名称还没有脱离矩阵计算的色彩。Photoshop 还没有把各种图像矩阵运算披上美丽的外 衣。其实可以把 MATLAB 的图像处理部分看做是 Photoshop 的计算内核。 Photoshop 的矩阵运算本质暴露得最为清楚的是它的自定义滤镜功能,这里需要自己设计一个 运算矩阵来对图像进行处理。MATLAB 进行图像处理的时候,使用的是命令短语,不如 Photoshop 的菜单命令直观,但是 MATLAB 的图像处理控制参数更容易精确控制。在用 Photoshop 时,需要很 熟悉该软件才能知道参数背后的意义。如果对 Photoshop 的本质有比较清楚的认识,就会知道通 道是 256 级灰度矩阵。蒙版也是灰度矩阵,选区也是矩阵。乱花渐欲迷人眼,了解到图像处理的 本质是矩阵运算后,操作 Photoshop 或者 MATLAB 就会有了清楚的目标。 图像运算的首要准备工作是确定要用到的图像模式。所以在 MATLAB 里面有很多图像模式转换 的命令,比如 RGB2GRAY。这里 2 的意思是“to”。因为 two 的发音和 to 的发音相同,所以程序员 们把 2 来代替“to”。很有意思吧,所以不精通编程的朋友不要有畏难情绪,MATLAB 里面的命令 语言基本上都是口语似的,是所实现功能的英语短语而已。 MATLAB 的程序语言非常简单,只要掌握基本的命令语言,简单的循环和判断就可以应付大部 分的工作。图像模式对于初学者来说,可能比较难以理解,图像不就是 RGB 三原色的混合吗?为 什么还要什么别的图像模式。那么用坐标系来说,RGB 图像模式就像是直角坐标系,LAB 图像模式 就像是柱坐标系,还是空间的那个点,但是为了描述问题的方便性,不同的时候要选择不同的坐标 系。比如在软件建模的时候,如果模型是个正方体,那么用直角坐标系会很方便,但是如果模型是 个圆柱体的话,使用柱体坐标就很方便了。大家最为熟悉的是直角坐标系,就像 RGB 图像模式最 容易理解。 要想进行图像计算,先得把图像输入到 MATLAB 里面,变成 MATLAB 里面的矩阵变量。图像的 输入工作本来还有点麻烦,但是现在的高版本 MATLAB 中,图像和文本数据都可以直接导入到 MATLAB 里面,所以一般问题不大。图像导入到 MATLAB 后,其变量名就是图像的文件名。当然, 如果要对大量图像进行处理的话,就需要使用程序来读入图像了。比如研究 CT 断层扫描图像,一 次处理的图像可能有上百张,就需要设置一个循环来读入这么多图像,依次对图像进行处理了。 www.dozan.cn 秦襄培 编著 www .do zan .cn MATLAB 图像处理 26 关于图像的处理由于大家有了一般照片的处理经验,应该还是比较容易理解的。比如图像平滑 运算,大家用得比较感兴趣的可能就是如何对美女的脸部进行去斑美容了。这是一个非常好的学习 的方法,就是用 MATLAB 实现一般用 Photoshop 或者别的图像实现的照片处理,特别是人脸的处理。 因为人对于脸部的细微变化非常敏感,这样对于图像处理的效果就会有比较敏感的评价。知道为什 么各个国家的钞票都用人物面部来防伪吗?就是因为人眼对于面部的细微变化最为敏感,这样如果 假钞上的人物面部和真的上面有差别的话,就容易识别出假钞了。 讲到这个地方,可能有人会说,为什么不讲讲基本的程序语句了,你讲的东西和 MATLAB 有没 有关系呢?因为是这样的,最好能了解图像的一些基本知识,引起对图像的兴趣。如果很着急解决 某个具体问题的话,只需要在 MATLAB 中给出输入,给出适当的操作命令,就会得到结果。还可以 先使用 Google 或者别的搜索引擎搜索一下,找到类似的别人做过的程序或者文章。现在正在研究 的东西,国内肯定已经有人做过类似的了,如果没有的话,找英文的,国外肯定已经有人做过类似 的了。如果还没有的话,姑且认为你很有眼光,已经研究到某个问题的国际前沿部分了,那么问题 就不是 MATLAB 这个工具的熟练问题了,而是专业方向上的问题了。 对于初学者来说,花尽量少的时间熟悉 MATLAB 的相关命令还是必要的,建议手头至少有一本 关于 MATLAB 的书,肯定有一些基本命令的介绍的。 MATLAB 最为困难的地方是它涉及专业知识的地方,就这一点来说,用到 MATLAB 里面非自己 专业的工具箱的时候,每个人都是初学者,不同的是有的人已经很熟悉怎样以最快的速度来熟悉和 掌握相关内容来解决问题,现学现卖。站在 MATLAB 这个巨人的肩膀上,才能看得远。 有些时候很奇怪,某个概念定义有了,计算公式有了,说明文字有了,还是不理解。那是因为 缺乏生动的背景材料,没有感性认识的原因。毕竟很多时候学习的是间接经验。一个概念和公式来 到面前的时候,已经经过了好多人多少年的勤奋工作,它们诞生的最初需要,背景已经不知道了, 或者被省略掉了。只有靠想像来理解这些概念。图像的感性认识是否使你对于比较枯燥单调的概念 有一些比较感性的认识呢? 答案 八年级地理上册填图题岩土工程勘察试题省略号的作用及举例应急救援安全知识车间5s试题及答案 是肯定的,要不然干吗从图像入手学 MATLAB 呢 ? 2.4.3 MATLAB 中的三维数据场处理 MATLAB 的绘图功能十分强大,以至于有些推荐词上说本软件是功能最强大的图像处理软件。 对于 3D 绘图来说,可以说的东西非常多。现主要讲解一般的三维数据场的制作,因为三位数据场 的应用广泛。 做过 GIS 的人知道 DEM 模型。简单点说,就是把地面从 XY 方向上划分为规则网格,然后测量 得到每个网格的高度,这样得到一个高度矩阵,就可以描述一块地面的高度分布。在很多情况下, 这个模型可以套用到很多地方,比如用 AFM 等三维表面轮廓仪得到的表面,也可以想像成地表。 对某个物理量在 XY 方向上的分布进行测量,得到的数据场也可以想像成地表。温度场、声场、应 力场、磁场,在 2D 方向上分布的时候,都可以想像成地表。物理量的大小可以用 Z 来表示。 但是如果要对物体进行 3D 体式分析的话,这种模型就不好用了,因为 Z 被用来描述物体的高 度位置。3D 图像的三维全部被用完了。除非进入多维空间,才能增加物理量。在 MATLAB 里面, 有个四维空间,这个空间是(X,Y,Z,COLOR)。在这里 COLOR 与温度、应力等物理量通过颜色表或 者颜色标尺对应起来,简单点说就是用颜色来代表温度的高低,比如红色表示高温,蓝色表示低温。 其他的物理量与此类似。在 MATLAB 里面,这种对应关系通过 PCOLOR 来实现。当然,在 2D 的情 况下,也可以用(X,Y,COLOR)表示 3D,不同的是这个时候 Z 被 COLOR 取代。 www.dozan.cn 秦襄培 编著 www .do zan .cn 第 章 MATLAB 图像处理的特点及学习方法 27 如果对于地表测量的时候网格划分十分精密的话,那么得到的数据量就非常大,数据的起伏变 化也会比较频繁。这样的地表如果被引入游戏,会因为计算量太大而引起丢帧,或者游戏运行缓慢。 那么就需要对这些数据进行滤波,重新取样,减少数据量。滤波的时候,要尽量保持原来数据测量 的精确性。因此要考虑合适的滤波方法。 滤波的方法可以分为空间域和频率域法。可以试一试 MATLAB 里面的中值滤波、傅里叶滤波等。 滤波以后,地表的梯度会发生变化,变得平缓。梯度一般可以用微分和差分来表示,一般可以和一 阶微分方程联系起来。比如温度梯度。那么这种滤波导致的梯度变化实际也可以反映温度的扩散。 经过多次滤波以后,梯度变得平缓,就像温度经过传导扩散后,温度分布变得均匀。 如果需要在不同的尺度下对地表进行研究,那么就需要使用多尺寸显微镜和小波分析了。通过 小波的多尺度分解,灰度-高度图被分解为细节不同的灰度图。这样 3D 高度的分析通过 MATLAB 的图像功能变成了 2D 的灰度图像。对于高度的处理变成了对于灰度的处理。对于物理量的处理变 成了对于颜色的处理。 因此,在 MATLAB 中解决问题的时候,通过增加图像颜色处理功能,可以把三维的问题降为 2D 来处理,降低了处理问题的难度。在 MATLAB 里面,数据文本和图像通过伪彩色功能联系到了 一起,使它们变成了一回事。数就是色,色就是数。 MATLAB 三维绘图命令已经被集成到菜单里面来,可以很方便地绘制三维图像。具体的绘图命 令就不反复说了,对于 MATLAB 来说,由于命令的高度集成化,实现具体的功能可以查书、查帮助 文件,但是理解这些命令后面的内容就相对较难了。 2.5 MATLAB 图像处理研究的基本问题 MATLAB 图像处理研究的内容是什么呢?为了给出一个整体大概的印象,这里简单列举一下图 像处理研究基本问题的主要部分。 MATLAB 图像处理研究的基本问题主要包括。 ‹ 图像变换:通过图像的变换,改变图像的表示域以及表示数据,给后继工作带来极大方便。 例如,傅里叶变换可以使图像的处理和分析在频域中进行,使运算简单;而使用离散余弦 变换(DCT)则可以压缩图像数据,从而便于图像传输和存储。 ‹ 图像增强:图像在产生、传输过程中往往会失真,所得的图像和原图像有某种程度的差别。 人们可以估计出使图像质量降低的一些可能原因,针对这些原因采取简单易行的方法,改 善图像质量。 ‹ 图像分析:为了有效地研究和分析图像,往往需要对给定的图像及分割的图像区域用更为 简单明确的数值、符号或图形来表示。这些数值、符号或图形是按照一定的概念和公式从 原图像中提取出来的,它们反映原图像的重要信息及原图像的主要特性。 ‹ 图像压缩:多媒体和互联网的发展,使得图像的传输越来越重要。为了减少传输图像时所 需花费的代价,最好采用合适的方法对图像进行压缩和编码,以便于图像的传输和存储。 为了便于学习查找,在 MATLAB 中,图像工具箱相关函数命令分以下几类。 ‹ 图像分析和探测:显示、输入,以及输入图像。 www.dozan.cn 秦襄培 编著 www .do zan .cn MATLAB 图像处理 28 ‹ GUI 工具:模块化交互工具和联合公用程序函数。 ‹ 空间转换和图像匹配:空间转换和图像匹配。 ‹ 图像分析和统计:图像分析、纹理分析、像素值查看以及图像统计计算。 ‹ 图像计算:图像的加、减、乘、除。 ‹ 图像增强和恢复:增强和恢复图像。 ‹ 线性滤波和变换:线性滤波、滤波器设计、以及图像变换。 ‹ 形态学运算:形态学图像处理。 ‹ 基于 ROI,邻域,以及块的处理:基于 ROI、邻域以及块的操作。 ‹ 色彩索引图和颜色空间函数:操作图像色彩。 ‹ 其他各种函数:数组操作、Demos、参考和其他工具箱应用函数。 由于 MATLAB 的图像处理函数众多,全部掌握需要一个过程,这里先有一个大致的印象就可以 了。这些函数有的在不同版本的 MATLAB 中不断更新变化,有的变化比较大,有的只是某些参数发 生了变化,当在使用不同版本的 MATLAB 的时候,需要注意哪些地方发生了变化。后面将具体查看 新版本的 MATLAB 在这些函数上的变化。 2.6 MATLAB 图像处理新功能的相关函数 在第 1 章里面介绍了 MATLAB R2010b 的 7.1 版图像处理工具箱的新特性,这里具体讲解其相 关的函数命令和例子。 2.6.1 函数命令 corner Corner 函数功能是查找图像里面的角点,其句法如下: C = corner(I) C = corner(I, method) C = corner(I, N) C = corner(I, method, N) C = corner(..., Name,Value) 功能描述 C = corner(I)探测图像 I 里面的角点并将相应数据返回到矩阵 C。 C = corner(I, method)使用指定方法探测图像 I 里面的角点 C = corner(I, N)探测图像 I 里面的角点并返回角点数目 N 的最大限制值。 C = corner(I, method, N)使用指定方法探测图像 I 里面的角点数目的最大限制值。 C = corner(..., Name,Value)指定参数和相应数值,控制拐角探测算法的各种方位。 Corner 函数和 cornermetric 函数都可以探测图像中的拐角。对于大多数应用来说, 可以使用简化的 corner 函数只用一步找到拐角。如果你希望对角点选择拥有更大 的控制权,可以使用 conermetric 函数来计算一个拐角公制矩阵,然后编写你自己 的算法来找到峰值。Corner 函数参数及其描述如表 2.2 所示。 表 2.2 Corner 函数参数及其描述 www.dozan.cn 秦襄培 编著 www .do zan .cn 第 章 MATLAB 图像处理的特点及学习方法 29 参数 描述 I 一个灰度图像或者二值图像。I 是一个稀疏数组。 method 用于探测角点的算法。支持的算法为: 'Harris': Harris 角点探测算子 'MinimumEigenvalue':Shi & Tomasi 最小特征值方法 默认值:'Harris' N Corner 函数所能返回的最大角点数目 默认值:200 (续表) 参数 描述 Name-Value 参数副 可选的逗号分离一对 Name,Value 参数,此处 Name 是参数名,Value 是对 应的参数值。Name 必须出现在单引号内('')。你可以指定几个 name-value 参 数副,按照任意类似 Name1,Value1,…,NameN,ValueN 的顺序。 FilterCoefficients 一个矢量,v,可分平滑滤波器的滤波器系数。输出积,V*V',给出完整的滤 波器核心。 默认值:fspecial('gaussian',[5 1],1.5) QualityLevel 一个标量,Q,此处 0 < Q < 1,指定角点的最小确认特点。当候选拐角具有 比 Q * max(公制拐角)小的公制值,工具箱会舍弃他们。使用较大的 Q 值 来去除错误的角点。 默认值:0.01 SensitivityFactor 一个标量,K 此处 0 < K < 0.25,指定 Harris 探测算法中使用的敏感因子。K 值越小,该算法越能够探测到锐利的转角。仅当使用'Harris'算法时使用该参 数。 默认值:0.04 C 一个 M×2 的矩阵,包含了图像 I 中探测出的角点的 X 和 Y 的坐标值。C 是一 个双精度矩阵。 算法 Corner 函数对候选角点执行了非最大量抑制,角点至少有两个分开的像素。 兼容性考虑 在 R2008b 和以前的版本中,可以用 cornermetric 函数计算一个 cornermetric 矩阵找到拐角,然 后找到峰值。现在,使用 corner 函数能够简化工作流程。 参见 Cornermetric 函数。 下面具体说明如何使用 corner 函数探测角点。 www.dozan.cn 秦襄培 编著 www .do zan .cn MATLAB 图像处理 30 图2.3 角点探测示意图 当寻找图像间的相似性时,角点是你能使用的最可靠的特征。图 2.3 显示了三个像素,一个在 目标内,一个在目标的边缘上,一个在角点。如果像素在目标内,其周围像素(实线方框)与其邻 域周围像素(虚线方框)相当。对于其所有方向上的邻近像素都是如此。如果一个像素在目标的边 缘上,其周围像素在一个方向上与其邻域像素不同,但是在另一个方向(垂直方向)与其邻域像素 相当。一个拐角像素与所有方向上的邻域像素都不同。 Corner 函数识别一副图像中的拐角。可以使用两种方法,Harris 拐角识别方法(默认值)和 Shi 和 Tomasi 的最小特征值法。两种方法都使用依靠矩形差分矩阵之和的特征值(SSD)的计算。SSD 矩阵的特征值代表一个像素的邻域和其邻近像素的邻域之间的差别。一个像素的邻域与其邻近像素 的邻域差别越大,特征值就越大。特征值越大,一个像素就越可能出现在角点。 下面的例子说明了如何使用 corner 函数定位拐角,并通过重新定义所希望的拐角最大数目调 整结果。 例 2.1 探测并画出一个棋盘图像里面的角点。 代码 2.1 这里举个例子看看如何使用 Corner 函数探测并画出一个棋盘图像里面的角点: I = checkerboard(40,2,2);% 生成一个棋盘图像,并找到角点 C = corner(I);% 当期望角点的最大数目为默认设置值 200 时,显示角点。 subplot(1,2,1); imshow(I); hold on plot(C(:,1), C(:,2), '.', 'Color', 'g') title('Maximum Corners = 200') hold off corners_max_specified = corner(I,3);% 当期望角点数目为 3 时,显示角点。 subplot(1,2,2); imshow(I); hold on plot(corners_max_specified(:,1), corners_max_specified(:,2), ... '.', 'Color', 'g') title('Maximum Corners = 3')%图 2.4 hold off 图2.4 棋盘图角点探测 2.6.2 函数命令 rsetwrite www.dozan.cn 秦襄培 编著 www .do zan .cn 第 章 MATLAB 图像处理的特点及学习方法 31 Rsetwrite 函数从图像文件中生成降低分辨率的图像数据集,其句法如下: ‹ rsetfile = rsetwrite(File_Name) ‹ rsetfile = rsetwrite(File_Name, output_filename) ‹ rsetfile = rsetwrite(adapter, output_filename) 功能描述 ‹ rsetfile = rsetwrite(File_Name) 此处 File_Name 是一个 TIFF 或者 NITF 图像文件,从指定文件生成一个降低了分辨率的图像 数据集(R-Set)。这个 R-Set 文件被写入当前工作文件夹,其文件名基于输入文件名。例如,如果 File_Name 是'VeryLargeImage.tiff',调整后的文件名将为'VeryLargeImage.rset'。如果图像文件包 含多图像,只有第一个会被用到。 ‹ rsetfile = rsetwrite(File_Name, output_filename) 从指定文件生成一个 R-Set,使用 output_filename 作为新文件的文件名。在这个例子中, rsetfile 和 output_filename 包含相同的字符。 ‹ rsetfile = rsetwrite(adapter, output_filename) 从指定 Image Adapter 目标生成一个 R-Set,适配对象。Image Adapter 是用户定义的类,提 供 rsetwrite,一个通用 API 来读入一个指定图像文件格式。参见 ImageAdapter 相关文件了解更多 细节。 评论 Restwrite 函数通过将一个图像分成空间图像块,在不同分辨率水平重新对图像采样,来生成 一个 R-Set 文件。当在图像工具打开 R-Set 文件并放大时,可以看到一个更高分辨率的图像块。当 图像缩小时,可以看到一个更低分辨率的图像块。通过这种方法,图像清晰度和内存使用量达到了 优化平衡。R-Set 文件包含一个全分辨率数据的压缩副本。 因为 R-Set 的生成是比较耗时间的,所以用一个进度条显示当前所处操作状态。如果取消操作, 进度条会停止,没有文件写入,rsetfile 变量将为空。 Restwrite 函数支持未经压缩和 2.0 版或更高版本的 NITF 图像文件。它不支持超过三波段或者 带有浮点数据的 NITF 文件。但是如果图像带有超过一波段的无符号整数数据,Restwrite 函数可以 支持。 当图像尺寸比单个 R-Set 图像块小的时候,从一个大图像生成一个 R-Set 是可能的,所生成的 R-Set 文件将可能比原始文件大些,图像载入需要更多的时间。当前的 R-Set 图像块尺寸为 512 x 512 像素。 例 2.2 生成一个 R-Set 文件。 代码 2.2 使用一个 R-Set 显示一个超大图像。可以将下面例子中的'MyReallyBigImage.tif'替 换为你所要显示的文件名: big_file = 'MyReallyBigImage.tif'; rset_file = rsetwrite(big_file); imtool(rset_file) 例 2.3 TIFF 文件转换为 R-Set 文件。 代码 2.3 在同一目录下,将每个包含超大图像的 TIFF 文件转换成 R-Set 文件。将 R-Set 文件 放入一个临时目录: d = dir('*.tif*'); www.dozan.cn 秦襄培 编著 www .do zan .cn MATLAB 图像处理 32 image_dir = pwd; cd(tempdir) for p = 1:numel(d) big_file = fullfile(image_dir, d(p).name); rsetwrite(big_file); end 参见函数 Imread 和 imtool。 2.6.3 函数命令 blockproc Blockproc 函数用于对图像进行分开的块操作。其句法如下: ‹ B = blockproc(A,[M N],fun) ‹ B = blockproc(src_filename,[M N],fun) ‹ B = blockproc(adapter,[M N],fun) ‹ blockproc(...,param,val,...) 功能描述 ‹ B = blockproc(A,[M N],fun) 通过使用函数 fun 对图像中每个分开的 M×N 块进行,来处理图像 A,将结果拼合到 B,B 为输 出矩阵。函数 fun 是到一个函数的函数句柄,它接受一个块结构作为输入,返回一个矩阵,向量或 者标量 Y。例如,Y = fun(block_struct)。(需要更多有关块结构的信息,参见下面的定义区。)对 输入图像 A 的每个数据块,blockproc 传递一个块结构中的块到用户函数,fun,用以生成 Y,对应 输出图像中的块。如果 Y 为空,当处理完所有的块以后,blockproc 不生成任何输出,返回空。选 择一个合适的块尺寸能够显著提高运算速度。需要更多信息的话,参见图像处理工具箱文档中的 Choosing Block Size。 ‹ B = blockproc(src_filename,[M N],fun) 处理图像 src_filename,每次读入和处理一个图像块。该语法对于处理超大图像很有用,因为 每次只有一个图像块被读入内存。如果输出矩阵 B 太大,以至不能装入内存,去掉输出参数,使 用'Destination'参数/值副进行替代,以便将输出写入一个文件。 ‹ B = blockproc(adapter,[M N],fun) 处理由 adapter 指定的源图像,一个 ImageAdapter 对象。一个 ImageAdapter 是用户定义的 类,给 blockproc 函数提供了一个通用 API 用来读入和写入一个特定的图像文件类型。需要更多 信息,参见图像处理工具箱文档中的 Writing an Image Adapter Class。 ‹ blockproc(...,param,val,...) 处理输入图像,指定控制不同方面块行为参数和对应值。参数名不区分大小写。 表 2.4 Blockproc 函数参数表 参数 描述 A 输入图像 [M N] 图像 A 的块尺寸 fun 接受快结构作为输入的函数的句柄,返回一个矩阵,向量或者标量 Y。 src_filename 输入图像 adapter 一个用户定义的类,提供一个通用 API 用来读入和写入一个特定的图像文件类型 www.dozan.cn 秦襄培 编著 www .do zan .cn 第 章 MATLAB 图像处理的特点及学习方法 33 param,val 参数和数值,用来控制块行为 Parameter 参数 'BorderSize' 一个二元素向量,[V H],指定加在每个图像块的边界伤的像素数量。函 数在每个图像块上面和下面加上 V 行,左边和右边加上 H 列。结果每个 块的尺寸变为 [M + 2*V, N + 2*H] 默认值为[0 0],意思是没有边界。在默认状态下,函数自动去除 fun 函 数处理结果的边界。需要更多信息,参见'TrimBorder'参数。超出图像边 界的图像块函数填充零。 'Destination' Blockproc 函数输出目的地。当指定'Destination'参数,blockproc 将不 返回处理后的图像作为一个输出参数,而是将输出写入'Destination'。 (当指定了'Destination'参数后,就不能请求得到一个输出参数了。 有效'Destination'参数有: TIFF 文件名:一个字符文件名,以'.tif'结尾。当存在同名文件时, 同名文件将被覆盖。 ImageAdapter 对象:一个 ImageAdapter 类的实例。 ImageAdapters 提供了一个读入和写入任意图像文件格式的接口。 当预期输出太大,无法载入内存的时候,'Destination'参数就非常有用 了。它为任意大图像提供了文件到文件的工作流程。 'PadPartialBlocks' 一个逻辑标量。当设置为 true 时,blockproc 填充部分缺失的图像块, 以便使它们成为满尺寸(M×N)的图像块。当图像尺寸不能刚好被图像 块尺寸整除的时候,欠尺寸的图像块数量会增多。如果存在这种情况, 欠尺寸图像块位于图像的右下角。默认值为 false,意思是函数不填充 欠尺寸图像块,而是直接对其进行处理。需要的时候,blockproc 使用 零对欠尺寸图像块进行填充。 'PadMethod' 'PadMethod'决定 blockproc 将如何填充图像边界。 选项为: X:用标量填充值(X)填充图像。默认值 X == 0。 'replicate':重复图像 A 的边界元素。 'symmetric':使用图像 A 的镜像图像对其进行填充。 'TrimBorder' 一个逻辑标量。当设置为 true 时,blockproc 函数对用户函数 fun 的输 出图像进行边界像素修剪。函数去除 fun 函数的输出图像边界的上下 V 行,左右边界的 H 列。'BorderSize'参数定义 V 和 H。默认值为 true,意 思是 blockproc 函数自动去除 fun 函数的输出图像边界。 文件格式支持:函数 blockproc 的输入和输出文件(由 src_filename 及'Destination'参数指 定)必须具有以下文件类型之一,必须具有以下列出的文件扩展名之一: 读入/写入文件格式: TIFF (*.tif, *.tiff), JPEG2000 (*.jp2, *.j2c, *.j2k) 只读文件格式: JPEG2000 (*.jpf, *.jpx) 定义 一个块结构是一个包含块数据和其他有关块信息的 MATLAB 结构。块结构的域为: block_struct.border:一个两元素向量,[V H],指定围绕块数据垂直和水平方向的填充尺 寸。(参见输入部分的'BorderSize'参数) block_struct.blockSize:一个两元素向量,[rows cols],指定块数据的尺寸。如果边界已 经指定,则尺寸不包括边界像素。 block_struct.data: 块数据的 M×N 或者 M×N×P 矩阵。 block_struct.imageSize: 一个两元素向量[rows cols],指定全尺寸输入图像。 www.dozan.cn 秦襄培 编著 www .do zan .cn MATLAB 图像处理 34 block_struct.location:一个两元素向量,[row col],指定输入图像中块数据的第一像素 (最小行数,最小列数)的位置。如果边界已经指定了,该位置指的是离散快数据的第一个像素, 而不是增加的边界像素。 例 2.4 生成一个图像索引图。 代码 2.4 fun = @(block_struct) imresize(block_struct.data,0.15); I = imread('pears.png'); I2 = blockproc(I,[100 100],fun); figure; imshow(I); figure; imshow(I2); %生成图像如图 2.5 所示 图2.5 图像索引图 例 2.5 设置每 32×32 图像块的像素值为该图像块元素的标准偏差。 代码 2.5 fun = @(block_struct) ... std2(block_struct.data) * ones(size(block_struct.data)); I2 = blockproc('moon.tif',[32 32],fun); figure; imshow('moon.tif'); figure; imshow(I2,[]); %生成图像如图 2.6 所示 图2.6 图像块标准偏差处理 例 2.6 将一个 RGB 图像的红色和绿色波段对调,并将结果写入一个新的 TIFF 文件。 代码 2.6 I = imread('peppers.png'); fun = @(block_struct) block_struct.data(:,:,[2 1 3]); blockproc(I,[200 200],fun,'Destination','grb_peppers.tif'); figure; imshow('peppers.png'); www.dozan.cn 秦襄培 编著 www .do zan .cn 第 章 MATLAB 图像处理的特点及学习方法 35 figure; imshow('grb_peppers.tif');%生成图像如
本文档为【《MATLAB图像处理宝典》02章】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_791958
暂无简介~
格式:pdf
大小:1MB
软件:PDF阅读器
页数:31
分类:互联网
上传时间:2012-05-22
浏览量:74