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

news2024/11/27 14:29:46

《数字图像处理-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 plt

if __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 + 1
        element = 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 = 42
    sumSurf = np.zeros(maxSize)
    deltaSum = np.zeros(maxSize)
    for r in range(5, maxSize):
        size = r * 2 + 1
        element = 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.coloradmin.cn/o/1448659.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

《Git 简易速速上手小册》第9章:Git 工作流程定制(2024 最新版)

文章目录 9.1 选择合适的工作流9.1.1 基础知识讲解9.1.2 重点案例:为中等规模的 Python 项目选择 Feature Branch 工作流9.1.3 拓展案例 1:适应 Gitflow 工作流的大型项目9.1.4 拓展案例 2:使用 Forking 工作流的开源 Python 项目 9.2 定制化…

JavaScript 的点击劫持(Clickjacking)

🧑‍🎓 个人主页:《爱蹦跶的大A阿》 🔥当前正在更新专栏:《VUE》 、《JavaScript保姆级教程》、《krpano》、《krpano中文文档》 ​ ​ ✨ 前言 点击劫持是一种恶意攻击,攻击者会在用户不知情的情况下诱…

HGAME 2024 WEEK2 Web方向题解 全

---------【WEEK-2】--------- What the cow say? 题目描述:the cow want to tell you something 注意title,Python的flask漏洞可多呢 版本310 先测一下SSTI 正常情况下 SSTI测试 变量渲染测试,被waf了,说明方向对了 单单过滤…

EL表达式和JSTL标签

1.1. EL表达式概述 EL&#xff08;Expression Language&#xff09;是一门表达式语言&#xff0c;它对应<%…%>。我们知道在JSP中&#xff0c;表达式会被输出&#xff0c;所以EL表达式也会被输出。 EL表达式的格式&#xff1a;${…}&#xff0c;例如&#xff1a;${12}…

petalinux2018.3安装步骤

1、虚拟机安装ubuntu-16.04.7-desktop-amd64.iso &#xff08;注意&#xff1a;安装ubuntu-18.04.6-desktop-amd64.iso和ubuntu-16.04.6-desktop-i386.iso会报以下错误&#xff09; environment: line 314: ((: 10 #15~1 > 10 #3: syntax error in expression (error toke…

Java 基于springboot+vue在线外卖点餐系统,附源码

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

正态分布-形状与特点

更多AI技术入门知识与工具使用请看下面链接&#xff1a; https://student-api.iyincaishijiao.com/t/iNSVmUE8/

JavaScript中有哪些不同的数据类型

在 JavaScript 中&#xff0c;数据类型是一种用来表示数据的分类&#xff0c;它决定了我们可以对这个数据类型执行哪些操作。在 JavaScript 中有以下几种不同的数据类型&#xff1a; 基本数据类型 字符串 (String)&#xff1a;表示一组字符&#xff0c;可以使用引号&#xff08…

缓慢变化维 常用的处理方法

什么是缓慢变化维 维度 在数仓中&#xff0c;表往往会被划分成两种类型&#xff0c;一种是 事实表&#xff0c;另一种是维度表&#xff0c;举个例子&#xff0c;比如说&#xff1a; ❝ 2024年2月14日&#xff0c;健鑫在12306上买了两张火车票&#xff0c;每张火车票400元&…

系统架构26 - 软件架构设计(5)

特定领域软件体系结构 定义不同定义必备特征领域 基本活动领域分析领域设计领域实现 参与人员建立过程 特定领域软件体系结构的主要目的是在一组相关的应用中共享软件体系结构。 定义 DSSA (Domain Specific Software Architecture) 就是在一个特定应用领域中为一组应用提供组…

基于BitVM的乐观 BTC bridge

1. 引言 前序博客&#xff1a; 区块链互操作协议Bitcoin Bridge&#xff1a;治愈还是诅咒&#xff1f;BitVM&#xff1a;Bitcoin的链下合约 基于BitVM的乐观 BTC bridge&#xff1a; Trust-minimized two-way peg 机制 BitVM BTC bridge背后的主要思想是&#xff1a; 为比…

【芯片设计- RTL 数字逻辑设计入门 12 -- verilog 有符号数加减法】

文章目录 多功能数据处理器描述verilog 无符号数与有符号数8d100 8d1558d100 8d1568d100 8d157verilog 代码实现TestBench 代码VCS 仿真结果 多功能数据处理器描述 根据指示信号select的不同&#xff0c;对输入信号a,b实现不同的运算。输入信号a,b为8bit有符号数&#xff1…

ucosIII下创建任务读取DS18B20采集到的温度数据

学习链接&#xff1a;ucosIII下创建任务读取并输出DHT11采集到的温湿度数据 相关代码及事项&#xff1a; 首先&#xff0c;需要添加下面两个文件&#xff0c; 其次&#xff0c;main.c 中如下的代码&#xff1a; #include "led.h" #include "delay.h" #…

CPython:表达式的求值顺序(evaluation order)

相关阅读 Pythonhttps://blog.csdn.net/weixin_45791458/category_12403403.html?spm1001.2014.3001.5482 C中表达式的求值 C语言针对表达式的计算&#xff0c;设置了操作符的优先级和结合性这两个特性&#xff0c;优先级用于解析不同优先级的符号&#xff0c;结合性用于解析…

波奇学Linux:软硬链接

ln指令建立链接 软链接 硬链接 所属者的前的数字表示硬链接数&#xff0c;引用计数&#xff0c;file.txt和soft_link是软链接所以都为2 软链接有独立inode&#xff0c;硬链接没有&#xff0c;所以硬链接不是独立文件&#xff0c;软链接是独立文件&#xff0c;且硬链接的属性会…

大模型Layer normalization知识

Layer Norm 的计算公式 Layer Norm&#xff08;层归一化&#xff09;是一种用于神经网络中的归一化技术&#xff0c;用于提高模型的训练效果和泛化能力。 RMS Norm 的计算公式 RMS Norm 的作用是通过计算输入 X 的均方根&#xff0c;将每个样本的特征进行归一化&#xff0c;使…

【51单片机】LCD1602(江科大)

1.LCD1602介绍 LCD1602(Liquid Crystal Display)液晶显示屏是一种字符型液晶显示模块,可以显示ASCII码的标准字符和其它的一些内置特殊字符,还可以有8个自定义字符 显示容量:162个字符,每个字符为5*7点阵 2.引脚及应用电路 3.内部结构框图 屏幕: 字模库:类似于数码管的数…

基于 Python 的大数据的电信反诈骗系统

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

C++:继承与派生基础

引入&#xff1a; 由自然界的动物繁衍的规律&#xff08;eg: 动物继承父类的一切属性&#xff0c;由父类派生并增加自己的新特征&#xff09;我们引入C语言在类的使用中描述此类问题。 为解决代码重复使用、提升效率&#xff0c;引入继承机制&#xff1a;允许保留原有类的特性…

STM32 寄存器操作 systick 滴答定时器 与中断

一、什么是 SysTick SysTick—系统定时器是属于CM3内核中的一个外设&#xff0c;内嵌在NVIC中。系统定时器是一个24bit的向下递减的计数器&#xff0c; 计数器每计数一次的时间为1/SYSCLK&#xff0c;一般我们设置系统时钟SYSCLK等于72M。当重装载数值寄存器的值递减到0的时候…