摘    要:本实验主要实现形态学图像处理。主要验证图像集合的交并补运算、膨胀和腐蚀处理并利用图像集合的运算,实现形态学边界抽取算法并进行特征边界抽取。同时将膨胀和腐蚀扩展至灰度图像,编写函数实现灰度图像形态学梯度公式和Tophat变换公式,最后对形态学梯度变换和Tophat变换后的输出图像进行比较。

1 形态学

形态学(motphology)一词通常代表生物学的一个分支。它是研究动物和植物的形态和结构的学科。我们在这里使用同一词语表示数学形态学的内容,将数学形态学(mathenmfical  morphology)作为工具从图像中提取对于表达和描绘区域形状有用处的图像分量,比如边界、骨架以及凸壳,等等。我们对用于预处理或后处理的形态学技术同样感兴趣,比如形态学过滤、细化和修剪等等。

数学形态学的语言是集合论。同样,形态学为大量的图像处理问题提供了一种一致的有力方法。数学形态学中的集合表示图像中的不同对象。例如,在二值图像中,所有黑色像素的集合是图像完整的形态学描述。在二值图像中,正被讨论的集合是二维整数空间 (P)的元素,在这个二维整数空间中,集合的每个元素都是一个多元组(二维向量),这些多元组的坐标是一个黑色(或白色,取决于事先的约定)像素在图像中的坐标(x,y)。灰度级数字图像可以表示为Z空间(Z3)上分量的集合。在这种情况下,集合中每个元素的两个分量是像素的坐标,第3个分量对应于像素的离散灰度级值。更高维度空间中的集合可以包含图像的其他属性,比如颜色和随时间变化的分量。

2 图像的逻辑运算

很多应用是以形态学概念为基础的,并涉及二值图像。逻辑运算尽管本质上很简单,但对于实现以形态学为基础的图像处理算法是一种有力的补充手段。本实验中,我们关注的是涉及二值图像和灰度图像的逻辑运算。

在图像处理中用到的主要逻辑运算是:与、或和非(即交并补)。图1中总结了这些运算的性质。这些运算在功能上是完善的。它们可以互相组合形成其他逻辑运算。

图1 主要的逻辑运算

在两幅或多幅图像的对应像素间逐像素进行逻辑运算(除了“非”运算,此运算只对单一图像的像素进行)。因为只有在两个变量都是1时,两个二进制变量的“与”运算才为1,所以只有两幅输人图像的对应像素均为1时,“与”运算的结果才是1。图2显示了涉及图像逻辑运算的不同例子。这里,黑色表示1,而白色表示0(这里使用两种约定的说法,有时会颠倒黑色和白色二值的意义,取决于在给定情况下哪种表达更清楚。使用图1中的定义构造其他的逻辑运算很容易。例如,异或运算是当两个像素的值不同时结果为1,否则为0。这种运算与“或”运算不同。“或”运算在两个像索有一个为1或两个均为1时结果为1。

图2 图像逻辑运算

3 二值图像膨胀与压缩

二值图像膨胀:设A和B是(Z2)中的集合,A被B膨胀定义为:

这个公式是以得到B的相对于它自身原点的映像并且由z对映像进行位移为基础的。A被占膨胀是所有位移z的集合,这样,B和 A至少有一个元素是重叠的。与在其他形态学运算中一样,集合B通常叫做膨胀的结构函数。

二值图像压缩:对Z中的集合AB,使用B对A进行腐蚀定义为:

这个公式说明,使用BA进行腐蚀是所有B中包含于A中的点z的集合用z平移。

4 形态学边界特征提取

集合A的边界表示为 ,它可以通过先由BA腐蚀,而后用A减去腐蚀得到。即:

这里B是一个适当的结构元素。图3说明了边界提取的机理。这幅图像显示了一个简单的二值对象、一个结构元素B和使用式 的结果。尽管图3中显示的结构元素是最常用的结构元素之一,但它绝对不是惟一的。例如,使用由1组成的5×5大小的结构元素将得到2到3个像素宽的边界。

图3 边界提取机理

5 灰度图像扩展——膨胀和腐蚀

用结构元素B对灰度图像进行膨胀表示为:,定义为:

这里分别是f和b的定义域。f和b是函数而不是二值形态学情况中的集合。 必须在f的定义域内以及x和y 必须在b的定义域内的条件与膨胀的二值定义中的条件是相似的(这里两个集合的交集至少应有一个元素)。该公式的形式与二维卷积是相似的,并且用最大值运算代替卷积求和,用加法运算代替卷积乘积。

用结构元素B对灰度图像进行腐蚀表示为: ,定义为:

这里分别是f和b的定义域。平移参数必须在f的定义域内,而且x和y必须在b的定义域内,这与腐蚀的二值定义中的条件相似。同样,公式在形式上与二维相关是相似的,并且用最小值运算代替了相关运算,用减法运算代替了相关的乘积。

6 灰度图像形态学的应用

膨胀和腐蚀经常用于计算图像的形态学梯度,其公式为:

形态学梯度的作用是使输入图像中灰度级的跃变更为急剧。

另外一个应用是对图像进行形态学tophat变换,定义为:

如以前一样,f是输入图像,b是结构元素函数。该应用对于增强灰度图像的阴影细节很有用处。

7 实验结果讨论

本实验使用B=ones(3,3)矩阵作为结构元素,使用图像Fig9.20(left).jpg进行二值图像的膨胀、腐蚀和边缘特征提取处理,使用图像Fig9.39(a).jpg实现灰度图像的膨胀、腐蚀并进行形态学梯度公式运算和Tophat变换。

编写函数dilate_erode(ima,B)实现二值图像的膨胀与腐蚀,其中ima为输入图像,A为结构元素。图4给出了二值图像的膨胀、腐蚀和边缘特征提取等处理结果,可以看到,腐蚀图中消除了一些原图的细节,而膨胀图则相反。由于腐蚀图中主要消除了原图的边缘细节,因此根据边缘特征提取的原理,我们将原图像与腐蚀图像相减,即可得到院图像的边缘部分细节。

编写函数gray_dilate_erode(ima,B,operate)实现灰度图像的膨胀与腐蚀,其中ima为输入图像,B为结构元素,operate为可选操作膨胀’dilate’和腐蚀’erode’。图5给出了灰度图像的膨胀、腐蚀并与MATLAB自带函数进行对比,结果并无差异。使用公式:

  

分别实现形态学梯度公式和tophat变换,结果如图6所示。可以看到经过形态学梯度公式处理后的图像中灰度级的跃变更为急剧,边界轮廓明显,但输出图像有明显的噪声;而tophat变换后的输出图像的阴影细节得到增强,其他区域无明显变化。

8 实验结果图片

形态学及其他集合运算(Morphological and Other Set Operations)的更多相关文章

  1. 【Java EE 学习 28 上】【oracle学习第二天】【子查询】【集合运算】【几种数据库对象】

    一.子查询 1.为什么要使用子查询:问题不能一步求解或者一个查询不能通过一步查询得到. 2.分类:单行子查询和多行子查询. 3.子查询的本质:一个查询中包含了另外一个或者多个查询. 4.使用子查询的规 ...

  2. 详解SQL集合运算

    以前总是追求新东西,发现基础才是最重要的,今年主要的目标是精通SQL查询和SQL性能优化. 本系列[T-SQL基础]主要是针对T-SQL基础的总结. [T-SQL基础]01.单表查询-几道sql查询题 ...

  3. SQL集合运算参考及案例(一):列值分组累计求和

    概述 目前企业应用系统使用的大多数据库都是关系型数据库,关系数据库依赖的理论就是针对集合运算的关系代数.关系代数是一种抽象的查询语言,是关系数据操纵语言的一种传统表达方式.不过我们在工作中发现,很多人 ...

  4. Oracle学习之集合运算

    一.集合运算操作符  UNION:(并集)返回两个集合去掉重复值的所有的记录  UNION ALL:(并集)返回两个集合去掉重复值的所有的记录 INTERSECT:(交集)返回两个集合的所有记录,重复 ...

  5. Oracle学习(七):集合运算

    1.知识点:能够对比以下的录屏进行阅读 SQL> -- 查询10和20号部门的员工的3种方法 SQL> --1. select * from emp where deptno in (10 ...

  6. STL中的set集合容器进行集合运算:并、交、差实例

    集合容器的集合运算:并.交.差: #include "stdafx.h" #include <iostream> #include <set> #inclu ...

  7. sql的集合运算

    表的加减法 union:使用union 对表进行假发(并集)运算, union等集合运算符通常都会去除重复记录. select shohin_id, shohin_mei from shohin un ...

  8. [Swust OJ 632]--集合运算(set容器)

    题目链接:http://acm.swust.edu.cn/problem/632/ Time limit(ms): 1000 Memory limit(kb): 65535   Description ...

  9. SQL集合运算 差集 并集 交

    SQL-3标准中提供了三种对检索结果进行集合运算的命令:并集UNION:交集INTERSECT:差集EXCEPT(在Oracle中叫做 MINUS).在有些数据库中对此的支持不够充分,如MySql中只 ...

随机推荐

  1. 深度学习-tensorflow学习笔记(2)-MNIST手写字体识别

    深度学习-tensorflow学习笔记(2)-MNIST手写字体识别超级详细版 这是tf入门的第一个例子.minst应该是内置的数据集. 前置知识在学习笔记(1)里面讲过了 这里直接上代码 # -*- ...

  2. Method 'ExecuteAsync' in type 'System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy' does not have an implementation

    一.错误信息 Entity Framework 6.0数据迁移:Add-Migration XXXX 命令发生错误 System.Reflection.TargetInvocationExceptio ...

  3. 重构:越来越长的 switch ... case 和 if ... else if ... else

    在代码中,时常有就一类型码(Type Code)而展开的如 switch ... case 或 if ... else if ... else 的条件表达式.随着项目业务逻辑的增加及代码经年累月的修改 ...

  4. 第六次ScrumMeeting博客

    第六次ScrumMeeting博客 本次会议于10月31日(二)22时整在3公寓725房间召开,持续15分钟. 与会人员:刘畅.辛德泰.窦鑫泽.张安澜.赵奕.方科栋. 除了汇报任务外,窦鑫泽同学还就前 ...

  5. 团队Alpha冲刺(二)

    目录 组员情况 组员1(组长):胡绪佩 组员2:胡青元 组员3:庄卉 组员4:家灿 组员5:凯琳 组员6:丹丹 组员7:家伟 组员8:政演 组员9:黄鸿杰 组员10:刘一好 组员11:何宇恒 展示组内 ...

  6. 划分树---hdu4417---区间查找(不)大于h的个数

    http://acm.hdu.edu.cn/showproblem.php?pid=4417 Super Mario Time Limit: 2000/1000 MS (Java/Others)    ...

  7. Java多线程中的wait与notify

    一.wait: 1. wait 是 object 类的方法, sleep 是 thread 类的方法. 2. 当前的正在我这个对象访问的线程 wait. 3. 当前的这个线程, 锁定在当前对象的这个线 ...

  8. lintcode-120-单词接龙

    120-单词接龙 给出两个单词(start和end)和一个字典,找到从start到end的最短转换序列 比如: 每次只能改变一个字母. 变换过程中的中间单词必须在字典中出现. 注意事项 如果没有转换序 ...

  9. Hadoop HDFS环境搭建

    1,首先安装JDK,下面如果JDK出现安装错误,可以卸载 卸载 1.卸载用 bin文件安装的JDK方法: 删除/usr/java目录下的所有东西 2.卸载系统自带的jdk版本方法: 查看自带的jdk: ...

  10. (六)Jmeter重要组件的执行顺序及作用域

    一.Jmeter重要组件: 1)配置元件---Config Element: 用于初始化默认值和变量,以便后续采样器使用.配置元件大其作用域的初始阶段处理,配置元件仅对其所在的测试树分支有效,如,在同 ...