腐蚀膨胀算法详细解释
- 格式:doc
- 大小:241.50 KB
- 文档页数:8
形态学运算中腐蚀,膨胀,开运算和闭运算(针对二值图而言)6.1腐蚀腐蚀是一种消除边界点,使边界向内部收缩的过程。
可以用来消除小且无意义的物体。
腐蚀的算法:用3x3的结构元素,扫描图像的每一个像素用结构元素与其覆盖的二值图像做“与”操作如果都为1,结果图像的该像素为1。
否则为0。
结果:使二值图像减小一圈把结构元素B平移a后得到Ba,若Ba包含于X,我们记下这个a点,所有满足上述条件的a点组成的集合称做X被B腐蚀(Erosion)的结果。
用公式表示为:E(X)={alBa C X}=X©B,如图6.8所示。
图6.8腐蚀的示意图图6.8中X是被处理的对象,B是结构元素。
不难知道,对于任意一个在阴影部分的点a,Ba包含于X,所以X被B腐蚀的结果就是那个阴影部分。
阴影部分在X的范围之内,且比X小,就象X被剥掉了一层似的,这就是为什么叫腐蚀的原因。
值得注意的是,上面的B是对称的,即B的对称集Bv=B,所以X被B腐蚀的结果和X被Bv腐蚀的结果是一样的。
如果B不是对称的,让我们看看图6.9,就会发现X被B腐蚀的结果和X被Bv腐蚀的结果不同。
y图6.9结构元素非对称时,腐蚀的结果不同图6.8和图6.9都是示意图,让我们来看看实际上是怎样进行腐蚀运算的。
在图6.10中,左边是被处理的图象X (二值图象,我们针对的是黑点),中间是结构元素B ,那个标有origin 的点是中心点,即当前处理元素的位置,我们在介绍模板操作时也有过类似的概念。
腐蚀的方法是,拿B 的中心点和X 上的点一个一个地对比,如果B 上的所有点都在X 的范围内,则该点保留,否则将该点去掉;右边是腐蚀后的结果。
可以看出,它仍在原来X 的范围内,且比X 包含的点要少,就象X 被腐蚀掉了一层。
o Q Q Q o & QO Qo Q o O oooo o o o o o 0- 0 O 0 o o •• • ■ Oo o oo o o 0 o o o o o 0 0 o o o ••o o o oo o o o ■ ■ o o 0 0 o o o ••o 0 0 oo o o 0 ■ • ♦ o QQ Q ■0 0 & o Q Q Q 0 0 * * 0 0 0 O 0 0 • ♦ ♦■ 0 Q Q ◎ 00o o ■ •0 0 o O ■ ■ ■ ■ *« O Q Qo o■ ■ ■ ■ Q Q c- O■ * ■ o GO O O O o o •o o ■ •• ■ o o o o O oO ■ ■ ■o 0o O O o O ♦<Q 0■••■ o a o o O o O o o 0 0 o 0oO o oooo\>o0 00o o o o 0 0 0'originFEX e 6图6.10腐蚀运算 图6.11为原图,图6.12为腐蚀后的结果图,能够很明显地看出腐蚀的效果。
python 膨胀腐蚀特征提取Python膨胀腐蚀特征提取是图像处理中的基础操作之一,是将图像进行形态学处理的重要工具。
本文将介绍Python膨胀腐蚀特征提取的基本概念、算法原理以及在实际应用中的使用方法。
一、Python膨胀腐蚀特征提取的基本概念Python膨胀腐蚀特征提取是图像形态学处理中的基本操作之一。
它是一种将二值图像进行形态学处理的方法,可以使图像中的物体更加连通或分离,同时还可以修复被噪声破坏的图像。
膨胀是将图像中的白色区域扩张,使它更加连通,而腐蚀则是将图像中的白色区域收缩,使其更加分离。
二、Python膨胀腐蚀特征提取的算法原理Python膨胀腐蚀特征提取的算法原理主要是基于图像的结构形态学理论。
膨胀操作是将图像中的白色区域扩张,具体实现过程是对于每个像素点,将其覆盖一个固定大小的方形区域,将该区域内的所有像素点都标记为白色。
而腐蚀操作则是将图像中的白色区域收缩,具体实现过程是对于每个像素点,检查其周围固定大小的方形区域,如果该区域内所有像素点都是白色,则该点也被标记为白色,否则标记为黑色。
三、Python膨胀腐蚀特征提取的使用方法Python膨胀腐蚀特征提取在实际应用中有广泛的使用。
首先,可以用它来去除图像中的噪声。
其次,可以利用膨胀操作来连接图像中的对象,使它们更加连通。
例如,在数字识别中,可以将数字图像进行膨胀处理,使数字之间的空隙更小,从而提高识别率。
此外,还可以使用腐蚀操作来分离图像中的对象,例如在手写数字分割中,可以使用腐蚀操作将数字分离开来,以便更好地进行识别。
综上所述,Python膨胀腐蚀特征提取是图像处理中的基础操作之一,具有广泛的应用。
通过对膨胀腐蚀算法原理的深入理解,并结合实际应用,可以更好地理解和应用这一技术。
腐蚀膨胀算法原理
腐蚀膨胀算法是数字图像处理中一种常用的算法,它能够有效处理图像的边界检测以及对象提取问题。
在本文中,将深入讨论腐蚀膨胀算法的原理、优点和应用。
一、腐蚀膨胀算法原理
腐蚀膨胀算法是一种基于细化算法的图像处理算法,主要的思想是利用腐蚀或膨胀的操作改变图像的像素点,从而达到对图像边界的检测或对象的提取。
首先,我们需要确定腐蚀或膨胀操作的半径,半径越大,腐蚀或膨胀操作越明显。
腐蚀操作是把一个特定半径内所有像素点的灰度值变为0,而且腐蚀的成度越大,说明这个特定半径内的所有像素点的灰度值越小。
膨胀操作则是把一个特定半径内所有像素点的灰度值变为最大值,它与腐蚀操作相反,半径越大,膨胀的成度越大,说明特定半径内的所有像素点的灰度值越大。
二、腐蚀膨胀算法的优点
腐蚀膨胀算法比较简单,易于理解和实现,它不需要比较复杂的数学模型,也不需要复杂的参数调整,是图像处理中一种简单有效的算法。
另外,它还具有较强的抗噪声性能,也就是说它能够比较准确的检测出信号强度相对较弱的边界。
三、腐蚀膨胀算法的应用
腐蚀膨胀算法常用于图像边界检测和对象提取等方面,它具有一定的实际应用,例如在机器视觉中,可以使用腐蚀膨胀算法实现对特
定物体的准确定位和识别。
另外,也可以使用它来实现图像的噪声消除,或者将较弱的信号边界转换为较强的信号边界,以便使得后续的图像处理任务变得更加容易。
综上所述,腐蚀膨胀算法是一种常用的图像处理算法,主要用于图像的边界检测和对象提取,具有一定实际应用。
此外,它还具有较强的抗噪声性能,可以比较准确的检测出信号强度较弱的边界。
因此,腐蚀膨胀算法在图像处理中具有重要的意义。
腐蚀膨胀算法详细解释腐蚀算法是指通过与给定的结构元素进行最小值运算以缩小图像的白色区域。
它在图像中寻找白色区域,对这些区域进行腐蚀操作,使它们变得更小。
这种算法主要用于图像去噪、形态学滤波等操作。
腐蚀算法的步骤如下:1.定义结构元素:结构元素是一个小的二值图像,通常是一个正方形或圆形。
它用于定义腐蚀操作的形状和大小。
2.将结构元素与原始图像进行最小值运算:以结构元素为基准,将其放置在原始图像上不同的位置,并计算结构元素与原始图像上对应像素位置的最小值。
将得到的最小值作为输出图像上对应位置的像素值。
这一过程即为腐蚀操作。
3.重复进行腐蚀操作:对于腐蚀后的输出图像,将其作为新的输入图像,再次进行腐蚀操作,直到达到预期的腐蚀效果为止。
膨胀算法与腐蚀算法相反,它通过与给定的结构元素进行最大值运算,来放大图像的白色区域。
膨胀算法主要用于图像的填充、轮廓增强等操作。
膨胀算法的步骤如下:1.定义结构元素:结构元素与腐蚀算法相同,用于定义膨胀操作的形状和大小。
2.将结构元素与原始图像进行最大值运算:以结构元素为基准,将其放置在原始图像上不同的位置,并计算结构元素与原始图像上对应像素位置的最大值。
将得到的最大值作为输出图像上对应位置的像素值。
这一过程即为膨胀操作。
3.重复进行膨胀操作:对于膨胀后的输出图像,将其作为新的输入图像,再次进行膨胀操作,直到达到预期的膨胀效果为止。
腐蚀和膨胀算法常常结合使用,形成一对形态学操作,用于提取图像特征,如边缘检测。
具体的实现方法有:1.图像初始化:将输入图像转为二值图像。
如原始图像是灰度图像,可以使用阈值分割将图像转为二值图像。
2.定义结构元素:根据具体应用需求,选择相应形状和大小的结构元素。
3.腐蚀操作:对于二值图像,将结构元素与图像进行最小值运算,得到腐蚀后的图像。
4.膨胀操作:对于腐蚀后的图像,将结构元素与图像进行最大值运算,得到膨胀后的图像。
5.形态学操作:将膨胀操作的结果减去腐蚀操作的结果,得到最终的形态学操作结果。
形态学处理简述膨胀和腐蚀的运算原理和适用场合下载提示:该文档是本店铺精心编制而成的,希望大家下载后,能够帮助大家解决实际问题。
文档下载后可定制修改,请根据实际需要进行调整和使用,谢谢!本店铺为大家提供各种类型的实用资料,如教育随笔、日记赏析、句子摘抄、古诗大全、经典美文、话题作文、工作总结、词语解析、文案摘录、其他资料等等,想了解不同资料格式和写法,敬请关注!Download tips: This document is carefully compiled by this editor. I hope that after you download it, it can help you solve practical problems. The document can be customized and modified after downloading, please adjust and use it according to actual needs, thank you! In addition, this shop provides you with various types of practical materials, such as educational essays, diary appreciation, sentence excerpts, ancient poems, classic articles, topic composition, work summary, word parsing, copy excerpts, other materials and so on, want to know different data formats and writing methods, please pay attention!形态学处理:膨胀与腐蚀运算原理与适用场合1. 引言形态学处理是数字图像处理领域中的重要技术之一,其中膨胀与腐蚀是两种基础的形态学运算。
数学形态学运算——腐蚀、膨胀、开运算、闭运算腐蚀简单说:就是以结构B的原点为基点沿着将要被腐蚀的图像A中的所有点移动,如果此时结构B中的所有点(包括原点)被A包含,那么被B原点沿着的A中的该点就保留,否则,该点就被抛弃。
可以看出,执行完该腐蚀指令后,A中突出部分,以及外围至少减少了结构B的一半(假设B的原点为B的中心)。
膨胀简单说:就是以结构B的原点为基点沿着将要被膨胀前的图像A中的所有点移动,如果此时结构B中至少有一个点(包括原点)被A包含,那么被沿着的A中的该点及周围就被B扩充,扩充范围为B的整个区域。
可以看出,膨胀后,原A沿着边缘外围被扩充了B的一半(假设B的原点为B的中心)。
数学形态学操作可以分为二值形态学和灰度形态学,灰度形态学由二值形态学扩展而来。
数学形态学有2个基本的运算,即腐蚀和膨胀,而腐蚀和膨胀通过结合又形成了开运算和闭运算。
开运算就是先腐蚀再膨胀,闭运算就是先膨胀再腐蚀。
腐蚀粗略的说,腐蚀可以使目标区域范围“变小”,其实质造成图像的边界收缩,可以用来消除小且无意义的目标物。
式子表达为:该式子表示用结构B腐蚀A,需要注意的是B中需要定义一个原点,【而B的移动的过程与卷积核移动的过程一致,同卷积核与图像有重叠之后再计算一样】当B的原点平移到图像A的像元(x,y)时,如果B在(x,y)处,完全被包含在图像A重叠的区域,(也就是B中为1的元素位置上对应的A图像值全部也为1)则将输出图像对应的像元(x,y)赋值为1,否则赋值为0。
我们看一个演示图。
B依顺序在A上移动(和卷积核在图像上移动一样,然后在B的覆盖域上进行形态学运算),当其覆盖A的区域为[1,1;1,1]或者[1,0;1,1]时,(也就是B中‘1’是覆盖区域的子集)对应输出图像的位置才会为1。
膨胀粗略地说,膨胀会使目标区域范围“变大”,将于目标区域接触的背景点合并到该目标物中,使目标边界向外部扩张。
作用就是可以用来填补目标区域中某些空洞以及消除包含在目标区域中的小颗粒噪声。
图像处理——灰度化、⼆值化、膨胀算法、腐蚀算法以及开运算和闭运算⼀、RGBRGB模式使⽤为图像中每个的RGB分量分配⼀个0~255范围内的强度值。
RGB仅仅使⽤三种颜⾊,R(red)、G(green)、B(blue),就能够使它们依照不同的⽐例混合,在上呈现16777216(256 * 256 * 256)种颜⾊。
在电脑中,RGB的所谓“多少”就是指亮度,并使⽤整数来表⽰。
通常情况下,RGB各有256级亮度,⽤数字表⽰为从0、1、2...直到255。
⼆、ARGB⼀种,也就是⾊彩模式附加上Alpha()通道,常见于32位的。
ARGB---Alpha,Red,Green,Blue.三、灰度化在RGB模型中,假设R=G=B时,则彩⾊表⽰⼀种灰度颜⾊,当中R=G=B的值叫灰度值,因此,灰度图像每⼀个像素仅仅需⼀个字节存放灰度值(⼜称强度值、亮度值),灰度范围为0-255。
⼀般有下⾯四种⽅法对彩⾊图像进⾏灰度化,详细⽅法參考: 四、⼆值化⼀幅图像包含⽬标物体、背景还有噪声,要想从多值的数字图像中直接提取出⽬标物体,最经常使⽤的⽅法就是设定⼀个全局的阈值T,⽤T 将图像的数据分成两部分:⼤于T的像素群和⼩于T的像素群。
将⼤于T的像素群的像素值设定为⽩⾊(或者⿊⾊),⼩于T的像素群的像素值设定为⿊⾊(或者⽩⾊)。
⽐⽅:计算每个像素的(R+G+B)/3,假设>127,则设置该像素为⽩⾊,即R=G=B=255;否则设置为⿊⾊,即R=G=B=0。
C#实现代码例如以下:public Bitmap binarization(){Bitmap bitImage = new Bitmap(pictureBox1.Image);//⼆值化pictureBox1中的图⽚Color c;int height = pictureBox1.Image.Height;int width = pictureBox1.Image.Width;for (int i = 0; i < height; i++){for (int j = 0; j < width; j++){c = bitImage.GetPixel(j,i);int r = c.R;int g = c.G;int b = c.B;if ((r + g + b) / 3 >= 127){bitImage.SetPixel(j, i, Color.FromArgb(255, 255, 255));}else{bitImage.SetPixel(j, i, Color.FromArgb(0,0,0));}}}return bitImage;}执⾏结果如图:左边为处理前,右边为⼆值化后效果。
形态学运算中腐蚀,膨胀,开运算和闭运算(针对二值图而言)6.1 腐蚀腐蚀是一种消除边界点,使边界向内部收缩的过程。
可以用来消除小且无意义的物体。
腐蚀的算法:用3x3的结构元素,扫描图像的每一个像素用结构元素与其覆盖的二值图像做“与”操作如果都为1,结果图像的该像素为1。
否则为0。
结果:使二值图像减小一圈把结构元素B平移a后得到Ba,若Ba包含于X,我们记下这个a点,所有满足上述条件的a点组成的集合称做X被B腐蚀(Erosion)的结果。
用公式表示为:E(X)={a| Ba X}=X B,如图6.8所示。
图6.8 腐蚀的示意图图6.8中X是被处理的对象,B是结构元素。
不难知道,对于任意一个在阴影部分的点a,Ba 包含于X,所以X被B腐蚀的结果就是那个阴影部分。
阴影部分在X的范围之内,且比X小,就象X被剥掉了一层似的,这就是为什么叫腐蚀的原因。
值得注意的是,上面的B是对称的,即B的对称集Bv=B,所以X被B腐蚀的结果和X被Bv腐蚀的结果是一样的。
如果B不是对称的,让我们看看图6.9,就会发现X被B腐蚀的结果和X被Bv腐蚀的结果不同。
图6.9 结构元素非对称时,腐蚀的结果不同图6.8和图6.9都是示意图,让我们来看看实际上是怎样进行腐蚀运算的。
在图6.10中,左边是被处理的图象X(二值图象,我们针对的是黑点),中间是结构元素B,那个标有origin的点是中心点,即当前处理元素的位置,我们在介绍模板操作时也有过类似的概念。
腐蚀的方法是,拿B的中心点和X上的点一个一个地对比,如果B上的所有点都在X的范围内,则该点保留,否则将该点去掉;右边是腐蚀后的结果。
可以看出,它仍在原来X的范围内,且比X包含的点要少,就象X被腐蚀掉了一层。
图6.10 腐蚀运算图6.11为原图,图6.12为腐蚀后的结果图,能够很明显地看出腐蚀的效果。
图6.11 原图图6.12 腐蚀后的结果图下面的这段程序,实现了上述的腐蚀运算,针对的都是黑色点。
cv2 腐蚀膨胀原理
cv2腐蚀膨胀是图像处理中常用的一种操作,其原理是基于形态学的概念。
腐蚀操作可以使图像中的白色区域变小,而膨胀操作则可以使图像中的白色区域变大。
这两种操作通常配合使用,用于去除噪声、填充空洞、分离物体等。
腐蚀和膨胀的实现原理是通过滑动一个大小固定的结构元素在图像上进行操作,可以通过改变结构元素的形状和大小来实现不同的操作效果。
在图像处理中,cv2腐蚀膨胀是一种非常基础和重要的操作,掌握其原理能够帮助我们更好地理解图像处理的过程和方法。
- 1 -。
《深度探讨:Matlab中的腐蚀、膨胀、开运算和闭运算》在图像处理领域,腐蚀、膨胀、开运算和闭运算是常用的图像处理技术。
它们可以帮助我们对图像进行形态学处理,从而对图像进行特定的操作和增强。
本文将从简单入手,深入探讨Matlab中的腐蚀、膨胀、开运算和闭运算的原理、应用和个人观点。
1. 腐蚀腐蚀是一种图像形态学处理操作,其主要作用是“侵蚀”目标的边界。
在Matlab中,可以使用im erode函数来进行腐蚀操作。
腐蚀操作可以帮助我们去除图像中的细小细节或者连接目标,使得图像中的目标变得更加清晰和突出。
腐蚀操作的核心思想在于利用一个结构元素对图像进行扫描,当结构元素与图像相交时,输出图像的对应像素值将取决于结构元素中的最小像素值。
2. 膨胀相对于腐蚀,膨胀是一种图像形态学处理操作,其主要作用是“膨胀”目标的边界。
在Matlab中,可以使用im dilate函数来进行膨胀操作。
膨胀操作可以帮助我们连接图像中的细小裂缝或者增强目标的边界,使得图像中的目标变得更加完整和饱满。
膨胀操作的核心思想在于利用一个结构元素对图像进行扫描,当结构元素与图像相交时,输出图像的对应像素值将取决于结构元素中的最大像素值。
3. 开运算开运算是腐蚀操作和膨胀操作的结合,其主要作用是先进行腐蚀操作,然后进行膨胀操作。
在Matlab中,可以使用im open函数来进行开运算。
开运算可以帮助我们去除图像中的噪声或者平滑图像中的目标,使得图像中的目标更加清晰和稳定。
开运算的核心思想在于先利用腐蚀操作去除细小细节,然后利用膨胀操作连接目标。
4. 闭运算闭运算是膨胀操作和腐蚀操作的结合,其主要作用是先进行膨胀操作,然后进行腐蚀操作。
在Matlab中,可以使用im close函数来进行闭运算。
闭运算可以帮助我们填充图像中的小洞或者平滑图像中的目标边界,使得图像中的目标更加完整和稳定。
闭运算的核心思想在于先利用膨胀操作连接裂缝,然后利用腐蚀操作去除小洞。
形态学开运算形态学开运算是一种以形状为基础,将图像分割成若干层次,来描述图像内部形状和大小的方法,它可以用于图像分割、特征提取、图像检索等方面。
形态学开运算主要包括腐蚀、膨胀、开运算、闭运算等形态学运算,它们是机器视觉技术中几种常用的预处理技术,它们可以让计算机更好地在图像上识别、提取和分类目标。
腐蚀是指将每一个像素和它周围的像素对比,去掉可以被“腐蚀”的像素,使得图像中处于弱竞争力的像素点被消除。
这一概念可以归结为“变小”的装换,通俗的讲是,将大的物体变小,直到和周围的物体接近一样的大小。
膨胀运算则是相反的,它是扩张每一个像素来变大,浓度最高的像素点将最先被填充。
它可以用来补全图像中的缺损。
开运算是先腐蚀,再膨胀的过程,它可以消除小物体和连接过多的噪声,通过开运算可以把背景和前景区分开来。
闭运算是先膨胀,后腐蚀的过程,它可以连接相邻的物体,去除细小的噪点,并填充缺损。
形态学开运算是处理图像的基本技术,它可以用来辅助图像分割、特征提取、图像检索等各种操作,深度学习中也有许多基于形态学开运算的算法,例如U-net网络、卷积神经网络等。
U-net网络是一种用于图像分割的卷积神经网络架构,它可以自动提取图像中的边缘、纹理以及语义信息,从而对图像进行分类和分割。
U-net网络使用了上采样和下采样的技术,在特征提取过程中使用了形态学开运算,从而有效减少了模型的参数量,提高了模型的泛化能力。
另一方面,卷积神经网络(CNN)是一种前馈神经网络,它可以有效地提取局部特征,以及将空间上的原始特征映射到高维特征空间,从而更加准确的进行分类和回归。
CNN的各层的卷积核也可以使用形态学开运算,从而有效地提取图像中的边缘信息,并通过不断地堆叠、融合,从而深度提取图像中的特征。
总而言之,形态学开运算是处理图像的重要技术,它可以用来辅助多种机器视觉技术,开运算可以消除背景噪点信息,闭运算可以帮助提取物体边框,而U-net网络和卷积神经网络还可以使用形态学开运算来有效地提取图像特征,从而更加准确地进行分类和分割。
腐蚀膨胀算法腐蚀膨胀算法是一种基于形态学的图像处理方法,它提供了一种高效、有用的解决方案,用于提取图像中的特征。
腐蚀膨胀算法最初由德国数学家Herbert A. Hausser在1946年提出,至今已经在计算机视觉领域取得了巨大的成功。
腐蚀膨胀算法是一种模式填充算法,它将图像分割成若干个连续的图元,然后利用腐蚀膨胀的方法,从已知图像中提取新的图元,并根据相关的阈值来确定新的图元是否被确认为真实的特征。
这种方法在提取图像中的轮廓特征时尤为有效。
通常,腐蚀膨胀算法的实现包括以下几个步骤:1.腐蚀:通过改变图像中的像素值,使其与图像的边缘更加相似;2.膨胀:通过加强与腐蚀后图像中的像素值相似的像素,使其与图像的边缘更加相似;3.计算结果:将腐蚀后的图像与膨胀后的图像进行比较,结果用来表示它们的相似程度;4.阈值处理:根据相似程度的结果,确定每一个图元是否作为真实的特征被提取。
腐蚀膨胀算法在计算机视觉中具有重要作用,它可以用于检测图像中的轮廓特征,也可以用于形状识别、图像分割等多种应用。
除此之外,它还可以用于处理文本中的词汇和语义信息,是文本信息处理的一种重要工具。
腐蚀膨胀算法的实现也比较容易,它可以使用图像处理的基本技术实现,如卷积运算、图像滤波、像素级处理等。
同时,显著性检测技术也可以更好地实现腐蚀膨胀算法,从而更有效地提取出图像特征。
此外,腐蚀膨胀算法也可以利用图像处理技术,如颜色分割、形状分析等来实现,从而提取出图像中更为详细的特征信息,以及复杂图像处理问题的解决方案。
最后,我们可以把腐蚀膨胀算法应用于图像识别、机器人导航、地面目标检测等多种现实世界中的应用,所获得的效果甚至可以比人眼可见的结果更加准确。
综上,腐蚀膨胀算法是一种高效且有用的图像处理方法,它可以用于从图像中提取特征,也可以用来提取文本特征,甚至可以应用于实际世界中的复杂问题,具有广泛的应用前景。
最近的实验中需要对二值图像进行减噪处理,图像形态学中的腐蚀和膨胀能很好的解决此问题。
如果在腐蚀和膨胀操作前,对灰度图像做一次滤波,减噪效果将更明显。
腐蚀的具体操作是:用一个结构元素(一般是3×3的大小)扫描图像中的每一个像素,用结构元素中的每一个像素与其覆盖的像素做“与”操作,如果都为1,则该像素为1,否则为0。
膨胀的具体操作是:用一个结构元素(一般是3×3的大小)扫描图像中的每一个像素,用结构元素中的每一个像素与其覆盖的像素做“与”操作,如果都为0,则该像素为0,否则为1。
腐蚀的作用是消除物体边界点,使目标缩小,可以消除小于结构元素的噪声点;膨胀的作用是将与物体接触的所有背景点合并到物体中,使目标增大,可添补目标中的空洞。
开运算是先腐蚀后膨胀的过程,可以消除图像上细小的噪声,并平滑物体边界。
闭运算时先膨胀后腐蚀的过程,可以填充物体内细小的空洞,并平滑物体边界。
一、图像腐蚀膨胀细化的基本原理1.图像细化的基本原理⑴图像形态学处理的概念数字图像处理中的形态学处理是指将数字形态学作为工具从图像中提取对于表达和描绘区域形状有用处的图像分量,比如边界、骨架以及凸壳,还包括用于预处理或后处理的形态学过滤、细化和修剪等。
图像形态学处理中我们感兴趣的主要是二值图像。
在二值图像中,所有黑色像素的集合是图像完整的形态学描述,二值图像的各个分量是Z2的元素。
假定二值图像A和形态学处理的结构元素B是定义在笛卡儿网格上的集合,网格中值为1的点是集合的元素,当结构元素的原点移到点(x,y)时,记为Sxy,为简单起见,结构元素为3x3,且全都为1,在这种限制下,决定输出结果的是逻辑运算。
⑵二值图像的逻辑运算逻辑运算尽管本质上很简单,但对于实现以形态学为基础额图像处理算法是一种有力的补充手段。
在图像处理中用到的主要逻辑运算是:与、或和非(求补),它们可以互相组合形成其他逻辑运算。
⑶膨胀和腐蚀膨胀和腐蚀这两种操作是形态学处理的基础,许多形态学算法都是以这两种运算为基础的。
形态学运算中腐蚀,膨胀,开运算和闭运算(针对二值图而言)
6.1 腐蚀
腐蚀是一种消除边界点,使边界向内部收缩的过程。
可以用来消除小且无意义的物体。
腐蚀的算法:
用3x3的结构元素,扫描图像的每一个像素
用结构元素与其覆盖的二值图像做“与”操作
如果都为1,结果图像的该像素为1。
否则为0。
结果:使二值图像减小一圈
把结构元素B平移a后得到Ba,若Ba包含于X,我们记下这个a点,所有满足上述条件的
a点组成的集合称做X被B腐蚀(Erosion)的结果。
用公式表示为:E(X)={a| Ba X}=X B,如图6.8所示。
图6.8 腐蚀的示意图
图6.8中X是被处理的对象,B是结构元素。
不难知道,对于任意一个在阴影部分的点a,Ba 包含于X,所以X被B腐蚀的结果就是那个阴影部分。
阴影部分在X的范围之内,且比X小,就象X被剥掉了一层似的,这就是为什么叫腐蚀的原因。
值得注意的是,上面的B是对称的,即B的对称集Bv=B,所以X被B腐蚀的结果和X被Bv腐蚀的结果是一样的。
如果B不是对称的,让我们看看图6.9,就会发现X被B腐蚀的结果和X被Bv腐蚀的结果不同。
图6.9 结构元素非对称时,腐蚀的结果不同
图6.8和图6.9都是示意图,让我们来看看实际上是怎样进行腐蚀运算的。
在图6.10中,左边是被处理的图象X(二值图象,我们针对的是黑点),中间是结构元素B,那个标有origin的点是中心点,即当前处理元素的位置,我们在介绍模板操作时也有过类似的概念。
腐蚀的方法是,拿B的中心点和X上的点一个一个地对比,如果B上的所有点都在X的范围内,则该点保留,否则将该点去掉;右边是腐蚀后的结果。
可以看出,它仍在原来X的范围内,且比X包含的点要少,就象X被腐蚀掉了一层。
图6.10 腐蚀运算
图6.11为原图,图6.12为腐蚀后的结果图,能够很明显地看出腐蚀的效果。
图6.11 原图
图6.12 腐蚀后的结果图
下面的这段程序,实现了上述的腐蚀运算,针对的都是黑色点。
参数中有一个BOOL变量,
为真时,表示在水平方向进行腐蚀运算,即结构元素B为;否则在垂直方向上
进行腐蚀运算,即结构元素B为。
6.2 膨胀
膨胀是将与物体接触的所有背景点合并到该物体中,使边界向外部扩张的过程。
可以用来填补物体中的空洞。
膨胀的算法:
用3x3的结构元素,扫描图像的每一个像素
用结构元素与其覆盖的二值图像做“或”操作
如果都为0,结果图像的该像素为0。
否则为1
结果:使二值图像扩大一圈
膨胀(dilation)可以看做是腐蚀的对偶运算,其定义是:把结构元素B平移a后得到Ba,若Ba击中X,我们记下这个a点。
所有满足上述条件的a点组成的集合称做X被B膨胀的
结果。
用公式表示为:D(X)={a | Ba↑X}=X B,如图6.13所示。
图6.13中X是被处理的对象,B是结构元素,不难知道,对于任意一个在阴影部分的点a,Ba击中X,所以X被B 膨胀的结果就是那个阴影部分。
阴影部分包括X的所有范围,就象X膨胀了一圈似的,这就是为什么叫膨胀的原因。
同样,如果B不是对称的,X被B膨胀的结果和X被Bv膨胀的结果不同。
让我们来看看实际上是怎样进行膨胀运算的。
在图6.14中,左边是被处理的图象X(二值图象,我们针对的是黑点),中间是结构元素B。
膨胀的方法是,拿B的中心点和X上的点及X周围的点一个一个地对,如果B上有一个点落在X的范围内,则该点就为黑;右边是膨胀后的结果。
可以看出,它包括X的所有范围,就象X膨胀了一圈似的。
图6.13 膨胀的示意图
图6.14 膨胀运算
图6.15为图6.11膨胀后的结果图,能够很明显的看出膨胀的效果。
图6.15 图6.11膨胀后的结果图
下面的这段程序,实现了上述的膨胀运算,针对的都是黑色点。
参数中有一个BOOL变
量,为真时,表示在水平方向进行膨胀运算,即结构元素B为;否则在垂直方
向上进行膨胀运算,即结构元素B为。
6.3 开运算
先腐蚀后膨胀的过程称为开运算。
用来消除小物体、在纤细点处分离物体、平滑较大物体的边界的同时并不明显改变其面积。
先腐蚀后膨胀称为开(open),即OPEN(X)=D(E(X))。
让我们来看一个开运算的例子(见图6.16):
图6.16开运算
在图16上面的两幅图中,左边是被处理的图象X(二值图象,我们针对的是黑点),右边是结构元素B,下面的两幅图中左边是腐蚀后的结果;右边是在此基础上膨胀的结果。
可以看到,原图经过开运算后,一些孤立的小点被去掉了。
一般来说,开运算能够去除孤立的小点,毛刺和小桥(即连通两块区域的小点),而总的位置和形状不变。
这就是开运算的作用。
要注意的是,如果B是非对称的,进行开运算时要用B的对称集Bv膨胀,否则,开运算的结果和原图相比要发生平移。
图6.17和图6.18能够说明这个问题。
图6.17 用B膨胀后,结果向左平移了
图6.18 用Bv膨胀后位置不变
图6.17是用B膨胀的,可以看到,OPEN(X)向左平移了。
图18是用Bv膨胀的,可以看到,总的位置和形状不变。
图6.19为图6.11经过开运算后的结果。
图6.19 图6.11经过开运算后的结果
开运算的源程序可以很容易的根据上面的腐蚀,膨胀程序得到,这里就不给出了。
6.4 闭运算
先膨胀后腐蚀称为闭(close),即CLOSE(X)=E(D(X))。
让我们来看一个闭运算的例子(见图6.20):
图6.20 闭运算
在图6.20上面的两幅图中,左边是被处理的图象X(二值图象,我们针对的是黑点),右边是结构元素B,下面的两幅图中左边是膨胀后的结果,右边是在此基础上腐蚀的结果可以看到,原图经过闭运算后,断裂的地方被弥合了。
一般来说,闭运算能够填平小湖(即小孔),弥合小裂缝,而总的位置和形状不变。
这就是闭运算的作用。
同样要注意的是,如果B是非对称的,进行闭运算时要用B的对称集Bv膨胀,否则,闭运算的结果和原图相比要发生平移。
图6.21 图.611经过闭运算后的结果
闭运算的源程序可以很容易的根据上面的膨胀,腐蚀程序得到,这里就不给出了。
你大概已经猜到了,开和闭也是对偶运算,的确如此。
用公式表示为(OPEN(X))c=CLOSE((Xc)),或者(CLOSE(X))c =OPEN((Xc))。
即X 开运算的补集等于X的补集的闭运算,或者X 闭运算的补集等于X的补集的开运算。
这句话可以这样来理解:在两个小岛之间有一座小桥,我们把岛和桥看做是处理对象X,则X的补集为大海。
如果涨潮时将小桥和岛的外围淹没(相当于用尺寸比桥宽大的结构元素对X进行开运算),那么两个岛的分隔,相当于小桥两边海域的连通(对Xc做闭运算)。
6.5 细化运算
细化(thinning)算法有很多,我们在这里介绍的是一种简单而且效果很好的算法,用它就能够实现从文本抽取骨架的功能。
我们的对象是白纸黑字的文本,但在程序中为了处理的方便,还是采用256级灰度图,不过只用到了调色板中0和255两项。
所谓细化,就是从原来的图中去掉一些点,但仍要保持原来的形状。
实际上,是保持原图的骨架。
所谓骨架,可以理解为图象的中轴,例如一个长方形的骨架是它的长方向上的中轴线;
正方形的骨架是它的中心点;圆的骨架是它的圆心,直线的骨架是它自身,孤立点的骨架也是自身。
文本的骨架嘛,前言中的例子显示的很明白。
那么怎样判断一个点是否能去掉呢?显然,要根据它的八个相邻点的情况来判断,我们给几个例子(如图6.22所示)。
图6.22 根据某点的八个相邻点的情况来判断该点是否能删除图6.23经过细化后,我们预期的结果是一条水平直线,且位于该黑色矩形的中心。
实际的结果确实是一条水平直线,但不是位于黑色矩形的中心,而是最下面的一条边。
为什么会这样,我们来分析一下:在从上到下,从左到右的扫描过程中,我们遇到的第一个黑点就是黑色矩形的左上角点,经查表,该点可以删。
下一个点是它右边的点,经查表,该点也可以删,如此下去,整个一行被删了。
每一行都是同样的情况,所以都被删除了。
到了最后一行时,黑色矩形已经变成了一条直线,最左边的黑点不能删,因为它是直线的端点,它右边的点也不能删,因为如果删除,直线就断了,如此下去,直到最右边的点,也不能删,因为它是直线的右端点。
所以最下面的一条边保住了,但这并不是我们希望的结果。
解决的办法是,在每一行水平扫描的过程中,先判断每一点的左右邻居,如果都是黑点,则该点不做处理。
另外,如果某个黑点被删除了,那么跳过它的右邻居,处理下一个点。
这样就避免了上述的问题。