ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

数字图像处理: 形态学处理——腐蚀与膨胀

2022-05-19 11:04:42  阅读:182  来源: 互联网

标签:src 迭代 卷积 数字图像处理 cv2 形态学 腐蚀 图像


原文转自:https://blog.csdn.net/zaishuiyifangxym/article/details/89790469

 

1 形态学操作


形态学(morphology)一词通常表示生物学的一个分支,该分支主要研究动植物的形态和结构。这里,我们使用同一词语表示数学形态学(Mathematical morphology)的内容,将数学形态学作为工具从图像中提取表达和描绘区域形状的有用图像分量,如边界、骨架和凸壳等。

形态学处理主要针对的是二值图像(0或1)

形态学通常使用图像腐蚀和图像膨胀两个操作,这些操作是形态学处理的基础。

 

2 图像腐蚀

作为{​{Z}^{2}}中的集合AB,表示为A\ominus BBA的腐蚀定义为:

                                                                              A\ominus B=\left\{ z\left| {​{(B)}_{z}}\subseteq A \right. \right\}

上式表示图像A用卷积模板B来进行腐蚀处理,通过模板B与图像A进行卷积计算,得出B覆盖区域的像素点最小值,并用这个最小值来替代参考点的像素值。如图所示,将左边的原始图像A腐蚀处理为右边的效果图A\ominus B

 

 

图像腐蚀的效果如下图所示:

 

 

图像腐蚀类似于“邻域被蚕食”,将图像中的高亮区域或白色部分进行缩减细化,其运行结果图比原图的高亮区域更小。其主要包括两个输入对象:

(1) 二值图像

(2 )卷积核

 

卷积核是腐蚀中的关键数组,采用numpy库可以生成。卷积核的中心点逐个像素扫描原始图像,腐蚀的过程如下图所示:

 

 被扫描到的原始图像中的像素点,只有当卷积核对应的元素值均为1时,其值才为1,否则其值修改为0。换句话说,遍历到的黄色点位置,其周围全部是白色,保留白色,否则变为黑色,图像腐蚀变小。如下图所示:

 

 

图像腐蚀主要使用的函数为 erode(),其函数形式如下:

dst = cv2.erode(src, kernel, iterations)

其中,参数:

dst 表示处理的结果;

src 表示原图像;

kernel 表示卷积核;

iterations 表示迭代次数。

注:迭代次数默认是1,表示进行一次腐蚀,也可以根据需要进行多次迭代,进行多次腐蚀。

例如:下图表示55的卷积核,可以采用函数 np.ones((5,5), np.uint8) 构建。也可以使用cv2.getStructuringElement()方法构建。

 

 

(1)卷积核大小为5\times5 ,迭代次数为1

代码如下所示:

#encoding:utf-8
import cv2
import numpy as np
 
#读取图片
src = cv2.imread('test1.bmp', cv2.IMREAD_UNCHANGED)
 
#设置卷积核
kernel = np.ones((5,5), np.uint8)
 
#图像腐蚀处理
erosion = cv2.erode(src, kernel)
 
#显示图像
cv2.imshow("src", src)
cv2.imshow("result", erosion)
 
#等待显示
cv2.waitKey(0)
cv2.destroyAllWindows()

 

 (2)卷积核大小为5\times5,迭代次数为9

 

 (2)卷积核大小为39\times39,迭代次数为1

 

 

3 图像膨胀

作为{​{Z}^{2}}中的集合AB,表示为A\oplus BBA的膨胀定义为:

                                                                        A\oplus B=\left\{ z\left| {​{(\widehat{B})}_{z}}\bigcap{A\ne \varnothing } \right. \right\}

图像膨胀是腐蚀操作的逆操作,类似于“领域扩张”,将图像中的高亮区域或白色部分进行扩张,其运行结果图比原图的高亮区域更大,线条变粗了,主要用于去噪。

(1) 图像被腐蚀后,去除了噪声,但是会压缩图像。

(2) 对腐蚀过的图像,进行膨胀处理,可以去除噪声,并且保持原有形状。

它也包括两个输入对象:

(1)二值图像或原始图像

(2)卷积核

图像膨胀的效果如下图所示:

 

 卷积核是腐蚀中的关键数组,采用numpy库可以生成。卷积核的中心点逐个像素扫描原始图像,如下图所示:

 

 

 

 

被扫描到的原始图像中的像素点,当卷积核对应的元素值只要有一个为1时,其值就为1,否则为0。

 

 

图像膨胀主要使用的函数为 dilate(),其函数用法如下所示:

dst = cv2.dilate(src, kernel, iterations)

其中,参数:

dst 表示处理的结果;

src 表示原始图像;

kernel 表示卷积核;

iterations 表示迭代次数。

注:迭代次数默认是1,表示进行一次膨胀,也可根据需要进行多次迭代,进行多次膨胀。通常进行1次膨胀即可。

例如,下图表示55的卷积核,可以采用函数 np.ones((5,5), np.uint8) 构建。

 

 

(1)卷积核大小为3\times3 ,迭代次数为1

代码如下所示:

#encoding:utf-8
import cv2
import numpy as np
 
#读取图片
src = cv2.imread('test2.bmp', cv2.IMREAD_UNCHANGED)
 
#设置卷积核
kernel = np.ones((3,3), np.uint8)
 
#图像膨胀处理
erosion = cv2.dilate(src, kernel)
 
#显示图像
cv2.imshow("src", src)
cv2.imshow("result", erosion)
 
#等待显示
cv2.waitKey(0)
cv2.destroyAllWindows()

运行结果如下图所示:

 

 

(1)卷积核大小为5\times5 ,迭代次数为1

 

标签:src,迭代,卷积,数字图像处理,cv2,形态学,腐蚀,图像
来源: https://www.cnblogs.com/IllidanStormrage/p/16287695.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有