形态学算法(连通分量提取,区域最大值提取)

文章目录

      • 二值图像形态学算法
        • 连通分量提取
      • 灰度图形态学算法
        • 灰度重建
        • 区域最大值查找

本文先列举一些近期用到的形态学算法,以后可能会再进行补充。

二值图像形态学算法

连通分量提取

在上一篇文章中已经提到连通分量的概念,这里再进行回顾:

S S S表示图像中像素的一个子集。如果完全由 S S S中所有像素组成的两个像素 p p p q q q之间存在一个通路,那么称 p p p g g g S S S中是连通的。对于S中的任何像素 p p p,在 S S S中连通到该像素的像素集称为 S S S的连通分量。若S仅有一个连通分量,则集合S称为连通集。(表现为S中任意两个像素之间都是连通的

那么如何提取一幅图像里面的所有连通分量?

令原图为 I I I A A A是由一个或多个连通分量组成的前景像素集合。首先由基于 A A A形成一幅图像 X 0 X_0 X0 X 0 X_0 X0由每个连通分量内任取一个已知点构成(假如有 k k k个连通分量,那么 X 0 X_0 X0中就有 k k k个像素点。)我们的目标就是从 X 0 X_0 X0开始,找到原图 I I I中的所有连通分量。以下迭代过程可以实现这个目的:
X k = ( X k − 1 ⊕ B ) ∩ I , k = 1 , 2 , 3 , ⋯ X_k=(X_{k-1}\oplus B)\cap I,k=1,2,3,\cdots Xk=(Xk1B)I,k=1,2,3,
B B B是下图中结构元(8连通,也可以是4连通)。当 X k = X k − 1 X_k=X_{k-1} Xk=Xk1时,迭代过程结束, X k X_k Xk包含图像中前景像素的所有连通分量。该式使用了和原图进行取交集这一条件膨胀来限制膨胀的增长。

image-20240909143824147

灰度图形态学算法

灰度重建

灰度重建其实指的是marker图像 J J J在mark I I I下进行条件膨胀。类似二值图像中提取连通分量的算法,这里直接贴文献[1]中的定义:

image-20240910161434720

单步重建操作时先对marker J J J进行膨胀(对于灰度图而言就是取结构元 B B B覆盖区域的最大值),然后再和原图取交集(即比较原图和膨胀结果取其中最小值),这样下来得到的条件膨胀图像中对应点的像素值一定不会比原图 I I I对应点的像素值大!最终结果就是单步重建到稳定状态(不再变化)。

需要注意的是,膨胀的时候是使用原图像素进行灰度膨胀而不是使用膨胀像素进行膨胀,很容易通过Matlab验证:

%测试下灰度膨胀(是使用原图的像素膨胀的而不是膨胀的像素)
img = [3,2,1,1];
se = strel('square',3);
img_dil = imdilate(img,se); %结果是[3, 3, 2, 1]
区域最大值查找

首先区域最大值的概念定义如下:

区域最大值点是具有同一强度值连通像素分量,其周围的像素强度值比该值

这里再贴一条文献[1]当中给出的定义:

image-20240910160310964

如何求区域最大值,文献[1]中给出了这样一种方法:

image-20240910160545670

即给定原图 I I I,其区域最大值可以通过原图减去对 I − 1 I-1 I1(即原图的灰度值-1)进行灰度重建的结果来得到。

(自己的理解就是把 I − 1 I-1 I1这个图像逐步进行单步灰度重建到稳定状态时,此时除区域最大值外,其他像素值都与原图相同,这样用 I I I减去该重建结果就只剩下区域最大值为1了)

Matlab中求区域最大值的函数是imregionalmax函数,用法如下:

image-20240910160812054

针对上述求取区域最大值的方法,可以通过Matlab验证结果的一致性:

%提取区域最大值
A = 10*ones(10,10);
A(2:4,2:4) = 22; 
A(6:8,6:8) = 33; 
A(2,7) = 44;
A(3,8) = 45;
A(4,9) = 44
regmax = imregionalmax(A) % 用1来标记最大值
%根据公式计算最大值
sub1_A_recon = imreconstruct(A-1,A,8);
regmax1 = A - sub1_I_recon;

此外,针对一些搞不清的情况进行了测试。

对下面两个灰度矩阵:

image-20240910162708243

image-20240910162756244

其求取区域最大值的结果分别是:

image-20240910162933842

总结为:如果一块连通区域的外边界有比该连通区域像素值大的像素,那么这块连通区域都不会是区域最大值。如果外边界没有比该连通区域大的像素值,那么该连通区域可以确定为区域最大值。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Leetcode 寻找重复数

可以使用 位运算 来解决这道题目。使用位运算的一个核心思想是基于数字的二进制表示&#xff0c;统计每一位上 1 的出现次数&#xff0c;并与期望的出现次数做比较。通过这种方法&#xff0c;可以推断出哪个数字重复。 class Solution { public:int findDuplicate(vector<i…

abVIEW 可以同时支持脚本编程和图形编程

LabVIEW 可以同时支持脚本编程和图形编程&#xff0c;但主要依赖其独特的 图形编程 环境&#xff08;G语言&#xff09;&#xff0c;其中程序通过连线与节点来表示数据流和功能模块。不过&#xff0c;LabVIEW 也支持通过以下方式实现脚本编程的能力&#xff1a; 1. 调用外部脚本…

使用 PyCharm 新建 Python 项目详解

使用 PyCharm 新建 Python 项目详解 文章目录 使用 PyCharm 新建 Python 项目详解一 新建 Python 项目二 配置环境1 项目存放目录2 Python Interpreter 选择3 创建隔离环境4 选择你的 Python 版本5 选择 Conda executable 三 New Window 打开项目四 目录结构五 程序编写运行六 …

【资料分析】平均倍数类

平均 观察选项&#xff0c;差距较大&#xff0c;大胆约分即可 很少的情况下&#xff0c;选项相差很近不能随便约分 倍数 第N次注意增长率是否为下降&#xff01; 问的是基期倍数比哦 平均增长量 十三五这种明确问法&#xff0c;一定是五年 属于有往前推的A和不往前推的…

【QT】常用控件-下

欢迎来到Cefler的博客&#x1f601; &#x1f54c;博客主页&#xff1a;折纸花满衣 &#x1f3e0;个人专栏&#xff1a;QT 目录 &#x1f449;&#x1f3fb;QComboBox&#x1f449;&#x1f3fb; QSpinBox&#x1f449;&#x1f3fb;QDateTimeEdit&#x1f449;&#x1f3fb;QD…

第四届长城杯部分wp

还是太菜了&#xff0c;要经常练了 1.BrickGame 读源码可以看到时间的值是由js设定的&#xff0c;所以控制台将timeleft的时间改成999999 通过游戏就可以得到flag 2.SQLUP 一道文件上传的题目&#xff0c;在登陆页面我用admin和1登陆成功了&#xff0c;但是按照正常的应该是…

实战千问2大模型第三天——Qwen2-VL-7B(多模态)视频检测和批处理代码测试

画面描述:这个视频中,一位穿着蓝色西装的女性站在室内,背景中可以看到一些装饰品和植物。她双手交叉放在身前,面带微笑,似乎在进行一场演讲或主持活动。她的服装整洁,显得非常专业和自信。 一、简介 阿里通义千问开源新一代视觉语言模型Qwen2-VL。其中,Qwen2-VL-72B在大…

Spring Boot 集成 Redisson 实现消息队列

包含组件内容 RedisQueue&#xff1a;消息队列监听标识RedisQueueInit&#xff1a;Redis队列监听器RedisQueueListener&#xff1a;Redis消息队列监听实现RedisQueueService&#xff1a;Redis消息队列服务工具 代码实现 RedisQueue import java.lang.annotation.ElementTyp…

清理C盘缓存的垃圾,专业清理C盘缓存垃圾的步骤与策略

在维护计算机系统的过程中&#xff0c;定期清理C盘&#xff08;通常是系统盘&#xff09;中的缓存和垃圾文件是一项至关重要的任务。这不仅能有效释放磁盘空间&#xff0c;提升系统性能&#xff0c;还能减少因磁盘空间不足导致的程序运行缓慢或错误。以下是一系列专业且安全的步…

请求响应-02.请求-postman工具

一.前后端分离开发 当前主流的开发模式是前后端分离开发&#xff0c;每开发一个功能&#xff0c;就需要对该功能接口进行测试&#xff0c;当前我们的测试方法是直接将url地址输入到浏览器中&#xff0c;查看web页面是否满足我们的要求。但是浏览器发起的请求全部都是GET请求&am…

架构设计 - 常用日志收集方案选型对比与推荐

目录 1. 常用组合1.1 ELK Stack -> Elastic Stack1.2 EFK Stack1.3 Graylog1.4 PLG 日志系统1.5 Splunk1.6 Filebeat ELK1.7 AWS CloudWatch Logs1.8 阿里云日志服务1.9 腾讯云 CLS&#xff08;日志服务&#xff09; 2. 推荐 日志收集是系统监控和调试中的关键环节。常见的…

[ RK3566-Android11 ] 关于 RK628F 驱动移植以及调试说明

问题描述 我这个项目的SDK比较老&#xff0c;移植RK628F最新驱动的调试过程&#xff0c;踩了很多坑&#xff0c;希望大家别踩坑。 解决方案&#xff1a; 首先在FTP上下载最新的RK628的驱动 rk628-for-all-v27-240730 版本。 下载完后 不要直接替换&#xff0c;不要直接替换&a…

小琳AI课堂:o1系列模型

大家好&#xff0c;这里是小琳AI课堂&#xff01;今天我们一起来探索OpenAI最新发布的o1系列模型&#xff0c;这可是AI领域的一大突破哦&#xff01; OpenAI o1系列模型技术大揭秘 o1系列模型是基于强化学习&#xff08;RL&#xff09;训练的&#xff0c;包括o1-preview和o1-…

【CSS】选择器(基本选择器、复合选择器、属性匹配选择器、结构伪类选择器、伪元素选择器)

选择器 引入方式基础选择器复合选择器属性匹配选择器结构伪类选择器伪元素选择器 引入方式 1&#xff1a;外联 <!-- css引入方式1&#xff1a;外联 外联与内嵌优先级相同&#xff0c;取决于加载顺序 --><link rel"stylesheet" href"./样式.css"…

起重机检测系统源码分享

起重机检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Visio…

直播相关02-录制麦克风声音,QT 信号与槽,自定义信号和槽

一 信号与槽函数 #include "mainwindow.h" #include <QPushButton> #include <iostream> using namespace std;//我们的目的是在 window中加入一个button&#xff0c;当点击这个button后&#xff0c;关闭 MainWindow 。 MainWindow::MainWindow(QWidget …

速通GPT-3:Language Models are Few-Shot Learners全文解读

文章目录 GPT系列论文速通论文实验总览1. 任务设置与测试策略2. 任务类别3. 关键实验结果4. 数据污染与实验局限性5. 总结与贡献 Abstract1. 概括2. 具体分析3. 摘要全文翻译4. 为什么不需要梯度更新或微调⭐ Introduction1. 概括2. 具体分析3. 进一步分析 Approach1. 概括2. 具…

【Unity学习心得】如何制作俯视角射击游戏

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、导入素材二、制作流程 1.制作地图2.实现人物动画和移动脚本3.制作单例模式和对象池4.制作手枪pistol和子弹bullet和子弹壳bulletShell5.制作散弹枪shotgun总…

MMLU-Pro 基准测试数据集上线,含 12k 个跨学科复杂问题,难度提升,更具挑战性!DeepSeek 数学模型一键部署

在大语言模型 (LLM) 蓬勃发展的时代&#xff0c;诸如大规模多任务语言理解 (MMLU) 之类的基准测试&#xff0c;在推动 AI 于不同领域的语言理解与推理能力迈向极限方面&#xff0c;发挥着至关重要的关键作用。 然而&#xff0c;伴随模型的持续改进与优化&#xff0c;LLM 在这些…

Vue路由:Vue router

目录 路由的基本概念 1. 路由 2. 单页应用SPA 3.前端路由的实现方式 3.1Hash模式 3.2History模式 Vue router 4 1.概述 2.安装使用 3.基础用法 3.1路由匹配规则声明 3.2动态路由匹配 3.3路由命名 3.4路由重定向 3.5路由嵌套 3.6命名视图 3.6声明式导航&编程…