图像的腐蚀和膨胀

合集下载

《图像处理》实验8:二值图像膨胀、腐蚀

《图像处理》实验8:二值图像膨胀、腐蚀

二值图像膨胀、 二值图像膨胀、腐蚀实验步骤
BYTE* TempData=new BYTE[linebytes*infoheader->biHeight]; memset(TempData,0,linebytes*infoh eader->biHeight); //开辟临时空间,存放数据 开辟临时空间, 开辟临时空间
实验八 二值图像膨胀、 二值图像膨胀、腐蚀
矿大信电学院 蔡利梅
一、实验目的
掌握二值图像膨胀、 掌握二值图像膨胀、腐蚀的基本方法 编程实现膨胀、 编程实现膨胀、腐蚀
二、实验原理
膨胀 腐蚀
二值图像膨胀、 二值图像膨胀、腐蚀实验步骤
打开应用程序Clm 打开应用程序 修改程序菜单 添加“二值图像处理”下拉菜单, 添加“二值图像处理”下拉菜单,并添加下 一级子菜单“膨胀” 一级子菜单“膨胀”,ID:ID_DILATION, : , 添加子菜单“腐蚀” 添加子菜单“腐蚀”,ID:ID_EROSION : 创建菜单项“膨胀” 腐蚀” 创建菜单项“膨胀” 、“腐蚀”的消息响 应函数OnDilation() 、OnErosion()。(基 。(基 应函数 。( 于CClmDoc类) 类
二值图像膨胀、 二值图像膨胀、腐蚀实验步骤
switch(nbtype) { case 0: nbw=1; nbh=3; break; case 1: nbw=3; nbh=1; break; case 2: nbw=3; nbh=3; break; case 3: nbw=5; nbh=5; break; }
二值图像膨胀、 二值图像膨胀、腐蚀实验步骤
BYTE* TempData=new BYTE[linebytes*infoheader->biHeight]; memset(TempData,255,linebytes*infohe ader->biHeight); //开辟临时空间,存放数据 开辟临时空间, 开辟临时空间

C++图像的膨胀和腐蚀

C++图像的膨胀和腐蚀

C++图像的膨胀和腐蚀二值图像是一种简单的图像格式,它只有两个灰度级,即"0"表示黑色的像素点,"255"表示白色的像素点,至于如何从一幅普通的图像获得二值图像,请参考我近期在天极网上发表的《Visual C++编程实现图像的分割》一文。

二值图像处理在图像处理领域占据很重要的位置,在具体的图像处理应用系统中,往往需要对于获得的二值图像再进一步进行处理,以有利于后期的识别工作。

二值图像处理运算是从数学形态学下的集合论方法发展起来的,尽管它的基本运算很简单,但是却可以产生复杂的效果。

常用的二值图像处理操作有许多方法,如腐蚀、膨胀、细化、开运算和闭运算等等。

本文对这些内容作些研究探讨,希望对爱好图像处理的朋友有所帮助。

一、腐蚀和膨胀形态学是一门新兴科学,它的用途主要是获取物体拓扑和结果信息,它通过物体和结构元素相互作用的某些运算,得到物体更本质的形态。

它在图像处理中的应用主要是:1.利用形态学的基本运算,对图像进行观察和处理,从而达到改善图像质量的目的;2.描述和定义图像的各种几何参数和特征,如面积,周长,连通度,颗粒度,骨架和方向性。

限于篇幅,我们只介绍简单二值图像的形态学运算,对于灰度图像的形态学运算,有兴趣的读者可以看有关的参考书。

二值图像基本的形态学运算是腐蚀和膨胀,简单的腐蚀是消除物体的所有边界点的一种过程,其结果是使剩下的物体沿其周边比原物体小一个像素的面积。

如果物体是圆的,它的直径在每次腐蚀后将减少两个像素,如果物体在某一点处任意方向上连通的像素小于三个,那么该物体经过一次腐蚀后将在该点处分裂为二个物体。

简单的膨胀运算是将与某物体接触的所有背景点合并到该物体中的过程。

过程的结果是使物体的面积增大了相应数量的点,如果物体是圆的,它的直径在每次膨胀后将增大两个像素。

如果两个物体在某一点的任意方向相隔少于三个像素,它们将在该点连通起来。

下面给出具体的实现腐蚀和膨胀的函数代码:////////////////////////////////二值图像腐蚀操作函数BOOL ImageErosion(BYTE *pData,int Width,int Height){//pData为图像数据的指针,Width和Height为图像的宽和高;BYTE* pData1;int m,n,i,j,sum,k,sum1;BOOL bErosion;if(pData==NULL){AfxMessageBox("图像数据为空,请读取图像数据");return FALSE;}//申请空间,pData1存放处理后的数据;pData1=(BYTE*)new char[WIDTHBYTES(Width*8)*Height];if(pData1==NULL){AfxMessageBox("图像缓冲数据区申请失败,请重新申请图像数据缓冲区");return FALSE ;}memcpy(pData1,pData,WIDTHBYTES(Width*8)*Height);for(i=10;i<Height-10;i++)for(j=32;j<Width-32;j++){bErosion=FALSE;sum=*(pData+WIDTHBYTES(Width*8)*i+j);if(sum==255){//求像素点八邻域的灰度均值;for(m=-1;m<2;m++){for(n=-1;n<2;n++){sum1=*(pData+WIDTHBYTES(Width*8)*(i+m)+j+n);if(sum1==0){*(pData1+WIDTHBYTES(Width*8)*i+j)=0;bErosion=TRUE;break;}}if(bErosion){bErosion=FALSE;break;}}}}memcpy(pData,pData1,WIDTHBYTES(Width*8)*Height); return TRUE;}////////////////////////////////////二值图像的膨胀操作BOOL ImageDilation(BYTE *pData,int Width,int Height){BYTE* pData1;int m,n,i,j,sum,k,sum1;BOOL bDilation;if(pData==NULL){AfxMessageBox("图像数据为空,请读取图像数据");return FALSE;}//申请空间,pData1存放处理后的数据;pData1=(BYTE*)new char[WIDTHBYTES(Width*8)*Height];if(pData1==NULL){AfxMessageBox("图像缓冲数据区申请失败,请重新申请图像数据缓冲区");return FALSE ;}memcpy(pData1,pData,WIDTHBYTES(Width*8)*Height);for(i=10;i<Height-10;i++)for(j=32;j<Width-32;j++){bDilation=FALSE;sum=*(pData+WIDTHBYTES(Width*8)*i+j);if(sum==0){//求像素点八邻域的灰度值;for(m=-1;m<2;m++){for(n=-1;n<2;n++){sum1=*(pData+WIDTHBYTES(Width*8)*(i+m)+j+n);if(sum1==255){*(pData1+WIDTHBYTES(Width*8)*i+j)=255;bDilation=TRUE;break;}}if(bDilation){bDilation=FALSE;break;}}}}memcpy(pData,pData1,WIDTHBYTES(Width*8)*Height);return TRUE;}从上面的说明可以看出,腐蚀可以消除图像中小的噪声区域,膨胀可以填补物体中的空洞。

图像的腐蚀和膨胀

图像的腐蚀和膨胀

图像的腐蚀和膨胀研究背景和意义依据数学形态学集合论方法发展起来的图像处理方法,在数字图像处理和机器视觉领域中得到了广泛的应用,形成了一种独特的数字图像分析和理论。

数学形态学是图像处理和模式识别领域的新方法,其基本的思想是:用具有一定形态的结构元素去度量和提取图像中的对应形状,已达到图像分析和识别的目的。

优势有一下几点:有效滤除噪声,保留图像中原有信息,算法很容易用并行处理方法有效实现,基于数学形态学的边缘信息提取处理优于基于微分运算的边缘提取算法,提取的边缘比较平滑,提取的图像骨架也比较连续,断点很少。

二.原理特殊领域运算形式——结构元素,在每个像素位置上与二值图像对应的区域进行特定的逻辑运算。

运算结果是输出图像的相应像素。

运算效果取决于结构元素大小、内容以及逻辑运算性质。

结构元素:膨胀和腐蚀操作的最基本组成部分,用于测试输出图像,通常要比待处理的图像小的多。

二维平面结构元素由一个数值为0或1的矩阵组成。

结构元素的原点(锚点)指定了图像中需要处理的像素范围,结构元素中数值为1的点决定结构元素的领域像素在进行膨胀或腐蚀操作时是否需要参与计算。

常见的形态学运算有腐蚀和膨胀两种:腐蚀:删除对象边缘某些像素。

膨胀:给图像中的对象边缘添加像素。

三.算法及效果图膨胀算法:用3X3的结构元素扫描图像的每一个像素,用结构元素与其覆盖的二值图像做“与”操作,如果都为0,结果图像的该像素点为0,否则为1。

膨胀算法的效果是使二值图像扩大一圈。

腐蚀的算法:用3X3的结构元素,扫描图像的每一个像素点,用结构元素与其覆盖的二值图像做“与”操作,如果结果都为1,结果图像的该像素点为1,否则为0。

膨胀算法的结果:是二值图像减少一圈。

四.组合使用效果先腐蚀后膨胀的过程:利用它可以消除小物体,在纤细点处分离物体,平滑较大物体边界,但同时并不会明显改变原来物体的面积。

先膨胀后腐蚀的过程:利用它可以填充物体内细小空洞,连接临近物体、平滑其边界,但同时并不会明显改变原来物体的面积。

腐蚀膨胀算法原理

腐蚀膨胀算法原理

腐蚀膨胀算法原理
腐蚀膨胀算法(Erosion-DilationAlgorithm,缩写为EDA)是图像处理中最常用的算法之一。

它主要应用于图像的二值化处理,可以有效地消除图像中的噪声,以及实现图像中文字和物体的分割。

EDA是一种分水岭算法(Watershed Algorithm),该算法包括两个步骤,腐蚀和膨胀。

腐蚀步骤将从图像中提取图像对象的轮廓,而膨胀步骤将对象的轮廓填充,从而实现对图像对象的分割。

一般来说,EDA算法可以分为以下两步:
(1)腐蚀:腐蚀是图像处理中常用的技术,它的目的是去除图像中的噪声,消除图像中的噪点,并实现对图像中的文字或物体的轮廓提取。

腐蚀的基本原理是:使用一个结构元素(structuring element),它可以是不同类型的形状,如圆形、菱形、矩形等,将图像中某像素的非零元素替换为零。

(2)膨胀:膨胀是EDA算法中另一个重要的步骤,它是腐蚀的反向过程。

膨胀的基本原理是:使用一个结构元素将图像中某像素的零元素替换为非零元素,如果临近的像素是非零元素,则认为此像素属于某个对象的轮廓。

EDA算法的优点在于它既可以去除噪声,又可以实现文字或物体的分割。

此外,EDA算法还性能卓越,比一般算法要快得多,是图像处理中用到较多的算法之一。

但EDA算法也存在缺点:结构元素的选择不当,会影响到最终的结果;由于腐蚀操作的迭代,会导致目标图像的误差及失真问题;同
样,膨胀操作也会null影响图像的体积及精度。

总而言之,腐蚀膨胀算法是一种有效的图像处理算法,在图像的噪声消除、文字分割等应用中均有良好的效果,但也有一定的缺点,应该合理选择结构元素,以保证算法的正确性和最佳效果。

Python图像处理:图像腐蚀与图像膨胀

Python图像处理:图像腐蚀与图像膨胀

Python图像处理:图像腐蚀与图像膨胀图像的膨胀(Dilation)和腐蚀(Erosion)是两种基本的形态学运算,主要⽤来寻找图像中的极⼤区域和极⼩区域。

其中膨胀类似于“领域扩张”,将图像中的⾼亮区域或⽩⾊部分进⾏扩张,其运⾏结果图⽐原图的⾼亮区域更⼤;腐蚀类似于“领域被蚕⾷”,将图像中的⾼亮区域或⽩⾊部分进⾏缩减细化,其运⾏结果图⽐原图的⾼亮区域更⼩。

1.图像膨胀膨胀的运算符是“⊕”,其定义如下:该公式表⽰⽤B来对图像A进⾏膨胀处理,其中B是⼀个卷积模板或卷积核,其形状可以为正⽅形或圆形,通过模板B与图像A进⾏卷积计算,扫描图像中的每⼀个像素点,⽤模板元素与⼆值图像元素做“与”运算,如果都为0,那么⽬标像素点为0,否则为1。

从⽽计算B覆盖区域的像素点最⼤值,并⽤该值替换参考点的像素值实现膨胀。

下图是将左边的原始图像A膨胀处理为右边的效果图A⊕B。

2.图像腐蚀腐蚀的运算符是“-”,其定义如下:该公式表⽰图像A⽤卷积模板B来进⾏腐蚀处理,通过模板B与图像A进⾏卷积计算,得出B覆盖区域的像素点最⼩值,并⽤这个最⼩值来替代参考点的像素值。

如图所⽰,将左边的原始图像A腐蚀处理为右边的效果图A-B。

处理结果如下图所⽰:⼆. 图像腐蚀代码实现1.基础理论形态学转换主要针对的是⼆值图像(0或1)。

图像腐蚀类似于“领域被蚕⾷”,将图像中的⾼亮区域或⽩⾊部分进⾏缩减细化,其运⾏结果图⽐原图的⾼亮区域更⼩。

其主要包括两个输⼊对象:(1)⼆值图像(2)卷积核卷积核是腐蚀中的关键数组,采⽤numpy库可以⽣成。

卷积核的中⼼点逐个像素扫描原始图像,如下图所⽰:被扫描到的原始图像中的像素点,只有当卷积核对应的元素值均为1时,其值才为1,否则其值修改为0。

换句话说,遍历到的黄⾊点位置,其周围全部是⽩⾊,保留⽩⾊,否则变为⿊⾊,图像腐蚀变⼩。

2.函数原型图像腐蚀主要使⽤的函数为erode,其原型如下:dst = cv2.erode(src, kernel, iterations)参数dst表⽰处理的结果,src表⽰原图像,kernel表⽰卷积核,iterations表⽰迭代次数。

计算机视觉实验报告-对图像进行腐蚀和膨胀

计算机视觉实验报告-对图像进行腐蚀和膨胀

1实验目的选取一张自己的生活照,实现:任选两种结构对图像进行腐蚀和膨胀。

边缘检测(分别使用Prewitt,两种大小的Sobel算子,不同参数的Canny算子,LoG算子),并对比各个算子实现差异及不同参数条件下的实验效果。

2实验过程2.1图像腐蚀和膨胀实验图片所用代码import cv2import numpy as npdef threshold(image, threshold):out = image.copy()out[out < threshold] = 0out[out > threshold] = 1out = out.astype(np.uint8)return out# 1. 读取图像文件image = cv2.imread('img/in.jpeg', cv2.IMREAD_GRAYSCALE)# 2. 缩放图像print('Shape: {}'.format(image.shape))image = cv2.resize(image, (256, 256), cv2.INTER_LINEAR)print('Shape: {}'.format(image.shape))# 3. 均一阈值分割binary = threshold(image, threshold=200)# 4. 腐蚀kernel_size = 5erode = cv2.erode(binary, kernel=np.ones((kernel_size, kernel_size)))# 5. 膨胀dilate = cv2.dilate(binary, kernel=np.ones((kernel_size, kernel_size)))# 6. 显示图像cv2.imshow('Image', image)cv2.imshow('Binary', binary * 255)cv2.imshow('Erode', erode * 255)cv2.imshow('Dilate', dilate * 255) cv2.waitKey(0)实验效果Kernel=5Kernel=25代码分析及现象腐蚀,消除连通的边界,使边界向内收缩。

二值形态学膨胀、腐蚀、开、闭运算opencv

二值形态学膨胀、腐蚀、开、闭运算opencv

【二值形态学膨胀、腐蚀、开、闭运算opencv的深度解析】一、概念介绍1. 二值形态学在图像处理中,二值形态学是一种针对二值图像进行的形态学操作,主要包括膨胀、腐蚀、开、闭运算等。

2. 膨胀膨胀是二值形态学中的一种基本操作,它能够使目标区域扩张并填充内部的空洞,从而使目标变大。

3. 腐蚀腐蚀是二值形态学中的另一种基本操作,它能够使目标区域收缩并去除边缘细节,从而使目标变小。

4. 开运算开运算是先腐蚀后膨胀的组合操作,可以用来去除图像中的噪声和小的干扰目标。

5. 闭运算闭运算是先膨胀后腐蚀的组合操作,可以用来填补图像中的小孔和裂缝。

二、深入探讨1. 膨胀的原理和作用膨胀通过结构元素的滑动来扩张目标区域,可以使目标变大,填充空洞,连接断裂的目标,是图像处理中常用的操作之一。

2. 腐蚀的原理和作用腐蚀通过结构元素的滑动来收缩目标区域,可以使目标变小,去除边缘细节,分离接触的目标,也是图像处理中常用的操作之一。

3. 开闭运算的应用场景开运算通常用于去除图像中的小噪声和杂点,可以平滑目标轮廓,提高目标边缘的连通性;闭运算通常用于填补图像中的小孔和断裂,可以使目标更加完整,减少断裂和裂缝。

4. opencv中的二值形态学函数opencv提供了丰富的二值形态学函数,可以方便地进行膨胀、腐蚀、开、闭运算,如cv2.dilate()、cv2.erode()、cv2.morphologyEx()等,可以通过设置结构元素的形状和大小来调整操作效果。

5. 个人观点和理解对于二值形态学操作,我认为膨胀和腐蚀是其基础,而开闭运算则是在这两者基础上的进一步应用,能够更加精细地处理目标区域,去除干扰和噪声,提取有效信息。

在实际应用中,需要根据具体情况选择不同的操作和参数,以达到最佳的处理效果。

三、总结回顾通过本文的介绍和分析,我们深入理解了二值形态学中的膨胀、腐蚀、开、闭运算的原理和作用,以及在opencv中的应用方式。

我们也从个人观点出发,探讨了这些操作的实际意义和效果。

形态学处理膨胀和腐蚀

形态学处理膨胀和腐蚀

形态学处理膨胀和腐蚀好嘞,今天我们聊聊形态学处理里的膨胀和腐蚀。

这听起来像是高深的科学名词,其实它们在图像处理里就像是咱们生活中的调味品,能让你的图像变得更美味。

想象一下,你在厨房里做饭,光有盐和胡椒可不够,还得有些独特的香料来提升风味。

膨胀和腐蚀就是这样的小秘密。

咱们来说说膨胀。

这就像是给图像穿了一层华丽的衣服,真是让人眼前一亮。

你想想,图像上的小点点在这个过程中就像是被“喂胖”了一样,慢慢膨胀开来。

你瞧,原本那些稀稀拉拉的像素瞬间变得丰满起来,边缘变得更加圆润,整个图像看起来更饱满、更有活力。

是不是感觉就像看到朋友从一个青涩少年变成了一个风度翩翩的大叔,心里那个自豪啊,真想给他来个大拇指!这样处理过的图像,边缘更光滑,缺口也不见了,真是妙不可言。

不过,膨胀也有它的小麻烦。

就好比我们偶尔吃多了,肚子胀得不行。

有些细节可能就被淹没了,原本清晰的轮廓可能变得模糊不清。

想象一下,你在画画,结果一不小心把颜色泼到了旁边,哎,真是得不偿失。

要是这图像里的信息被淹没了,那可就麻烦了。

所以,咱们在使用膨胀的时候,要谨慎点,心里得有数,别让它把一切都搞得一团糟。

接下来就是腐蚀了,听起来是不是有点严肃?别担心,这可不是要让你的图像变得灰暗。

腐蚀其实就像是给图像减肥,帮助那些多余的部分去掉。

就像你秋天扫落叶,清理掉那些多余的杂草,留下干净整洁的花园。

经过腐蚀处理后,图像的细节会更加明显,原本杂乱的背景也会变得更加整洁,仿佛一下子清晰了不少。

这时候,边缘变得尖锐了,形状更加分明。

就像你用刀切蛋糕,切出的每一块都是那么整齐。

可是,腐蚀也是有它的短板哦。

减肥太过了,可能连必要的部分也一起减掉,最终图像看起来就像是被削减了好几块,失去了原有的风采。

这样一来,原本生动的画面瞬间变得干瘪,真是让人心疼。

咱们再说说这两者的结合,嘿,这可是魔法般的存在。

膨胀和腐蚀如果搭档起来,简直就像是一个完美的舞蹈组合。

先来个膨胀,让图像膨胀得更丰满,再进行腐蚀,修剪掉那些不必要的部分,最终呈现出的效果,简直就像是经过打磨的璀璨钻石,闪闪发光。

图像膨胀和腐蚀

图像膨胀和腐蚀

图像膨胀和腐蚀图像二值形态学——腐蚀和膨胀的C语言实现数学形态学是法国和德国科学家在研究岩石结构时建立的一门科学。

形态学的用途主要是获取物体拓扑和结构信息,通过物体和结构元素相互作用的某些运算,得到物体更本质的形态。

在图像处理中的应用主要是:利用形态学的基本运算,对图像进行观察和处理,从而达到改善图像质量的目的;描述和定义图像的各种几何参数和特征,如面积、周长、连通度、颗粒度、骨架和方向性等。

关于形态学的具体描述和数学形式化的定义可以从文章底部的参考资料中获得。

最近的实验中需要对二值图像进行减噪处理,图像形态学中的腐蚀和膨胀能很好的解决此问题。

如果在腐蚀和膨胀操作前,对灰度图像做一次滤波,减噪效果将更明显。

腐蚀的具体操作是:用一个结构元素(一般是3×3的大小)扫描图像中的每一个像素,用结构元素中的每一个像素与其覆盖的像素做“与”操作,如果都为1,则该像素为1,否则为0。

膨胀的具体操作是:用一个结构元素(一般是3×3的大小)扫描图像中的每一个像素,用结构元素中的每一个像素与其覆盖的像素做“与”操作,如果都为0,则该像素为0,否则为1。

腐蚀的作用是消除物体边界点,使目标缩小,可以消除小于结构元素的噪声点;膨胀的作用是将与物体接触的所有背景点合并到物体中,使目标增大,可添补目标中的空洞。

开运算是先腐蚀后膨胀的过程,可以消除图像上细小的噪声,并平滑物体边界。

闭运算时先膨胀后腐蚀的过程,可以填充物体内细小的空洞,并平滑物体边界。

以下是一段在OpenCV中实现的C语言程序,分别是图像腐蚀和膨胀函数,输入的参数依次为:当前二值图像数据指针、图像宽度、图像高度。

通过这两个函数的组合使用(开闭运算),可以对图像进行有效减噪。

一、图像腐蚀膨胀细化的基本原理1.图像细化的基本原理⑴图像形态学处理的概念数字图像处理中的形态学处理是指将数字形态学作为工具从图像中提取对于表达和描绘区域形状有用处的图像分量,比如边界、骨架以及凸壳,还包括用于预处理或后处理的形态学过滤、细化和修剪等。

[opencv]图像处理-腐蚀操作与膨胀操作

[opencv]图像处理-腐蚀操作与膨胀操作

[opencv]图像处理-腐蚀操作与膨胀操作1.腐蚀操作: 类似于化学反应,⽤酸腐蚀⾦属等等效果类似,因⽽被称为腐蚀操作。

import cv2import matplotlib.pyplot as pltimport numpy as np# 载⼊汉字展⽰原图img = cv2.imread('E:/img/6.jpg')cv2.imshow('img',img)cv2.waitKey(0)cv2.destroyAllWindows()# 腐蚀范围2x2kernel = np.ones((2,2),np.uint8)# 迭代次数 iterations=1erosion = cv2.erode(img,kernel,iterations = 1)cv2.imshow('erosion',erosion)cv2.waitKey(0)cv2.destroyAllWindows()原图如下,带有许多不需要的细线,可以利⽤腐蚀操作去除细线:腐蚀操作后2.膨胀操作 与名称同义,进⾏⼀个膨胀。

上图明显腐蚀后,线条与原来相⽐变细了。

这时可以采取⼀个膨胀操作来增宽线条。

代码为先腐蚀后膨胀的操作:import cv2import matplotlib.pyplot as pltimport numpy as np# 载⼊汉字展⽰原图img = cv2.imread('E:/img/6.jpg')cv2.imshow('img',img)cv2.waitKey(0)cv2.destroyAllWindows()# 腐蚀范围2x2kernel = np.ones((2,2),np.uint8)# 迭代次数 iterations=1erosion = cv2.erode(img,kernel,iterations = 1)cv2.imshow('erosion',erosion)cv2.waitKey(0)cv2.destroyAllWindows()# 膨胀范围kernel = np.ones((3,3),np.uint8)# 迭代次数img_dilate = cv2.dilate(erosion,kernel,iterations = 1) cv2.imshow('dilate', img_dilate)cv2.waitKey(0)cv2.destroyAllWindows()膨胀操作后,线条明显变粗。

形态学中的腐蚀与膨胀

形态学中的腐蚀与膨胀

数学形态学运算——腐蚀、膨胀、开运算、闭运算腐蚀简单说:就是以结构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。

膨胀粗略地说,膨胀会使目标区域范围“变大”,将于目标区域接触的背景点合并到该目标物中,使目标边界向外部扩张。

作用就是可以用来填补目标区域中某些空洞以及消除包含在目标区域中的小颗粒噪声。

腐蚀和膨胀——精选推荐

腐蚀和膨胀——精选推荐

二值图像的腐蚀与膨胀1 腐蚀把结构元素S平移x后得到S x,若S x包含于X,我们记下这个x点,所有满足上述条件的x点组成的集合称做X被S腐蚀(Erosion)的结果。

用公式表示为:X S ={x| S x X},X用S腐蚀的结果是所有使S平移x后仍在X中的x的集合。

换句话说,用S来腐蚀X得到的集合是S完全包括在X中时S的原点位置的集合。

如图6-4所示。

X S X S图6-4 结构元素的原点在上部的腐蚀运算示例腐蚀的方法是,拿S的原点和X上的点一个一个地对比,如果S上的所有点都在X的范围内,则S的原点对应的点保留,否则将该点去掉;右边是腐蚀后的结果。

可以看出,它仍在原来X的范围内,且比X包含的点要少,就象X被腐蚀掉了一层。

值得注意的是,结构元素的原点坐标很重要,如果结构元素形状不变,而原点坐标改变,则腐蚀运算的结果是不一样的。

如图6-5所示。

XSX S图6-5 结构元素的原点在下部的腐蚀运算示例图6-4的结果是腐蚀掉图像中目标的左、下、右部分,而图6-5的结果是腐蚀掉图像中目标的左、上、右部分,当结构元素的原点在结构元素中间时,如图6-6,则腐蚀掉图像中目标的边界部分。

所以腐蚀的作用是消除物体边界点。

腐蚀可以把小于结构元素的物体(毛刺、小凸起)去除; 如果两个物体之间有细小的连通,结构元素足够大时,通过腐蚀运算可以将两个物体分开。

X S X S图6-6 结构元素的原点在中部的腐蚀运算示例程序主要代码如下(设结构元素为3×3像素,原点在中心点处):For j = 1 To h - 2For i = 1 To w - 2m = 0For y = -1 To 1For x = -1 To 1If f(i + x, j + y ) = 0 Then m = 1Next xNext yIf m = 0 Thenf(i,j)=1 ‘未腐蚀的目标物体Elsef(i,j)=0 ‘背景End IfNext iNext j2 膨胀把结构元素S平移x后得到S x,若S x与X相交不为空,我们记下这个x点,所有满足上述条件的x点组成的集合称做X被S膨胀((dilation))的结果。

Halcon之膨胀,腐蚀,开闭运算

Halcon之膨胀,腐蚀,开闭运算

Halcon之膨胀,腐蚀,开闭运算膨胀:对边界点进行扩充,填充空洞,使边界向外部扩张的过程。

腐蚀:消除物体边界点,使边界向内部收缩的过程,把小于结构元素的物体去除掉.开运算:先腐蚀后膨胀的过程称为开运算,作用:去除孤立的小点,毛刺,消除小物体,平滑较大物体边界,同时不改变其面积.(此处的不改变其面积是有条件的,即结构元素设置的必须要合理)闭运算:先膨胀后腐蚀的过程是闭运算。

作用:填充物体内细小的空洞,连接临近物体,平滑边界,同时不改变其面积。

(此处的不改变其面积是有条件的,即结构元素设置的必须要合理)膨胀与腐蚀的主要作用:(1)消除噪声(2)分割(isolate)出独立的图像元素,在图像中连接(join)相邻的元素(3)寻找图像中明显的极大值或极小值区域(4)求出图像的梯度Notice:膨胀和腐蚀是对白色部分(高两部分)而言的,不是黑色部分,膨胀是图像中的高亮部分进行膨胀,类似于“领域扩张”,效果图拥有比原图更大的高亮区域;腐蚀是原图中的高亮部分被腐蚀,类似于“领域被蚕食”,效果图拥有比原图更小的高亮区域膨胀腐蚀read_image (Image,'Fabrik')*使用固定的阈值分割图像threshold (Image, Region, 128, 255) *使相邻的区域连接成为一个整体,连通处理connection (Region, ConnectedRegions)*根据面积过滤出我们需要提取的区域select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 8000, 9000)*使用矩形结构元素进行膨胀dilation_rectangle1 (SelectedRegions, RegionDilation, 3, 3) *使用圆形结构元素进行膨胀dilation_circle (SelectedRegions, RegionDilation1, 2.5)*使用矩形结构元素进行腐蚀erosion_rectangle1 (SelectedRegions, RegionErosion, 3, 3)*使用圆形结构元素进行腐蚀erosion_circle (SelectedRegions, RegionErosion1,2.5)*开运算opening_rectangle1 (SelectedRegions, RegionOpening, 3, 3) *闭运算closing_rectangle1 (SelectedRegions, RegionClosing, 3, 3)。

膨胀与腐蚀,radon,hough变换

膨胀与腐蚀,radon,hough变换
二值图像膨胀与腐蚀
一般来说对于二值图像,膨胀运算后图像中物体 “加
长”或“变粗”;腐蚀运算后图像中物体“收缩” 或“细
化”。下面先通过一些例题观察分析膨胀与腐蚀后 的
效果,总结二值图像膨胀与腐蚀运算的方法与原则, 最后给出二值图像膨胀与腐蚀运算的准确描述以及
简单的应用。
1 二值图像膨胀运算
先通过下面例题观察分析编辑几课个件 二值图像膨胀算子的 1
数imclose用来完成两个图像的闭运算。
编辑课件
17
【例3-20】对图像实施开闭运算。 设计如下程序:
A= imread('D:\125.jpg'); B=rgb2gray(A); M=strel('diamond',2); C1=imopen(B,M); C2=imclose(B,M); subplot(1,3,1); imshow(B) subplot(1,3,2); imshow(C1) subplot(1,3,3); imshow(C2)
编辑课件
14
【例3-19】对灰度图像实施膨胀腐蚀运算。 设计下面程序
A=imread('D:\flower1.bmp'); A1=rgb2gray(A);
se=strel('square',3);
A2=imdilate(A1,se); A3=imerode(A1,se);
subplot(1,3,1),imshow(A1);
图3-17 二值图像bc.bmp的颜色数据
编辑课件
4
为了节省篇幅,这里只研究字母b被膨胀后的变化情况。下 图中的4个图像都是字母b的变化情况。
(b)
(a)
结 果使

OpenCV图像处理篇之腐蚀与膨胀

OpenCV图像处理篇之腐蚀与膨胀

腐蚀与膨胀腐蚀和膨胀是图像的形态学处理中最基本的操作,之后遇见的开操作和闭操作都是腐蚀和膨胀操作的结合运算。

腐蚀和膨胀的应用非常广泛,而且效果还很好:1.腐蚀可以分割(isolate)独立的图像元素,膨胀用于连接(join)相邻的元素,这也是腐蚀和膨胀后图像最直观的展现2.去噪:通过低尺寸结构元素的腐蚀操作很容易去掉分散的椒盐噪声点3.图像轮廓提取:腐蚀操作4.图像分割5.等等...(在文后给出一则简单实用膨胀操作提取车牌数字区域的例子)结构元素是形态学操作中最重要的概念,如上图,B为结构元素。

腐蚀操作描述为:扫描图像的每一个像素,用结构元素与其覆盖的二值图像做“与”操作:如果都为1,结果图像的该像素为1,否则为0。

膨胀操作描述为:扫描图像的每一个像素,用结构元素与其覆盖的二值图像做“与”操作:如果都为0,结果图像的该像素为0,否则为1。

以上都是关于二值图像的形态学操作,对于灰度图像:1.腐蚀操作其中,g(x,y)为腐蚀后的灰度图像,f(x,y)为原灰度图像,B为结构元素。

腐蚀运算是由结构元素确定的邻域块中选取图像值与结构元素值的差的最小值。

2.膨胀操作其中,g(x,y)为腐蚀后的灰度图像,f(x,y)为原灰度图像,B为结构元素。

膨胀运算是由结构元素确定的邻域块中选取图像值与结构元素值的和的最大值。

在灰度图的形态学操作中,一般选择“平摊”的结构元素,即结构元素B 的值为0,则上面对灰度图的形态学操作可简化如下:好了,这就是基本的形态学操作——腐蚀和膨胀,下面是使用OpenCV 对图像进行腐蚀和膨胀的程序,还是秉承我们一贯的原则:搁下理论,先直观地感觉图像处理算法的效果,实际项目需要时再深入挖掘!程序分析结果及实际应用对“黑白小猪”进行膨胀操作的变化(随着结构元素大小的变化)如下图:对“黑白小猪”进行腐蚀操作的变化(随着结构元素大小的变化)如下图:膨胀与腐蚀在图像处理中具有广泛的用途,比如提取车牌过程中,可以通过膨胀运算确定车牌的区域。

形态学方法基本操作:膨胀、腐蚀、开运算和闭运算可视化效果

形态学方法基本操作:膨胀、腐蚀、开运算和闭运算可视化效果

形态学方法的基本操作包括膨胀、腐蚀、开运算和闭运算。

这些操作在形态学变换中起着重要的作用。

以下是这些操作的可视化效果:
1. 膨胀操作:膨胀操作可以扩大图像中高亮区域,使图像变得更加明亮。

在形态学变换中,膨胀操作通常被用于突出图像中的细节和特征。

2. 腐蚀操作:腐蚀操作可以缩小图像中高亮区域,使图像变得更加暗淡。

在形态学变换中,腐蚀操作通常被用于消除图像中的噪声和小的细节。

3. 开运算:开运算是先进行腐蚀操作,再进行膨胀操作。

这种操作可以去除图像中的小点、毛刺和小桥,同时总的位置和形状不会发生改变。

在形态学变换中,开运算通常被用于提取图像中的轮廓和线条。

4. 闭运算:闭运算是先进行膨胀操作,再进行腐蚀操作。

这种操作可以填平图像中的小湖(即小孔),弥合小的裂缝,同时总的位置和形状不会发生改变。

在形态学变换中,闭运算通常被用于填充图像中的空洞和小的黑点。

这些形态学方法的基本操作可以通过组合和变换来应用于图像处理中,以实现各种不同的视觉效果和应用。

腐蚀膨胀

腐蚀膨胀

最近的实验中需要对二值图像进行减噪处理,图像形态学中的腐蚀和膨胀能很好的解决此问题。

如果在腐蚀和膨胀操作前,对灰度图像做一次滤波,减噪效果将更明显。

腐蚀的具体操作是:用一个结构元素(一般是3×3的大小)扫描图像中的每一个像素,用结构元素中的每一个像素与其覆盖的像素做“与”操作,如果都为1,则该像素为1,否则为0。

膨胀的具体操作是:用一个结构元素(一般是3×3的大小)扫描图像中的每一个像素,用结构元素中的每一个像素与其覆盖的像素做“与”操作,如果都为0,则该像素为0,否则为1。

腐蚀的作用是消除物体边界点,使目标缩小,可以消除小于结构元素的噪声点;膨胀的作用是将与物体接触的所有背景点合并到物体中,使目标增大,可添补目标中的空洞。

开运算是先腐蚀后膨胀的过程,可以消除图像上细小的噪声,并平滑物体边界。

闭运算时先膨胀后腐蚀的过程,可以填充物体内细小的空洞,并平滑物体边界。

一、图像腐蚀膨胀细化的基本原理1.图像细化的基本原理⑴图像形态学处理的概念数字图像处理中的形态学处理是指将数字形态学作为工具从图像中提取对于表达和描绘区域形状有用处的图像分量,比如边界、骨架以及凸壳,还包括用于预处理或后处理的形态学过滤、细化和修剪等。

图像形态学处理中我们感兴趣的主要是二值图像。

在二值图像中,所有黑色像素的集合是图像完整的形态学描述,二值图像的各个分量是Z2的元素。

假定二值图像A和形态学处理的结构元素B是定义在笛卡儿网格上的集合,网格中值为1的点是集合的元素,当结构元素的原点移到点(x,y)时,记为Sxy,为简单起见,结构元素为3x3,且全都为1,在这种限制下,决定输出结果的是逻辑运算。

⑵二值图像的逻辑运算逻辑运算尽管本质上很简单,但对于实现以形态学为基础额图像处理算法是一种有力的补充手段。

在图像处理中用到的主要逻辑运算是:与、或和非(求补),它们可以互相组合形成其他逻辑运算。

⑶膨胀和腐蚀膨胀和腐蚀这两种操作是形态学处理的基础,许多形态学算法都是以这两种运算为基础的。

膨胀和腐蚀运算的优缺点

膨胀和腐蚀运算的优缺点

膨胀和腐蚀运算的优缺点
膨胀和腐蚀运算是数字图像处理中经常使用的基本形态学运算。

它们可以用来改善图像的质量、去除噪声、分割目标等。

但是,它们也存在一些优缺点,下面就来详细介绍一下。

优点:
1. 增强图像的边缘和轮廓:膨胀和腐蚀运算可以增强图像的边缘和轮廓,使目标更加突出,更容易进行后续的图像处理。

2. 去除噪声:膨胀和腐蚀运算可以去除图像中一些小的噪声,使图像更加清晰。

3. 分割目标:膨胀和腐蚀运算可以将图像中的目标进行分割,使得后续处理更加容易。

缺点:
1. 信息丢失:膨胀和腐蚀运算会导致一些信息的丢失,使得图像的细节变得模糊。

2. 形态学运算的复杂度:膨胀和腐蚀运算的复杂度比较高,需要耗费较多的计算资源和时间。

3. 影响图像质量:如果膨胀和腐蚀运算的参数设置不合理,可能会导致图像质量下降,从而影响后续的图像处理结果。

总的来说,膨胀和腐蚀运算在数字图像处理中具有重要的作用,但需要根据具体的情况进行合理的参数设置和运算处理,才能达到最佳的效果。

- 1 -。

图像形态学腐蚀与膨胀方法研究

图像形态学腐蚀与膨胀方法研究

图像形态学腐蚀与膨胀方法研究摘要伴随着电子计算机技术的进步,通信技术日新月异的更新与发展,图像处理技术近年来得到突飞猛进的发展,并成功的应用到几乎所有与成像有关的领域,并发挥着相当重要的作用。

它利用计算机对数字图像进行一系列的操作,从而获得某种预期的结果,对图像进行处理时,经常运用图像处理技术以改善图像的质量。

现在图像处理仍然在不断的发展,延伸出更多的应用领域,相信数字图像处理技术的逐步发展定会让我们的信息生活变得更好。

在图像处理中,数学形态学的理论基础在数字图像信号处理领域中得到广泛应用,图像形态学的用途主要是获取物体拓扑和结构信息,通过物体和结构元素相互作用的某些运算,得到物体更本质的形态。

在图像处理中形态学主要应用是:(1)利用形态学的基本运算,对图像进行观察和处理,从而达到改善图像质量的目的;(2)描述和定义图像的几何参数和特征,如面积、周长、连通度、颗粒度、骨架和方向性等。

而腐蚀与膨胀是数学形态学最基本的算法,使得腐蚀与膨胀方法的研究价值得到更大的提升。

图像形态学腐蚀与膨胀方法在很多方面被应用,本文以图像的腐蚀与膨胀方法的理论分析为重点,围绕着其在众多图像处理方案中的出色表现,逐渐联系到图像的内容。

用多层次的介绍手法展现出图像腐蚀与膨胀方法研究的重要内涵。

本文主要的工作包括:(1)掌握Visual C++6.0软件的使用。

(2)深入学习图像形态学腐蚀与膨胀的基础理论,研究腐蚀与膨胀在图像处理中的应用。

(3)针对图像形态学腐蚀与膨胀方法进行研究,通过Visual C++6.0软件实现腐蚀与膨胀算法,掌握腐蚀与膨胀算法的实现过程。

本文集中阐述腐蚀与膨胀是如何进行水平腐蚀、垂直腐蚀、全方位腐蚀、水平膨胀、垂直膨胀、全方位膨胀、开运算以及闭运算的完成原理、步骤和它们的具体实现过程。

通过一系列的研究才能更加明确腐蚀与膨胀方法处理在图像信息处理的发展历程中发挥了不可替代的作用。

关键词:图像处理;数学形态学;腐蚀;膨胀AbstractWith the advance in computer technology, communication technology changes rapidly updated and developed, image processing technology has make a spurt of progress of development in recent years, and successfully applied to almost all domains related to the formation of image, and play a very important role. It uses the computer to carry out a series of operation on the digital image, so as to obtain some expected results, image processing often using image processing technology to improve the quality of the image. Now the image processing is still in constant development, extending more application fields, believe that the gradual development of the digital image processing technology will make our life better.In image processing, the theory foundation of mathematical morphology is applied widely in the field of digital image signal processing, use of image morphology is the main access to the object topology and structure information, some operational through the object and the structural elements of interaction, obtained the object state of nature. In image processing, morphological main applications are: (1) by using basic operation of morphology, were observed and the processing of the image, so as to achieve the purpose of improving the image quality. (2)The definition and description of image geometric parameters and characteristics, such as area, perimeter, connectivity, particle size, frame and direction etc.. The corrosion and expansion is the basic algorithm of mathematical morphology which makes the research value of corrosion and expansion method for the greater increase. Method of image morphology of corrosion and expansion is used in many aspects, this paper with the method of image corrosion expansion theory analysis as the key point, around its excellent performance in many images processing scheme, gradually linked to the content of the image. To show the image of corrosion and expansion method research important content of multi-level presentation techniques. The main work of this paper includes: (1) using Visual C++6.0 Software. (2) Study the basic theory and the expansion of the image morphology of corrosion depth, application and expansion of research in image processing corrosion. (3) According to a study on the method of image morphology of corrosion and expansion,realization of erosion and dilation algorithm by Visual C++6.0 Software, master the implementation process of erosion and dilation algorithm. This paper focuses on how the level of corrosion and expansion of corrosion, a full range of vertical horizontal expansion, vertical expansion, a full range expansion, open operation and close operation to complete the principle, steps and their realization.Through the research to a series of more clear corrosion and expansion method has played an irreplaceable role in the development of image processing.Key words: Image processing; mathematical morphology; corrosion; expansion目录1 绪论 (1)1.1引言 (1)1.2课题研究现状 (1)1.3课题目的和意义 (2)2 开发环境VISUAL C++介绍 (3)2.1V ISUAL C++6.0介绍 (3)2.2V ISUAL C++软件平台介绍 (4)2.2.1单文档格式 (4)2.2.2界面板部分 (5)2.2.3程序控制部分 (5)2.3设计中的MFC介绍 (5)3 腐蚀与膨胀的基本原理 (7)3.1图像的腐蚀 (7)3.2图像的膨胀 (8)3.3开运算 (10)3.4闭运算 (11)4 图像腐蚀与膨胀处理 (13)4.1CDIB类库的建立 (13)4.1.1CDIB类库的功能 (13)4.1.2CDIB类的构造 (13)4.2图像腐蚀与膨胀处理的实现 (16)4.2.1水平腐蚀处理实现 (16)4.2.2垂直腐蚀处理实现 (18)4.2.3全方向腐蚀处理实现 (20)4.2.4水平膨胀处理实现 (23)4.2.5垂直膨胀处理实现 (25)4.2.6全方位膨胀处理实现 (27)5 实验结果及讨论 (30)5.1腐蚀处理结果 (30)5.2膨胀处理结果 (32)5.3开闭运算处理结果 (33)5.3结果讨论 (35)结论 (36)致谢 (38)参考文献 (39)附录A 英文原文 (40)附录B 汉语翻译 (49)1 绪论1.1 引言随着计算机技术的日益发展,图像信息已成为人类认识世界的重要知识来源,人们研究发现,人类从外界获得的信息约有75%来自图像。

OpenCV图像的腐蚀与膨胀

OpenCV图像的腐蚀与膨胀

《OpenCV图像处理》---上机实验报告 31.实验题目:腐蚀与膨胀操作2.实验目的:(1)如何使用opencv提供的两种最基本的形态学操作,腐蚀与膨胀;(2)掌握opencv运行环境及腐蚀与膨胀的基本运行过程。

3.实验原理:(1)形态学操作:形态学操作就是基于形状的一系列图像处理操作,通过将结构元素作用于输入图像来产生输出图像。

基本的形态学操作有腐蚀与膨胀,他们的应运广泛:消除噪声,分割独立的图像元素,以及连接相邻的元素;寻找图像中明显的极大值区域或极小值区域。

(2)膨胀:此操作将图像A与任意形状的内核(B),通常为正方形或圆形,进行卷积;内核有一个可定义的锚点,通常定义为内核中心点;进行膨胀操作时,将内核B画过图像,将内核B覆盖区域的最大像素值提取,并代替锚点位置的像素。

显然这一最大化操作会导致图像中的亮区开始“扩展”。

(3)腐蚀:它在形态学操作家族里是膨胀操作的孪生姐妹。

它提取的是内核覆盖下的像素最小值;进行腐蚀操作时,将内核B画过图像,将内核B覆盖区域的最小像素值提取,并代替锚点位置像素,腐蚀操作的结果是图片亮区变细,黑色区域变大。

4.实验结果:5.源程序:#include<stdafx.h>#include<opencv2/imgproc/imgproc.hpp> #include<opencv2/highgui/highgui.hpp> #include<highgui.h>#include<stdlib.h>#include<stdio.h>using namespace std;using namespace cv;Mat src,erosion_dst,dilation_dst;int erosion_elem=0;int erosion_size=0;int dilation_elem=0;int dilation_size=0;int const max_elem=2;int const max_kernel_size=21;void Erosion(int ,void*);void Dilation(int ,void*);int main(int argc,char** argv){src=imread("na.jpg");if(!src.data){return -1;}namedWindow("Erosion Demo", CV_WINDOW_AUTOSIZE );namedWindow("Dilation Demo", CV_WINDOW_AUTOSIZE );cvMoveWindow("Dilation Demo",src.cols,0);createTrackbar("Element:\n0:Rect\n1:Cross\n2:Ellipse","E rosion Demo",&erosion_elem,max_elem,Erosion);createTrackbar("Kernel size:\n 2n +1","Erosion Demo", &erosion_size,max_kernel_size,Erosion);createTrackbar("Element:\n0:Rect\n1:Cross\n2:Ellipse","Dila tion Demo",&dilation_elem,max_elem,Dilation);createTrackbar("Kernel size:\n 2n +1","Dilation Demo",&dilation_size,max_kernel_size,Dilation);Erosion(0,0);Dilation(0,0);waitKey(0);return 0;}void Erosion(int,void*){int erosion_type;if(erosion_elem==0){erosion_type=MORPH_RECT;}else if(erosion_elem==1){erosion_type=MORPH_CROSS;}else if(erosion_elem==2){erosion_type=MORPH_ELLIPSE;} Matelement=getStructuringElement(erosion_type,Size(2*erosion_s ize+1,2*erosion_size+1),Point(erosion_size,erosion_size));erode(src,erosion_dst,element);imshow("Eerosion Demo",erosion_dst);}void Dilation(int,void*){int dilation_type;if(dilation_elem==0){dilation_type=MORPH_RECT;}else if(dilation_elem==1){dilation_type=MORPH_CROSS;} else if(dilation_elem==2){dilation_type=MORPH_ELLIPSE;} Matelement=getStructuringElement(dilation_type,Size(2*dilation _size+1,2*dilation_size+1),Point(dilation_size,dilation_size));erode(src,dilation_dst,element);imshow("Dilation Demo",dilation_dst);}实验总结:通过本次实验,我再一次学到了一种图像处理的方法,了解并使用OpenCV提供的两种最基本的形态学操作,腐蚀与膨胀及腐蚀和膨胀的基本原理,学习对输入的图片进行腐蚀(Erosion)和膨胀(Dilation)操作,我熟悉了对图片的腐蚀与膨胀的的操作和具体代码,写代码期间遇到过很多问题,通过查阅书籍和资料都一一改正了过来,总之,代码还是不太熟悉,还有待于进一步提高。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

图像的腐蚀和膨胀
研究背景和意义
依据数学形态学集合论方法发展起来的图像处理方法,在数字图像处理和机器视觉领域中得到了广泛的应用,形成了一种独特的数字图像分析和理论。

数学形态学是图像处理和模式识别领域的新方法,其基本的思想是:用具有一定形态的结构元素去度量和提取图像中的对应形状,已达到图像分析和识别的目的。

优势有一下几点:有效滤除噪声,保留图像中原有信息,算法很容易用并行处理方法有效实现,基于数学形态学的边缘信息提取处理优于基于微分运算的边缘提取算法,提取的边缘比较平滑,提取的图像骨架也比较连续,断点很少。

二.原理
特殊领域运算形式——结构元素,在每个像素位置上与二值图像对应的区域进行特定的逻辑运算。

运算结果是输出图像的相应像素。

运算效果取决于结构元素大小、内容以及逻辑运算性质。

结构元素:膨胀和腐蚀操作的最基本组成部分,用于测试输出图像,通常要比待处理的图像小的多。

二维平面结构元素由一个数值为0或1的矩阵组成。

结构元素的原点(锚点)指定了图像中需要处理的像素范围,结构元素中数值为1的点决定结构元素的领域像素在进行膨胀或腐蚀操作时是否需要参与计算。

常见的形态学运算有腐蚀和膨胀两种:
腐蚀:删除对象边缘某些像素。

膨胀:给图像中的对象边缘添加像素。

三.算法及效果图
膨胀算法:用3X3的结构元素扫描图像的每一个像素,用结构元素与其覆盖的二值图像做“与”操作,如果都为0,结果图像的该像素点为0,否则为1。

膨胀算法的效果是使二值图像扩大一圈。

腐蚀的算法:用3X3的结构元素,扫描图像的每一个像素点,用结构元素与其覆盖的二值图像做“与”操作,如果结果都为1,结果图像的该像素点为1,否则为0。

膨胀算法的结果:是二值图像减少一圈。

四.组合使用效果
先腐蚀后膨胀的过程:利用它可以消除小物体,在纤细点处分离物体,平滑较大物体边界,但同时并不会明显改变原来物体的面积。

先膨胀后腐蚀的过程:利用它可以填充物体内细小空洞,连接临近物体、平滑其边界,但同时并不会明显改变原来物体的面积。

通常由于噪声的影响,图像在阈值化后所得到的边界通常都很不平滑,物体区域具有一些噪声孔,而背景区域上散布着一些小的噪声物体,连续的开和闭运算可以有效的改善这种情况。

而有时,我们需要经过多次腐蚀,然后再加上相同次数的膨胀,才能产生比较好的处理效果。

可见图像的腐蚀与膨胀相结合有时可以使图像有较理想的处理效果。

图像处理分为多种,对于不同的图像腐蚀和膨胀的定义不同。

1. 形态学图像处理是在图像中移动一个结构元素,然后将结构元素
与下面的二值图像进行交、并等集合运算;
先腐蚀后膨胀的过程称为开运算。

它具有消除细小物体,在纤细处分离物体和平滑较大物体边界的作用。

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

它具有填充物体内细小空洞,连接邻近物体和平滑边界的作用。

2. 对灰度图像的膨胀(或腐蚀)操作有两类效果:
(1)如果结构元素的值都为正的,则输出图像会比输入图像亮(或暗);
(2)根据输入图像中暗(或亮)细节的灰度值以及它们的形状相对于结构元素的关系,它们在运算中或被消减或被除掉。

using System;
using System.Collections.Generic;
using ponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Drawing.Imaging;
using System.Runtime.InteropServices;
namespace WindowsFormsApplication2
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void LockUnlockBitsExample(PaintEventArgs e)
{
//Create a new bitmap
Bitmap bmp = new Bitmap("house.jpg");
//Lock the bitmap's bits
Rectangle rect = new Rectangle(0, 0, bmp.Width, bmp.Height);
BitmapData bmpData = bmp.LockBits(rect, ImageLockMode.ReadWrite, bmp.PixelFormat);
//Get the address of the fist line
IntPtr ptr = bmpData.Scan0;
//Declare an array to hold the bytes of the bitmap
int bytes = Math.Abs(bmpData.Stride) * bmp.Height;
byte[] rgbValues = new byte[bytes];
//Copy the RGB values into the array
Marshal.Copy(ptr, rgbValues, 0, bytes);
//Set every third value to 255. A 24bpp bitmap will look red
for (int counter = 2; counter < rgbValues.Length; counter += 3 ) {
rgbValues[counter] = 255;
}
//Copy the RGB values back to the bitmap
Marshal.Copy(rgbValues, 0, ptr, bytes);
//Unlock the bits
bmp.UnlockBits(bmpData);
//Draw the modified image
e.Graphics.DrawImage(bmp, 0, 150);
}
}
}。

相关文档
最新文档