图像腐蚀和膨胀的原理_图像处理腐蚀和膨胀原理-程序员宅基地

技术标签: 图像处理  

腐蚀和膨胀是图像应用中比较广泛的操作,笔者尽量让从未接触过腐蚀和膨胀的读者看完这篇博客就能明白。

概念

结构元

首先需要熟悉几个概念,结构元它就是用来操作图像的一种空间上的模板,它通常有以下几种形状,其中的小黑点代表原点,原点不一定位于几何尺寸对齐的位置,它可以在结构元内的任意位置。下图第一行是结构元的原始的形状,第二行是计算机在操作图像时要求将结构元填充成矩形(要尽可能的少填充元素)。
在这里插入图片描述

集合A

被结构元操作的一系列元素,这些元素在图像中可以理解为图像中每个像素点的二维位置。下图中A就是一个集合,B就是结构元。

在这里插入图片描述

结构元在集合A上的操作

  • 将结构元的原点与集合A的原点对齐,对上图来说,通常就将A的左上角定为集合A的原点。
  • 不断平移结构元B的原点,让其能够访问集合A上所有的元素。(平移的时候,结构元其他点位置相对于原点位置保持不变)。

当将上图中,结构元B原地平移到集合A的原点处(A左上角),会发现结构元B的其他元素已经超出了集合A的范围,在计算机中处理要求对集合A进行填充至矩形,并且能够刚好容纳结构元B。填充效果如下图所示:

在这里插入图片描述

集合符号

∈ \in 表示属于,代表元素与集合的关系,例如
A = { 1 , 2 , 3 , 4 } 1 ∈ A A = \{ 1 , 2 , 3 , 4 \}\\ 1\in A A={ 1,2,3,4}1A

⊆ \subseteq 表示包含,代表集合与集合的关系,例如
A = { 1 , 2 , 3 , 4 } , B = { 1 , 2 } B ⊆ A A = \{ 1 , 2 , 3 , 4 \},B= \{1,2\}\\ B\subseteq A A={ 1,2,3,4}B={ 1,2}BA

腐蚀操作

( B ) z = { c ∣ c = b + z , b ∈ B } (B)_z =\{c|c = b+z,b\in B\} (B)z={ cc=b+zbB}

b代表所有属于结构元B的元素,很明显 ( B ) z (B)_z (B)z就代表结构元B平移z后的集合。

B对A腐蚀表示为:
A ⊖ B = { z ∣ ( B ) z ⊆ A } A\ominus B=\{z|(B)_z\subseteq A\} AB={ z(B)zA}

也就是结构元B平移z后依然包含在集合A中所有的z的集合。又可以表示为
A ⊖ B = { z ∣ ( B ) z ∩ A c = ∅ } A\ominus B=\{z|(B)_z \cap A^c = \varnothing \} AB={ z(B)zAc=}
A c A^c Ac是集合A的补集,也就是不在集合A中的其他元素。

以下图为例:

  • 初始的集合A和结构B

在这里插入图片描述

  • 平移结构元B原点结构元B原地平移到集合A的原点处(A左上角)

在这里插入图片描述

  • 平移z的结构元B,找到第一个平移z后结构元B依然包含在集合A内。

在这里插入图片描述

因为平移的z是以原点为参考的,所以这个z就是下图红色的位置。

在这里插入图片描述

  • 直到找到所有平移z后结构元B依然包含在集合A。得到如下图的结果
    在这里插入图片描述

其中白色代表被结构元B处理后不满足腐蚀结果的位置,红色代表满足腐蚀处理后的位置。相当于被腐蚀后的集合A边界小了一圈,对应于图像操作中能够去除孤立的点。

膨胀操作

( B ^ ) z = { w ∣ w = − b , b ∈ B } (\hat B)_z = \{w|w=-b,b\in B\} (B^)z={ ww=b,bB}

b代表所有属于结构元B的元素,很明显 ( B ^ ) z (\hat B)_z (B^)z就代表结构元B在原点处反转后的集合。对于原点对称的结构元B
( B ^ ) z = ( B ) z (\hat B)_z = (B)_z (B^)z=(B)z
B对A膨胀表示为:
A ⊕ B = { z ∣ ( B ^ ) z ∩ A ≠ ∅ } A\oplus B=\{z|(\hat B)_z\cap A \neq \varnothing\} AB={ z(B^)zA=}

也就是反转后的结构元B平移z后与集合A的交集不为空的所有z的集合。又可以表示为:
A ⊕ B = { z ∣ [ ( B ^ ) z ∩ A ] ⊆ A } A\oplus B=\{z|[(\hat B)_z\cap A] \subseteq A\} AB={ z[(B^)zA]A}
以下图为例:

  • 初始的集合A和结构B
    在这里插入图片描述

  • 沿着结构元B的原点将结构元B反转,因为结构元B关于原点对称,因此反转后的与未反转一致。

在这里插入图片描述

  • 平移反转后的结构元B原点到集合A的原点处(A左上角)

在这里插入图片描述

  • 平移z的反转结构元B,找到第一个平移z后的反转结构元B与集合A交集不为空。

在这里插入图片描述

同样平移的z是以原点为参考的,所以这个z就是下图红色的位置。

在这里插入图片描述

  • 直到找到所有平移z后的反转结构元B与集合A交集不为空。得到如下图的结果。

在这里插入图片描述

其中蓝色和红色都代表被反转结构元B处理后符合膨胀的位置,红色代表被膨胀后多出来的位置,蓝色代表原来集合A的位置,相当于被膨胀后的集合A边界外扩了一圈,对应于图像操作中能够连接相对靠进孤立的点。

对偶操作

对于结构元B原点位于几何对称的位置时,有
( B ^ ) z = ( B ) z (\hat B)_z = (B)_z (B^)z=(B)z

  • 结构元B对A腐蚀的补集等于结构元B对A补集的膨胀

( A ⊖ B ) c = { z ∣ ( B ) z ⊆ A } c = { z ∣ ( B ) z ∩ A c = ∅ } c = { z ∣ ( B ^ ) z ∩ A c = ∅ } c = { z ∣ ( B ^ ) z ∩ A c ≠ ∅ } = ( A c ⊕ B ) \begin{aligned} (A\ominus B)^c&=\{z|(B)_z\subseteq A\}^c\\ &=\{z|(B)_z\cap A^c = \varnothing\}^c\\ &=\{z|(\hat B)_z\cap A^c = \varnothing\}^c\\ &=\{z|(\hat B)_z\cap A^c \neq \varnothing\}\\ &=(A^c\oplus B) \end{aligned} (AB)c={ z(B)zA}c={ z(B)zAc=}c={ z(B^)zAc=}c={ z(B^)zAc=}=(AcB)

  • 结构元B对A膨胀的补集等于结构元B对A补集的腐蚀

( A ⊕ B ) c = { z ∣ ( B ^ ) z ∩ A ≠ ∅ } c = { z ∣ ( B ^ ) z ∩ A = ∅ } = { z ∣ ( B ^ ) z ⊆ A c } = { z ∣ ( B ) z ⊆ A c } = ( A c ⊖ B ) \begin{aligned} (A\oplus B)^c&=\{z|(\hat B)_z\cap A\neq \varnothing \}^c\\ &=\{z|(\hat B)_z\cap A = \varnothing\}\\ &=\{z|(\hat B)_z \subseteq A^c\}\\ &=\{z|( B)_z\subseteq A^c\}\\ &=(A^c\ominus B) \end{aligned} (AB)c={ z(B^)zA=}c={ z(B^)zA=}={ z(B^)zAc}={ z(B)zAc}=(AcB)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_31568011/article/details/115413974

智能推荐

0406任务二高级算法梳理-GBDT算法梳理_gbdt 即利用线性搜索估计叶节点区域的值,使损失函数极小化-程序员宅基地

文章浏览阅读284次。任务四MySQL实战_gbdt 即利用线性搜索估计叶节点区域的值,使损失函数极小化

Lua: Module 'Bit' not found / no file ./bit.so [已解决]_module 'bit' not found:-程序员宅基地

文章浏览阅读1w次。Lua:Module ‘Bit’ not found/no file ./bit.so[已解决]问题描述:问题解决:问题描述:执行lua程序时报错如下:Module ‘Bit’ not found/no file ./bit.so问题解决:在bitop下载最新包:http://bitop.luajit.org/download.html下载到本地后解压:然后在本机ma..._module 'bit' not found:

【ESP32调试-快速入门】-程序员宅基地

文章浏览阅读3.5k次,点赞3次,收藏15次。ESP32调试-快速入门_esp32调试

【工程师学算法】工程常用算法(二)—— 卡尔曼滤波(Kalman Filter)_卡尔曼滤波 精髓-程序员宅基地

文章浏览阅读2w次,点赞184次,收藏973次。一个工程师能走多远,取决于他对数学工具掌握的深度。_卡尔曼滤波 精髓

panel.sh:一个nginx+docker的云函和在线IDE面板,发明你自己的paas(1)_docker有自己的云函数面板吗-程序员宅基地

文章浏览阅读419次。本文关键字:Cannot connect to the Docker daemon at,containerd cannot properly do "clean-up" with shim process during start up,用标准方法实现的类群晖paas,with debugable appliance inside built_docker有自己的云函数面板吗

计算机网络技术的发展趋势,计算机网络技术发展趋势(原稿)-程序员宅基地

文章浏览阅读1.6k次。《计算机网络技术发展趋势(原稿).doc》由会员分享,可免费在线阅读全文,更多与《计算机网络技术发展趋势(原稿)》相关文档资源请在帮帮文库(www.woc88.com)数亿文档库存里搜索。1、,计算机网络用户对计算机网络安全技术的需求程度也会不断增加加的,所以我国当前的安全管理部门定要针对计算机安全,网络技术进行有效的研发。计算机网络安全现状计算机网络系统趋于不稳定状态随着当前人们生活节奏的不断加..._计算机网络技术发展三大趋势

随便推点

mysql8.0 主从复制 Authentication plugin ‘caching_sha2_password‘ Error_code: MY-002061解决办法-程序员宅基地

文章浏览阅读2.8k次,点赞8次,收藏10次。mysql8.0 主从复制 Authentication plugin 'caching_sha2_password' Error_code: MY-002061解决办法_error_code: my-002061

【前端】在Vue页面中引入其它vue页面 数据传输 相互调用方法等_vue一个页面引用另一个页面-程序员宅基地

文章浏览阅读5k次,点赞3次,收藏11次。那么我们只需要在home.vue想要的地方添加比如我们需要在 home.vue 中引用 headView.Vue。_vue一个页面引用另一个页面

有个码龄 10 年的程序员跟我说:“他编程从来不用鼠标”,我说:_10年码龄-程序员宅基地

文章浏览阅读4.5w次,点赞845次,收藏4k次。2021 年程序员必备 Windows 快捷操作大大大全_10年码龄

JAVA—JVM详解_java jvm-程序员宅基地

文章浏览阅读582次。JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。引入Java语言虚拟机后,Java语言在不同平台上运行时不需要重新编译。Java语言使用Java虚拟机屏蔽了与具体平台相关的信息,使得Java语言编译程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。通过JVM,Java实现了平台无关性。_java jvm

BGP---边界网关协议_边界网关协议不同的管理机构是哪些-程序员宅基地

文章浏览阅读768次。首先RIP是基于UDP进行传输的,而UDP是一个不可靠的协议,他在传输过程中可能会丢失某些数据。缺省情况下,RIP协议的路由更新报文的发送间隔是30S,而如果两个AS内部的路由表非常大,30秒的时间可能还不够将所有的路由信息传递给对方AS,这样,整条链路完全就是为了RIP的通告报文服务,而不能转发数据流量。将UDP协议更换为TCP协议,不用担心数据丢失,并且TCP会预先建立连接,也就让路由器有了一个准备的时间,而不是像RIP一样毫无准备的接受大量更新数据。取消周期更新,改为触发更新。_边界网关协议不同的管理机构是哪些

SVM算法应用综合练习(2)--人脸表情识别_predictor = dlib.shape_predictor('d:\\shape_predic-程序员宅基地

文章浏览阅读1.6k次。@TOC前言本次实验需要使用之前的shape_predictor_68_face_landmarks.dat一、图片预处理import dlib # 人脸识别的库dlibimport numpy as np # 数据处理的库numpyimport cv2 # 图像处理的库OpenCvimport os # dlib预测器detector = dlib.get_frontal_face_detector()# shape_predictor_68__predictor = dlib.shape_predictor('d:\\shape_predictor_68_face_landmarks.dat