膨胀与腐蚀,开运算与闭运算

复习一下以前学过的图像处理知识点,简单记录一下腐蚀与膨胀,开运算与闭运算的知识,本文处理均针对二值化图像。opencv二值化函数为threshold()。

一、腐蚀

1、定义与原理

腐蚀是一种消除连通域的边界点,使边界向内收缩的处理,如下图所示:

其实现原理是:首先设计一个结构元素,原点定位在待处理的目标像素上,通过判断是否覆盖,来确定是否该点被腐蚀掉

opencv 腐蚀处理接口: erode()

2、腐蚀算法步骤

1)扫描原图,找到第一个像素值为1的目标点

2)将预设好形状及原点位置的结构元素的原点移到该点

3)判断该结构元素所覆盖的像素值是否全部为1

是: 腐蚀后图像中相同位置上像素值为1

否: 腐蚀后图像中相同位置上像素值为0

4)重复2和3,直到所有原图中像素处理完成

3、作用

从上图可以看出,腐蚀运算可以将粘连在一起的不同目标物分离,并可将小的颗粒噪声去除

二、膨胀

1、定义与原理

膨胀是将与目标区域的背景点合并到该目标物中,使目标物边界向外部扩张的处理。

设计一个结构元素,结构元素的原点定位在背景像素上,判断是否覆盖有目标点,来确定是否该点被膨胀为目标点。

opencv 膨胀处理接口: dilate()

2、膨胀算法步骤

1)扫描原图,找到第一个像素值为0的背景点;

2)将预先设定好形状以及原点位置的结构元素的原点移到该点;

3)判断该结构元素所覆盖的像素值是否存在为1的目标点:

是:膨胀后图像中的相同位置上的像素值为1;

否:膨胀后图像中的相同位置上的像素值为0;

4)重复2)和3),直到所有原图中像素处理完成。

可以看出膨胀算法与腐蚀算法仅第一步有所不同,它们是一对逆运算

3、作用

容易看出,膨胀处理可以将断裂开的目标物进行合并,便于对其整体的提取。

三、开运算与闭运算

前面介绍的膨胀与腐蚀运算,对目标物的后处理有着非常好的作用。但是,腐蚀和膨胀运算改变了原目标物的大小。为保持目标物大小,考虑到腐蚀与膨胀是一对逆运算,将膨胀与腐蚀运算同时进行。就有了开运算与闭运算。

1、开运算

开运算是对原图先进行腐蚀处理,后再进行膨胀的处理,不仅可去除孤立的小点,毛刺和小桥,还可以在分离粘连目标物的同时,基本保持原目标物的大小。如下图:

2、闭运算

闭运算是对原图先进行膨胀处理,后再进行腐蚀的处理,不仅可弥合小孔,缝隙,还可以在合并断裂目标物的同时,基本保持原目标物的大小。

3、特殊处理

如果当按照常规的开运算不能分离粘连,或者是闭运算不能合并断裂:

对于开运算可以先进行N次腐蚀,再进行N次膨胀;

对于闭运算可以先进行N次膨胀,再进行N次腐蚀。

如下图所示

### 回答1: 在图像处理中,膨胀腐蚀开运算运算是常用的基本操作,JavaCV提供了相关的方法实现。 1. 膨胀 膨胀是将目标物体的边界向外扩张,使它变宽变厚,可以用于填补空洞、连接断点等操作。 ```java int kernelSize = 5; // 卷积核大小 Mat kernel = getStructuringElement(MORPH_RECT, new Size(kernelSize, kernelSize)); // 创建一个矩形卷积核 Mat dilatedImage = new Mat(); dilate(image, dilatedImage, kernel); // 对图像进行膨胀操作 ``` 2. 腐蚀 腐蚀是将目标物体的边界向内收缩,使它变窄变细,可以用于消除小的干扰、分离物体等操作。 ```java int kernelSize = 5; // 卷积核大小 Mat kernel = getStructuringElement(MORPH_RECT, new Size(kernelSize, kernelSize)); // 创建一个矩形卷积核 Mat erodedImage = new Mat(); erode(image, erodedImage, kernel); // 对图像进行腐蚀操作 ``` 3. 开运算 开运算是先进行腐蚀操作,再进行膨胀操作,可以用于消除小的干扰、断开物体之间的细连接等操作。 ```java int kernelSize = 5; // 卷积核大小 Mat kernel = getStructuringElement(MORPH_RECT, new Size(kernelSize, kernelSize)); // 创建一个矩形卷积核 Mat openedImage = new Mat(); morphologyEx(image, openedImage, MORPH_OPEN, kernel); // 对图像进行开运算 ``` 4. 运算 运算是先进行膨胀操作,再进行腐蚀操作,可以用于填补小的空洞、连接物体之间的细连接等操作。 ```java int kernelSize = 5; // 卷积核大小 Mat kernel = getStructuringElement(MORPH_RECT, new Size(kernelSize, kernelSize)); // 创建一个矩形卷积核 Mat closedImage = new Mat(); morphologyEx(image, closedImage, MORPH_CLOSE, kernel); // 对图像进行运算 ``` 以上是JavaCV中实现膨胀腐蚀、开运算的基本方法,需要根据实际需求选择适合的操作和参数。 ### 回答2: 膨胀腐蚀图像处理中常用的一对基本操作,用来改变图像的形状和结构。而开运算则是对膨胀腐蚀的组合运算,用来改善图像的细节。 膨胀操作是将图像中的物体边缘进行扩张,使其变得更加粗壮。它是通过将图像中的每个像素与邻域内的像素进行比较,并选择其中最亮的像素作为结果像素来实现的。膨胀操作可以用来填充图像中的小缺口,连接图像中的不连续轮廓,以及扩大图像中的物体。 腐蚀操作膨胀相反,它将图像中的物体边缘进行收缩,使其变得更加细化。腐蚀操作是通过将图像中的每个像素与邻域内的像素进行比较,并选择其中最暗的像素作为结果像素来实现的。腐蚀操作可以用来去除图像中的小噪点,分离图像中相连的物体,以及缩小图像中的物体。 开运算是先腐蚀膨胀的组合操作,它可以用来去除图像中的毛刺和细小结构、平滑图像的边缘。运算则是先膨胀腐蚀的组合操作,它可以用来填充图像中的小洞和断裂,平滑图像中物体的边界。开运算可以进一步强调图像中物体的形状和结构特征,提取出感兴趣的图像区域。 在JavaCV中,可以使用OpenCV库提供的函数来实现膨胀腐蚀开运算运算操作。这些函数可以直接在图像上操作,实现图像的形态学处理。利用这些函数,我们可以对图像进行膨胀腐蚀和开运算,从而改变图像的形状和结构,提取出我们感兴趣的图像内容。 ### 回答3: 膨胀腐蚀图像处理中常用的一对基本操作,可以通过改变图像的形态特征来实现一些特定的图像处理任务。 膨胀操作是将图像中的亮像素扩张,使其周围的像素也变成亮像素。膨胀操作可以使目标物体变大,或者填充一些空洞。在javacv中,可以使用dilate函数实现膨胀操作。该函数接受图像矩阵和结构元素作为参数,返回经过膨胀操作后的图像。 腐蚀操作是将图像中的亮像素收缩,使其周围的像素也变成暗像素。腐蚀操作可以使目标物体变小,或者去除一些噪声。在javacv中,可以使用erode函数实现腐蚀操作。同样,该函数接受图像矩阵和结构元素作为参数,返回经过腐蚀操作后的图像。 开运算是先进行腐蚀操作,再进行膨胀操作开运算可以去除小物体、平滑较大物体的边界,并且保留较大物体的形态特征。在javacv中,可以使用函数morphologyEx来实现开运算操作运算是先进行膨胀操作,再进行腐蚀操作运算可以填充小空洞、平滑较小物体的边界,并且保留较小物体的形态特征。同样地,在javacv中,可以使用函数morphologyEx来实现运算操作。 总结来说,通过使用膨胀腐蚀、开运算操作,可以对图像进行形态学处理,改变其形态特征,实现一些特定的图像处理任务。在javacv中,可以使用相应的函数来进行这些操作
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

well_fly

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值