Morphological image processing

article/2025/10/11 3:41:29

目录

基本思想:

一.集合论基础

1.集合的概念

2.集合间的关系和运算

二.二值形态学的基本运算

1.腐蚀

(1)概念

(2)结构元素形状对腐蚀运算结果的影响

(3)腐蚀运算在物体识别中的应用

2.膨胀

(1)概念

2.膨胀运算的基本过程

(2)结构元素形状对膨胀运算结果的影响

(3)膨胀运算的应用

(4)腐蚀运算与膨胀运算的对偶性

3.开运算与闭运算

(1)开运算

(2)闭运算

(3)开运算与闭运算对偶性

三.综上代码实现

1.函数说明

(1)getStructuringElement函数

(2)erode函数

(3)dilate函数

(4)morphologyEx函数

2.代码实现


基本思想:

数学形态学图像处理的基本思想是:用具有一定形态的结构元素(是指具有某种特定结构形状的基本元素,例如一定大小的矩形、圆或者菱形等)探测目标图像,通过检验结构元素在图像目标中的可放性和填充方法的有效性,来获取有关图像形态结构的相关信息,进而达到对图像分析和识别的目的。

一.集合论基础

1.集合的概念

所谓集合是指能作为整体论述的事物的集体。
集合在数学形态学中用于表示图像中的不同对象,比如在二值图像中,通常用所有值为“1”的像素的集合表示前景(目标),而用所有值为“0”的像素的集合表示图像的背景。

2.集合间的关系和运算

就是关于原点对称

二.二值形态学的基本运算

1.腐蚀

(1)概念

腐蚀运算的含义:每当在目标图像A中找到一个与结构元素B相同的子图像时,就把该子图像中与B的原点位置对应的那个像素位置标注为1,图像A上标注出的所有这样的像素组成的集合,即为腐蚀运算的结果。

注意:当结构元素在目标图像上平移时,结构元素中的任何元素不能超出目标图像的范围。

 一个实例生动形象

(2)结构元素形状对腐蚀运算结果的影响

腐蚀运算的结果不仅与结构元素的形状(矩形、圆形、菱形等)选取有关,而且还与原点位置的选取有关。

(3)腐蚀运算在物体识别中的应用

2.膨胀

(1)概念

2.膨胀运算的基本过程

注意:
(1)当结构元素中原点位置的值是0时,仍把它看作是0;而不再把它看作是1。
(2)当结构元素在目标图像上平移时,允许结构元素中的非原点像素超出目标图像范围。

反射集合B的原点不改变,而是模板上的其他点关于原点做反射(关于原点对称)!!!!

当模板和移动到的区域原点位置一样时,则跳过就行!!!

(2)结构元素形状对膨胀运算结果的影响

当目标图像不变,但所给的结构元素的形状改变时;或结构元素的形状不变,而其原点位置改变时,膨胀运算的结果都会发生改变。

(3)膨胀运算的应用

(4)腐蚀运算与膨胀运算的对偶性

3.开运算与闭运算

(1)开运算

(2)闭运算

(3)开运算与闭运算对偶性

三.综上代码实现

1.函数说明

(1)getStructuringElement函数

getStructuringElement函数会返回指定形状和尺寸的结构元素。

Mat getStructuringElement(int shape, Size esize, Point anchor = Point(-1, -1));

这个函数的第一个参数表示内核的形状,有三种形状可以选择。

矩形:MORPH_RECT;

交叉形:MORPH_CROSS;

椭圆形:MORPH_ELLIPSE;

第二和第三个参数分别是内核的尺寸以及锚点的位置。一般在调用erode以及dilate函数之前,先定义一个Mat类型的变量来获得getStructuringElement函数的返回值。对于锚点的位置,有默认值Point(-1,-1),表示锚点位于中心点。element形状唯一依赖锚点位置,其他情况下,锚点只是影响了形态学运算结果的偏移。

(2)erode函数

src:源图像

kernel:腐蚀操作的内核。我们一般使用函数 getStructuringElement 配合这个参数的使用。getStructuringElement 函数会返回指定形状和尺寸的结构元素(内核矩阵)。

dst:返回图像

anchor:锚点的位置,其有默认值(-1,-1),表示锚位于单位(element)的中心,我们一般不用管它。

iterations:迭代使用 erode()函数的次数,默认值为 1。

borderType:用于推断图像外部像素的某种边界模式。注意它有默认值 BORDER_DEFAULT。

borderValue:当边界为常数时的边界值,有默值 morphologyDefaultBorderValue(),一般我们不用去管他。需要用到它时,可以看官方文档中的 createMorphologyFilter()函数得到更详细的解释。

(3)dilate函数

和erode函数参数一样

(4)morphologyEx函数

op:使用的形态学方法

2.代码实现

import cv2 as cv
import matplotlib.pyplot as pltfilename ='/home/image/Pictures/lena256.jpg'
img = cv.imread(filename,0)
# 矩形:MORPH_RECT;
# 交叉形:MORPH_CROSS;
# 椭圆形:MORPH_ELLIPSE;
kernel = cv.getStructuringElement(cv.MORPH_ELLIPSE,(5,5))#构造一个椭圆形模板
print(kernel)
# 腐蚀 erode : anchor=(-1,-1)锚点(内核中心点),iterations定义腐蚀次数
erosion = cv.erode(img,kernel,anchor=(-1,-1),iterations = 1)
# edge
img1 = img -erosion
# 膨胀 dilate :格式同上函数
dilation = cv.dilate(img,kernel,iterations = 1)
#开运算:先腐蚀,再膨胀,可清除一些小东西(亮的),放大局部低亮度的区域
tophat1 = cv.morphologyEx(img, cv.MORPH_OPEN, kernel)
#闭运算:先膨胀,再腐蚀,可清除小黑点tophat2 = cv.morphologyEx(img, cv.MORPH_CLOSE, kernel)
plt.subplot(231),plt.imshow(img,cmap='gray'),plt.title("orinal"),plt.xticks([]),plt.yticks([])
plt.subplot(232),plt.imshow(erosion,cmap='gray'),plt.title("eroson"),plt.xticks([]),plt.yticks([])
plt.subplot(233),plt.imshow(img1,cmap='gray'),plt.title("original-erosion=edge"),plt.xticks([]),plt.yticks([])
plt.subplot(234),plt.imshow(dilation,cmap='gray'),plt.title("dilate"),plt.xticks([]),plt.yticks([])
plt.subplot(235),plt.imshow(tophat1,cmap='gray'),plt.title("cv.MORPH_OPEN"),plt.xticks([]),plt.yticks([])
plt.subplot(236),plt.imshow(tophat2,cmap='gray'),plt.title("cv.MORPH_CLOSE"),plt.xticks([]),plt.yticks([])plt.show()


http://chatgpt.dhexx.cn/article/un82t2KE.shtml

相关文章

实用的图片批量压缩优化工具

ImageOptim ImageOptim 支持 PNG/JPEG/GIF 动画,本质是各种影像优化工具的图形前端:AdvPNG、OptiPNG、Pngcrush、JpegOptim、jpegtran、Gifsicle 和 PNGOUT素材。 ImageOptim软件非常小! 2.6M而已ImageOptim操作非常非常非常快捷&#xff01…

【UNI APP】globalData全局变量

uni-app 在app.vue文件export default里面定义globalData,在当前文件(app.vue)里面获取globalData需要用this.$options.globalData获取,其他文件则用getApp().globalData获取。 this.$options是用来获取自…

uniapp 全局数据(globalData)的设置,获取,更改

因为uniapp基本上都是将页面,或者页面中相同的部分,进行组件化,所以会存在父,子,(子,父)之间的传值的情况,但在某些情况下,可以选择将内容设置为一个全局的变…

微信小程序定义和调用全局变量globalData

先看看文件结构: 1.现在app.js里面定义globalData对应的全局变量 2.然后在其他js文件进行调用。例如在photo.js里面 要注意的是需要在文件开始的时候初始化 app这个对象 //获取应用实例 const app getApp()

微信小程序:globalData和Storage数据存储的错误示例

前言 在小程序登录是,将返回的用户数据,存储在globalData中和storage中。 // 存储的数据是一个对象 wx.setStorageSync(userAuthData, user.data.data); this.globalData.userAuthData user.data.data; 之前,数据更新了,为了避…

uni-app之全局变量globalData的使用

一般访问请求的时候,baseurl我们都会用变量来代替,所以我们一半会把大量这种常用的,但是又不会经常变动的数据变成一个常量--globalData export default {onLaunch: function() {},onShow: function() {console.log(App Show)},onHide: function() {console.log(App Hide)},glo…

微信小程序中的共享数据 : globalData

和vue中的vuex作用相同,都是用于设置给所有页面都可以使用的数据的。 globalData在app.js中,它是一个对象,在里面设置要使用到的共享数据。 我们在其他页面要使用globalData中的数据时,首先如下: let app getApp() …

在uniapp中监听globalData中的值变化

小程序里怎么去监听app.js里的globalData数据变化呢 1、先再app.vue 中定义一个全局数据对象globalData,再对象里定义好相应的属性与属性值 globalData:{count:0 },methods:{watch:function(method,istr){var objthis.globalDataconsole.log(obj)Objec…

微信小程序中全局共享数据globalData的使用

1.全局共享数据 全局共享数据的两种方式 通过Vue原型共享数据通过globalData共享数据vuex本地存储 1)在Vue实例原型属性上添加属性,其他任何页面预想使用,直接使用this获取到, 比如: 主要代码:(在入口文件mian.js中) import request from ./utils/request Vue.prototype.re…

Vue全局共享数据之globalData,vuex,本地存储使用方法

目录 一、globalData 二、vuex存储方式 1.vue2用法,2.vue3用法 三、本地存储 uniapp的数据缓存 写在最前面,把vue能用到的存储方法都整理拿出来,方便阅读以及工作用。🍉🍉🍉可以收藏起来即拿即用 Vue全局共…

微信小程序 | 12.生命周期、globalData全局数据

文章目录 1.小程序的生命周期2.全局数据globalData3.globalData的应用3.1.搭配app.js的onLaunch()存储openid3.2.轮询globalData3.2.1.问题描述 3.2.2.解决方式:轮询globalData 1.小程序的生命周期 小程序生命周期(onLaunch、onShow、onHide、onReady、onLoad、onU…

uniapp 全局静态数据(globalData)的修改和使用

uniapp 全局静态数据(globalData)的修改和使用 全局静态数据: 在App.vue中的调用: this.globalData.systemTitle在App.vue中的修改: this.globalData.systemTitle res.title在pages中调用: let title…

微信小程序全局变量(globalData)和缓存(StorageSync)的区别和用法

globalData和storage的区别 一、app.globalData 是全局变量,下次进入的时候,就要重新获取,一般用于: 1、保存一些可能涉及安全类的数据,例如资源类,每次需要很准确的,就建议用全局变量。 2、…

【分布式】什么是分布式技术?

背景: 初代的服务器架构往往比较简单,应用程序、数据库、文件、代码等所有资源都放在一台服务器上,也就是单机结构。随着企业业务量的增多,一台服务器已经难以满足数据处理的需求了,那么对单机进行“复制粘贴”&#…

(分布式网络)基于残差网络的多光谱全色图像分布式融合框架

贡献: ①基于分布式框架(distributed framework)和residual learning,提出了一种鲁棒性强、泛化性能提高的RDFNet泛锐化模型。 ②提出了一种新的三分支泛锐化结构,其中两个分支分别用于提取MS和PAN图像特征。其中最重要的是第三个分支&…

分布式-分布式服务

微服务API 网关 网关的概念来源于计算机网络,表示不同网络之间的关口。在系统设计中,网关也是一个重要的角色,其中最典型的是各大公司的开放平台,开放平台类网关是企业内部系统对外的统一入口,承担了很多业务&#xf…

C++实现轻量级RPC分布式网络通信框架

前言: 2022/4/14更新:  在我重新回顾这篇文章的时候,我觉得里面内容有点乱,主要还是因为RPC里面涉及到很多概念和知识点。本来代码内容就已经挺抽象了,还要结合各种概念,让人难以阅读,所以特地…

C++实现分布式网络通信RPC框架

分布式网络通信rpc框架 项目是分布式网络通信rpc框架(项目源代码链接) 博文中提到单机服务器的缺点: 硬件资源的限制影响并发:受限于硬件资源,聊天服务器承受的用户的并发有限模块的编译部署难:任何模块小…

分布式网络计算机,分布式网络

分布式网络(Distributed Network) [编辑] 什么是分布式网络 分布式网络也叫网状网络,如图1所示,它是由分布在不同地点的计算机系统互连而成,网中无中心节点。通信子网是封闭式结构,通信控制功能分布在各节点上。 [编辑] 分布式网络…

分布式 - 分布式体系架构:集群和分布式

文章目录 01. 什么是集群?02. 集群为什么可以提高系统的可靠性?03. 集群为什么可以提高系统的性能?04. 什么是分布式计算?05. 如何进行分布式计算?06. 集群如何提高计算效率?07. 集群的优点和缺点&#xff…