《数字图像处理-OpenCV/Python》连载:形态学图像处理

《数字图像处理-OpenCV/Python》连载:形态学图像处理


本书京东 优惠购书链接 https://item.jd.com/14098452.html
本书CSDN 独家连载专栏 https://blog.csdn.net/youcans/category_12418787.html

在这里插入图片描述


第 12 章 形态学图像处理


形态学图像处理是基于形状的图像处理,基本思想是利用各种形状的结构元进行形态学运算,从图像中提取表达和描绘区域形状的结构信息。形态学运算的数学原理是集合运算,处理对象是黑色背景的二值对象或深色背景的灰度对象。


本章内容概要

  • 学习形态学运算的基本操作:腐蚀、膨胀及各种形态学高级运算。
  • 介绍灰度形态学运算。
  • 理解形态学结构元的意义,比较结构元对形态学运算的影响,构造自定义结构元。
  • 学习常用的形态学算法,如边界提取和线条细化。
  • 理解形态学重建的思想和原理,介绍形态学重建的应用,如边界清除、孔洞填充、骨架提取、粒径分离、粒度测定和角点检测。

12.11 基于形态学的粒度测定

粒度测度是指确定图像中颗粒的大小分布,属于判断图像中颗粒尺寸分布的邻域。

由于颗粒通常并不是整齐地分隔排列的,要通过逐个颗粒识别来计算颗粒数量非常困难。基于形态学的粒度测定,原理就是对于比背景亮且形状规则的颗粒,使用逐渐增大的结构元对图像进行开运算。

对于每次开运算得到的图像,称为表面区域。由于开运算会减小图像中的亮特征,使表面区域随结构元的增大而减小,由此得到一个一维阵列。计算一维阵列中相邻两个元素的差并绘图,曲线中的峰值代表图像中主要大小颗粒的分布。


【例程1217】基于形态学的粒度测定

本例程是基于形态学的粒度测定,通过使用逐渐增大的结构元对图像执行开操作。

设置一个半径从小到大的结构元序列,依次对其做开操作,并且统计图像的总灰度值,计算相邻灰度值的差。当结构元尺寸与圆形颗粒尺寸吻合时,会产生一个局部灰度高峰。比较不同尺寸的灰度差序列,峰值所对应的尺寸就是圆形颗粒的大致尺寸。


# 【1217】基于形态学的粒度测定
import cv2 as cv
import numpy as np
from matplotlib import pyplot as pltif __name__ == '__main__':img = cv.imread("../images/Fig1208.png", flags=0)  # 灰度图像_, imgBin = cv.threshold(img, 205, 255, cv.THRESH_BINARY_INV | cv.THRESH_OTSU)  # 二值处理 (黑色背景)plt.figure(figsize=(9, 6))plt.subplot(231), plt.axis("off"), plt.title("Original")plt.imshow(img, cmap='gray')# 用不同半径圆形结构元进行开运算rList = [14, 21, 28, 35, 42]for i in range(5):size = rList[i] * 2 + 1element = cv.getStructuringElement(cv.MORPH_ELLIPSE, (size, size))  # 圆形结构元imgOpen = cv.morphologyEx(imgBin, cv.MORPH_OPEN, element)plt.subplot(2, 3, i + 2), plt.title("Opening (r={})".format(rList[i]))plt.imshow(cv.bitwise_not(imgOpen), cmap='gray'), plt.axis("off")plt.tight_layout()plt.show()# 计算圆形直径的半径分布maxSize = 42sumSurf = np.zeros(maxSize)deltaSum = np.zeros(maxSize)for r in range(5, maxSize):size = r * 2 + 1element = cv.getStructuringElement(cv.MORPH_ELLIPSE, (size, size))  # 圆形结构元imgOpen = cv.morphologyEx(img, cv.MORPH_OPEN, element)sumSurf[r] = np.concatenate(imgOpen).sum()deltaSum[r] = sumSurf[r-1] - sumSurf[r]print(r, sumSurf[r], deltaSum[r])r = range(maxSize)plt.figure(figsize=(6, 4))plt.plot(r[6:], deltaSum[6:], 'b-o')plt.title("Delta of surface area")plt.yticks([])plt.show()

运行结果:

基于形态学算法进行不同半径的粒度筛分如图12-17。不同半径的粒度分布统计图如图12-18所示。

在这里插入图片描述
图12-17 基于形态学算法进行不同半径的粒度筛分


在这里插入图片描述

图12-18 不同半径的粒度分布统计图


程序说明:

(1) 图12-17(1)所示为原始图像,图12-17(2)~(6)所示为使用不同直径的圆形结构元对原始图像进行腐蚀的结果。小于圆形结构元尺寸的圆形都被完全腐蚀,而大于圆形结构元尺寸的圆形得以保留。不同直径的圆形结构元,相当于不同粒径的筛子,起到了筛分作用。
(2) 图12-18所示的横坐标是粒度半径r,纵坐标是半径r所对应的像素值。图中出现了3个明显的峰值,峰值对应的尺寸就是图中圆形颗粒的特征半径。


版权声明:
youcans@xupt 原创作品,转载必须标注原文链接:(https://blog.csdn.net/youcans/article/details/136113194)
Copyright 2024 youcans, XUPT
Crated:2024-02-14

《数字图像处理-OpenCV/Python》 独家连载专栏 : https://blog.csdn.net/youcans/category_12418787.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/474889.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HarmonyOS router页面跳转

默认启动页面index.ets import router from ohos.router import {BusinessError} from ohos.baseEntry Component struct Index {State message: string Hello World;build() {Row() {Column() {Text(this.message).fontSize(50).fontWeight(FontWeight.Bold)//添加按钮&am…

普法GraphicBuffer诞生以及跨进程传递

GraphicBuffer诞生以及跨进程传递重认识 引言 对于Android的Graphics图形堆栈这块,自我感觉看了蛮多的博客啊文档(不管是比较老的还是新一点的)。但是仅仅只是看了而已,都是蜻蜓点水,没有进行记录也没有总结。所以每次哪怕阅读过程中产业了很…

了解代码签名证书

作用 确认开发者身份:通过代码签名证书,用户可以验证软件的开发者是否是可信的。这有助于建立用户对软件的信任,降低用户对于恶意软件的风险。保证软件完整性:代码签名证书还可以确保软件在传输和安装过程中未被篡改。用户在安装…

1.初识Tauri

文章目录 一、前言二、基本认识三、js与rust通信四、构建应用 一、前言 原文以及后续文章可点击查看:初识Tauri。 Tauri是一款比较新的跨平台桌面框架,也是我目前最喜欢的一个框架,其官网为:Tauri 它的作用其实和Electron很像&…

基于Java SSM框架实现电影售票系统项目【项目源码】计算机毕业设计

基于java的SSM框架实现电影售票系统演示 SSM框架 当今流行的“SSM组合框架”是Spring SpringMVC MyBatis的缩写,受到很多的追捧,“组合SSM框架”是强强联手、各司其职、协调互补的团队精神。web项目的框架,通常更简单的数据源。Spring属于…

差异分析和PPI网路图绘制教程

写在前面 在原文中,作者获得285个DEG,在此推文中共获得601个DEG。小杜的猜想是标准化的水段不同的原因吧,或是其他的原因。此外,惊奇的发现发表医学类的文章在附件中都不提供相关的信息文件,如DEG数据、GO、KEGG富集信…

主持人大赛活动策划方案

一、第一轮比赛: 内容:同题主持,以枣矿集团主持人比赛为题进行开场主持。主持词自拟,内容包括:活动目的、意义、活动的准备情况、选手产生情况、活动将要进行的主要环节、介绍评委、对活动的展望等,可以采用…

flutter 文件上传组件和大文件分片上传

文件分片上传 资料 https://www.cnblogs.com/caijinglong/p/11558389.html 使用分段上传来上传和复制对象 - Amazon Simple Storage Service 因为公司使用的是亚马逊的s3桶 下面是查阅资料获得的 亚马逊s3桶的文件上传分片 分段上分为三个步骤:开始上传、上传对…

从概念到现实:数字孪生在智慧园区建设中的实现路径

目录 一、引言 二、数字孪生与智慧园区的关联 三、数字孪生技术的核心要素及实现路径 1、数据采集与处理 2、建立数字孪生模型 3、实时更新与优化 4、实现与智慧园区的集成 四、数字孪生技术在智慧园区中的应用场景 1、能源管理 2、安全监控 3、设施管理 五、面临的…

Spring事务实现原理

1、引言 spring的spring-tx模块提供了对事务管理支持,使用spring事务可以让我们从复杂的事务处理中得到解脱,无需要去处理获得连接、关闭连接、事务提交和回滚等这些操作。 spring事务有编程式事务和声明式事务两种实现方式。编程式事务是通过编写代码…

【LLM新概念】什么是深湖(DeepLake)

目录 一、说明二、深湖的意义三、深湖特色四、深湖与数据湖(Deep Lake vs Data Lake)五、深湖 vs 抱脸(Deep Lake vs Huggingface) 一、说明 Deep Lake 是专门用于深度学习用例的数据湖(数据库)&#xff0…

LeetCode 6. Z 字形变换

题目链接https://leetcode.cn/problems/zigzag-conversion/description/ 将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 Z 字形排列。 比如输入字符串为 "PAYPALISHIRING" 行数为 3 时,排列如下: P A …