目录

  • 一、腐蚀与膨胀
    • 1、腐蚀
    • 2、膨胀
    • 3、对偶性
    • 4、开操作与闭操作
  • 二、一些基本的形态学算法
    • 1、边界提取
    • 2、孔洞填充
    • 3、连通分量提取
    • 4、凸壳
    • 5、细化
    • 6、粗化
    • 7、骨架
    • 8、形态学重建
  • 三、灰度级形态学
    • 1、腐蚀和膨胀
    • 2、开运算和闭运算
    • 3、灰度级形态学算法

一、腐蚀与膨胀

1、腐蚀


腐蚀可以去除图像的某些部分。

2、膨胀


膨胀可以连接裂缝。

3、对偶性

膨胀和腐蚀彼此关于集合求补运算和反射运算是对偶的

4、开操作与闭操作

开操作:B对A先腐蚀,再进行膨胀
可以平滑物体轮廓,断开较窄的狭颈并消除较细的突出物。

闭操作:B对A先膨胀,再腐蚀
可以平滑轮廓一部分,会弥合较窄的间断和细长的沟壑,消除较小的空洞,填补轮廓线的断裂。

开操作与闭操作彼此关于集合求补运算和反射运算是对偶的

import cv2
import numpy as np## 测试图片
pic = 'finger.png'## a.图像的二值化
src = cv2.imread(pic)## b.设置卷积核
kernel = np.ones((3, 3))## c.图像的腐蚀
erosion1 = cv2.erode(src, kernel)## 图像的膨胀(开操作)
dst1 = cv2.dilate(erosion1, kernel)
## 再膨胀
dst2 = cv2.dilate(dst1, kernel)
## 再腐蚀(开操作的闭操作)
erosion2 = cv2.dilate(dst2, kernel)
## 效果展示
cv2.namedWindow('origin', 0)
cv2.imshow('origin', src)## 腐蚀后
cv2.namedWindow('after erosion1', 0)
cv2.imshow('after erosion1', erosion1)## 膨胀后
cv2.namedWindow('after dilate1', 0)
cv2.imshow('after dilate1', dst1)cv2.namedWindow('after dilate2', 0)
cv2.imshow('after dilate2', dst2)cv2.namedWindow('after erosion2', 0)
cv2.imshow('after erosion2', erosion2)
cv2.waitKey(0)

二、一些基本的形态学算法

1、边界提取

B对A进行腐蚀,再用A减去腐蚀后的图像

import cv2
import numpy as nppic = 'a.jpg'src = cv2.imread(pic,0)kernel = np.ones((3, 3))
erosion1 = cv2.erode(src, kernel)edge = src-erosion1
cv2.namedWindow('origin', 0)
cv2.imshow('origin', src)
cv2.namedWindow('edge', 0)
cv2.imshow('edge', edge)cv2.waitKey(0)

2、孔洞填充


3、连通分量提取

在二值图像中提取连通分量是许多自动图像分析应用中的核心任务。提取连通分量的过程实际上也是标注连通分量的过程, 通常的做法是给原图像中的每个连通区分配一个唯一代表该区域的编号, 在输出图像中该连通区内的所有像素的像素值就赋值为该区域的编号, 我们将这样的输出图像称为标注图像。
令A是包含一个或多个连通分量的集合,并形成一个阵列X0(大小与A相同)。
算法描述:
初始化:X0 = 连通分量A中的某个点
循环:

终止条件:当Xk Xk-1时,循环结束。
Xk包含输入图像中的所有连通分量。

4、凸壳

如果在集合A内连接任意两个点的直线段都在A的内部,则称A是凸的。任意集合S的凸壳H是包含于S的最小凸集。差集H-S称为S的凸缺。
获得集合A的凸壳的简单形态学算法如下:
令Bi,i = 1,2,3,4表示四个结构元。
其中X0i = A。
循环终止条件:Xki = Xk-1i。
令Di = Xki,则A的凸壳为:即,该方法反复使用B1对A做击中击不中变换,当不再发生进一步变化时,与A求并集,得到D1,由结构元Bi(i = 2,3,4)和A进行相同的运算可得Di(i = 2,3,4)。最后,4个D的并组成了A的凸壳。

5、细化

细化是在图像中将二值物体和形状减小为单个像素宽的线。

6、粗化

粗化是细化的形态学对偶。

7、骨架

from skimage import morphology, draw
import numpy as np
import matplotlib.pyplot as plt# 创建一个二值图像用于测试
image = np.zeros((400, 400))# 生成目标对象1(白色U型)
image[10:-10, 10:100] = 1
image[-100:-10, 10:-10] = 1
image[10:-10, -100:-10] = 1# 生成目标对象2(X型)
rs, cs = draw.line(250, 150, 10, 280)
for i in range(10):image[rs + i, cs] = 1
rs, cs = draw.line(10, 150, 250, 280)
for i in range(20):image[rs + i, cs] = 1# 生成目标对象3(O型)
ir, ic = np.indices(image.shape)
circle1 = (ic - 135) ** 2 + (ir - 150) ** 2 < 30 ** 2
circle2 = (ic - 135) ** 2 + (ir - 150) ** 2 < 20 ** 2
image[circle1] = 1
image[circle2] = 0# 实施骨架算法
skeleton = morphology.skeletonize(image)# 显示结果
fig, (ax1, ax2) = plt.subplots(nrows=1, ncols=2, figsize=(8, 4))ax1.imshow(image, cmap=plt.cm.gray)
ax1.axis('off')
ax1.set_title('original', fontsize=20)ax2.imshow(skeleton, cmap=plt.cm.gray)
ax2.axis('off')
ax2.set_title('skeleton', fontsize=20)fig.tight_layout()
plt.show()

8、形态学重建

形态学重建涉及两幅图像和一个结构元。一幅图像是标记,它包含变换的起始点,另一幅图像是模板,它用来约束该变换。结构元用来定义连接性。
形态学重建的核心是测地膨胀和测地腐蚀。

三、灰度级形态学

f(x,y)和b(x,y)为两个二维数字函数。f(x,y)表示一幅灰度级图像,b(x,y)表示结构元。
灰度级形态学中的结构元分为两类:非平坦或平坦的结构元。

1、腐蚀和膨胀

平坦结构元 b的值在其定义域内的所有坐标处均为0
当b的原点在(x,y)处时,用一个平坦结构元b在(x,y)处对图像f的腐蚀定义为:图像f中与b重合区域的最小值。
b ̂ 的原点在(x,y)处时,平坦结构元b在任何位置(x,y)处对图像f的膨胀定义为:图像f中与b ̂ 重合区域的最大值。
其中b ̂ = b(-x,-y)。
非平坦结构元
腐蚀膨胀腐蚀和膨胀关于函数的补集和反射是对偶的。

2、开运算和闭运算

结构元b对图像f的开运算
先进行腐蚀操作可以除去小的亮的图像细节,但这样会使图像变暗,接下来进行膨胀操作增强图像的整体亮度。

结构元b对图像f闭运算
先通过膨胀操作除去图像中的暗细节,同时增加图像的亮度,接下来对图像进行腐蚀,而不会将膨胀操作除去的部分重新引入图像中。

3、灰度级形态学算法

形态学平滑
开运算抑制比结构元小的亮细节,闭运算抑制暗细节,所以经常将二者结合起来平滑图像和去除噪声。
形态学梯度
腐蚀和膨胀可与图像相减结合起来得到一幅图像的形态学梯度,形态学梯度由g定义:

import cv2
import numpy as nppic = 'a.jpg'
src = cv2.imread(pic,0)
kernel = np.ones((3, 3))erosion1 = cv2.erode(src, kernel)
dst1 = cv2.dilate(src, kernel)
result = dst1 - erosion1cv2.namedWindow('origin', 0)
cv2.imshow('origin', src)
cv2.namedWindow('grad', 0)
cv2.imshow('grad', result )cv2.waitKey(0)

膨胀粗化一幅图像中的区域,腐蚀则细化它们,膨胀和腐蚀之差强调区域间的边界。同质区域不受影响(只要SE相对较小),因此相减操作趋于消除同质区域。最终结果是边缘被增强而同质区域的贡献则被抑制的图像。
膨胀得到的图像比原图像更明亮,并且减弱或消除小的、暗的细节部分。比原图像模糊。
腐蚀得到的图像更暗,并且尺寸小,明亮的部分被削弱 。
顶帽变换和底帽变换
图像相减与开运算和闭运算相结合,可称为所谓的top-hat(顶帽)变换和bottom-hat(底帽)变换。
灰度级图像f的顶帽变换定义为f减去其开运算:f的底帽变换为f的闭运算减去f:顶帽变换用于暗背景上的亮物体,可以得到图像中面积小于结构元且比周围亮的区域;底帽变换用于亮背景上的暗物体,可以得到图像中面积小于结构元且比周围暗的区域。故也常称为白顶帽变换和黑底帽变换。
粒度测定
粒度测定属于判断图像中颗粒的大小分布的领域。形态学可间接用于估计颗粒的大小分布,而不需要识别并测量图像中的每个颗粒。
对于比背景亮且具有规则形状的颗粒,基本方法是使用逐渐增大的结构元对图像执行开运算。对于每一个开运算,计算该开运算中像素值的和,该和有时称为表面区域。因为开运算会降低亮特征的灰度,故表面区域会睡着结构元的增大而减小。

数字图像处理第九章笔记相关推荐

  1. 数字图像处理第九章笔记——形态学图像处理

    目录 引言 一.预备知识 1.1 平移与反射 1.2 结构元 二. 腐蚀和膨胀 2.1 腐蚀 2.2 膨胀 2.3 对偶性 2.4 python实现腐蚀和膨胀 三.开操作和闭操作 四. 击中或击不中变 ...

  2. 数字图像处理第九章——形态学图像处理

    数字图像处理第九章 数字图像处理---形态学图像处理 (一)预备知识 1.1 集合理论中的基本概念 1.2 二值图像.集合及逻辑算子 (二)膨胀和腐蚀 2.1 膨胀 2.2 结构元的分解 2.3 st ...

  3. imopen和bwmorph_数字图像处理第九章讲义.ppt

    第九章 形态学图像处理 预备知识 膨胀与腐蚀 开操作和闭操作 击中或击不中变换 一些基本的形态学算法 灰度级形态学 第九章 形态学图像处理 第九章 形态学图像处理 预备知识 预备知识 集合论中的几个基 ...

  4. 数字图像处理——第九章 形态学图像处理

    数字图像处理--第9章 形态学图像处理 文章目录 数字图像处理--第9章 形态学图像处理 1 基础知识 1.1 形态学图像 1.2 二值图像 2 腐蚀和膨胀 2.1 腐蚀 2.2 膨胀 3 开操作与闭 ...

  5. 数字图像处理——第九章(形态学图像处理)

    参考:https://blog.csdn.net/Dujing2019/article/details/90050755 参考:https://blog.csdn.net/weixin_4190739 ...

  6. 数字图像处理第九章形态学处理

    文章目录 引言 9.1预备知识 9.2腐蚀和膨胀 9.2.1腐蚀 9.2.2膨胀 9.3开操作和闭操作 9.3.1开操作 9.3.2闭操作 9.4一些基本的形态学算法 9.4.1边界提取 9.4.2孔 ...

  7. 数字图像处理第九章 形态学图像处理

    形态学图像处理 1 预备知识 1.1 集合理论中的基本概念 1.2 二值图像.集合及逻辑算子 2 膨胀和腐蚀 2.1 膨胀 2.2 腐蚀 3 膨胀与腐蚀的结合 3.1 开操作和闭操作 3.2 击中或击 ...

  8. 数字图像处理第九章----形态学图像处理

    文章目录 1.概念 2.腐蚀与膨胀 3.开闭运算 4.顶帽与黑帽运算 5.边界提取与区域填充 6.细化 7.总结 1.概念 形态学操作:数学形态学时基于集合论的图像处理方法,最早出现在生物学的形态与结 ...

  9. 数字图像处理——第九章 形态学处理

    文章目录 引言 9.1 一些基本的形态学集合 9.2 腐蚀和膨胀 9.3 开操作与闭操作 9.4 击中与击不中 9.5 形态学处理函数 实验部分 总结 引言 本章主要将数学形态学作为工具从图像中提取表 ...

最新文章

  1. 芯盾时代:致力于身份认证安全的领军者
  2. 图表控件 c++_用C/C++编写16位虚拟内核
  3. 3大常见光伏加盟骗局大起底
  4. Scala在挖财的应用实践
  5. xftp 无法连接linux 22端口,解决Xshell不从22端口连接服务器
  6. mac下 如果docker 如果访问不到网 就下载哥docker-machine 然后进入到vbox下进行操作
  7. python爬虫requests简单案例_Python小例子:一个最简单的爬虫
  8. git命令之git rebase 的用法
  9. 【比赛】计算机领域有哪些常见的比赛
  10. ac自动机 匹配最长前缀_傻傻分不清吗?——Trie Tree,字典树、前缀树概述
  11. 六万字最全总结Java数据库编程MyBatis(+收藏)
  12. 海思Hi3519AV100sensor移植之二-- imx586 sensor
  13. 《战狼2》,我可以说点什么
  14. 机器视觉硬件之光源选型以及打光技巧
  15. 两个路由器无线连接教程
  16. html 组合快捷键,ctrl常用组合键有哪些
  17. 牛客NC272 栈的压入、弹出序列
  18. 【算法训练营学习笔记-Week06】一遍不懂就多刷几遍
  19. 苹果庆祝 7 月17 日 Emoji 世界表情符号日,带来众多新表情
  20. 用Python与Watson,将《魔戒》甘道夫的性格可视化!

热门文章

  1. 人脸识别系统——Dlib人脸检测
  2. 数学速算法_中小学数学神奇速算法,孩子吃透,运算能力提升快!
  3. 原反补码的相互转换、补码加减法计算规则及例题
  4. 索尼的hlg是什么_索尼HLG的使用方法
  5. 免费关键词挖掘工具-python关键词挖掘工具源码
  6. 谈谈现在低价U盘的质量问题
  7. 读书笔记--电气图连接线的表示方法
  8. PS霓虹灯光字体效果一键制作方法
  9. C++11实现多线程电梯运行
  10. VBA用字典实现分类汇总(二)