您的位置:首页 > 其它

形态学运算中腐蚀,膨胀,开运算和闭运算

2012-07-24 15:34 225 查看
以下是对形态学运算中腐蚀,膨胀,开运算和闭运算的概念和实现的搜集,一块学习了

转自http://moorechia.blog.163.com/blog/static/464070902011628112743171/

1. 腐蚀是一种消除边界点,使边界向内部收缩的过程。

可以用来消除小且无意义的物体。

腐蚀的算法:

用3x3的结构元素,扫描图像的每一个像素

用结构元素与其覆盖的二值图像做“与”操作

如果都为1,结果图像的该像素为1。否则为0。

结果:使二值图像减小一圈

2. 膨胀是将与物体接触的所有背景点合并到该物体中,使边界向外部扩张的过程。

可以用来填补物体中的空洞。

膨胀的算法:

用3x3的结构元素,扫描图像的每一个像素

用结构元素与其覆盖的二值图像做“与”操作

如果都为0,结果图像的该像素为0。否则为1

结果:使二值图像扩大一圈

3. 先腐蚀后膨胀的过程称为开运算。

用来消除小物体、在纤细点处分离物体、平滑较大物体的边界的同时并不明显改变其面积。

4. 先膨胀后腐蚀的过程称为闭运算。

用来填充物体内细小空洞、连接邻近物体、平滑其边界的同时并不明显改变其面积。

转自http://blog.csdn.net/welcome_xu/article/details/6694985

二值形态学
数学形态学中二值图像的形态变换是一种针对集合的处理过程。其形态算子的实质是表达物体或形状的集合与结构元素间的相互作用,结构元素的形状就决定了这种运算所提取的信号的形状信息。形态学图像处理是在图像中移动一个结构元素,然后将结构元素与下面的二值图像进行交、并等集合运算。
基本的形态运算是腐蚀和膨胀。
在形态学中,结构元素是最重要最基本的概念。结构元素在形态变换中的作用相当于信号处理中的“滤波窗口”。用B(x)代表结构元素,对工作空间E中的每一点x,腐蚀和膨胀的定义为:



用B(x)对E进行腐蚀的结果就是把结构元素B平移后使B包含于E的所有点构成的集合。用B(x)对E进行膨胀的结果就是把结构元素B平移后使B与E的交集非空的点构成的集合。先腐蚀后膨胀的过程称为开运算。它具有消除细小物体,在纤细处分离物体和平滑较大物体边界的作用。先膨胀后腐蚀的过程称为闭运算。它具有填充物体内细小空洞,连接邻近物体和平滑边界的作用。
可见,二值形态膨胀与腐蚀可转化为集合的逻辑运算,算法简单,适于并行处理,且易于硬件实现,适于对二值图像进行图像分割、细化、抽取骨架、边缘提取、形状分析。但是,在不同的应用场合,结构元素的选择及其相应的处理算法是不一样的,对不同的目标图像需设计不同的结构元素和不同的处理算法。结构元素的大小、形状选择合适与否,将直接影响图像的形态运算结果。因此,很多学者结合自己的应用实际,提出了一系列的改进算法。如梁勇提出的用多方位形态学结构元素进行边缘检测算法既具有较好的边缘定位能力,又具有很好的噪声平滑能力。许超提出的以最短线段结构元素构造准圆结构元素或序列结构元素生成准圆结构元素相结合的设计方法,用于骨架的提取,可大大减少形态运算的计算量,并可同时满足尺度、平移及旋转相容性,适于对形状进行分析和描述。

以下摘自http://blog.sina.com.cn/s/blog_73ef08a80100vybm.html

数学形态学在图像处理中的主要应用包括:边缘检测、图像分割、形态骨架提取、噪声滤除。

选取结构元素的方法:多结构元素、遗传算法。

图像形态学主要有四个操作,即膨胀、腐蚀、开运算和闭运算

(1)在讨论四个操作之前,我们先看看核结构

view plaincopy to clipboardprint?

IplConvKernel* cvCreateStructingElementEx(
int
cols,
int
rows,
int
anchor_x,
int
anchor_y,
int
shape,
int*
values = null
);

IplConvKernel* cvCreateStructingElementEx( int cols, int rows, int anchor_x, int anchor_y, int shape, int* values = null );

view plaincopy to clipboardprint?

voidcvReleaseStructingElement(

IplConvKernel** element
);

void cvReleaseStructingElement( IplConvKernel** element ); (2)膨胀:将一些图像(I)与核(T)进行卷积

核可以是任意形状,多为正方形或者圆形,核可以视为模板或掩码,膨胀是求局部最大值的操作

膨胀常用于填补凹洞

view plaincopy to clipboardprint?

voidcvDilate(

IplImage* src,
IplImage* dst,
IplConvKernel* B = NULL,
int
iterations = 1
);

void cvDilate( IplImage* src, IplImage* dst, IplConvKernel* B = NULL, int iterations = 1 );(3)腐蚀:腐蚀操作即求核区域像素的最小值。

腐蚀能够消除细的凸起

view plaincopy to clipboardprint?

voidcvErode(

IplImage* src,
IplImage* dst,
IplConvKernel* B = NULL, //B即核,下同
int
iterations = 1 //如名,迭代次数,下同
);

void cvErode( IplImage* src, IplImage* dst, IplConvKernel* B = NULL, //B即核,下同 int iterations = 1 //如名,迭代次数,下同 );(4)开运算:先腐蚀后膨胀,消除高于其邻近点的孤立点

(5)闭运算: 先膨胀后腐蚀,消除低于其邻近点的孤立点

(6)opencv提供了更通用的形态学操作

view plaincopy to clipboardprint?

voidcvMorphologyEx(

const
CvArr* src,
CvArr* dst,
CvArr* temp, //缓存数组,大小影后源图像大小相同
IplConvKernel* element,
int
operation, //包括CV_MOP_OPEN,CV_MOP_CLOSE,CV_MOP_GRADIENT,CV_MOP_TOPHAT,CV_MOP_BLACKHAT
int
iterations = 1 //此处的迭代可能会让人误解,以为对闭操作(或其他)的迭代是膨胀-腐蚀-膨胀-腐蚀,实际上是膨胀-膨胀-腐蚀-腐蚀
);

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐