漫水填充算法
漫水填充算法一、技术背景在二值图像处理中目标区域内部可能存在孔洞背景色的孤立区域。这些孔洞会影响轮廓检测、面积计算等后续分析的准确性。漫水填充算法Flood Fill是一种区域填充算法可以用于填充封闭区域或检测孔洞。本文介绍 SEM 项目中imageUtils.fillHoles()的实现原理包括四连通/八连通原理、边界填充、BitwiseNot 和 BitwiseOr 合并操作。二、数学原理2.1 漫水填充算法漫水填充算法从指定种子点出发将与种子点连通且满足一定条件的像素填充为目标颜色。算法步骤从种子点( x 0 , y 0 ) (x_0, y_0)(x0​,y0​)开始检查该点是否满足填充条件如果满足填充该点并加入队列从队列取出点检查其邻域重复直到队列空2.2 连通性四连通只考虑上下左右4个邻居N 4 ( p ) { ( x 1 , y ) , ( x − 1 , y ) , ( x , y 1 ) , ( x , y − 1 ) } N_4(p) \{(x1, y), (x-1, y), (x, y1), (x, y-1)\}N4​(p){(x1,y),(x−1,y),(x,y1),(x,y−1)}八连通考虑周围8个邻居N 8 ( p ) N 4 ( p ) ∪ { ( x 1 , y 1 ) , ( x 1 , y − 1 ) , ( x − 1 , y 1 ) , ( x − 1 , y − 1 ) } N_8(p) N_4(p) \cup \{(x1, y1), (x1, y-1), (x-1, y1), (x-1, y-1)\}N8​(p)N4​(p)∪{(x1,y1),(x1,y−1),(x−1,y1),(x−1,y−1)}2.3 孔洞填充原理孔洞填充的核心思想是从图像边界开始漫水填充背景将边界连通的背景填充为白色反转填充结果背景变为黑色孔洞变为白色将反转结果与原图进行或运算合并孔洞和目标区域数学表达R e s u l t O r i g i n a l ∪ ( B a c k g r o u n d f i l l e d ) c Result Original \cup (Background_{filled})^cResultOriginal∪(Backgroundfilled​)c其中( B a c k g r o u n d f i l l e d ) c (Background_{filled})^c(Backgroundfilled​)c表示填充后背景的补集。三、代码实现以下代码来自e:\SEM\Utils\imageUtils.cs//填充孔洞publicstaticvoidfillHoles(refMatsrc_img){Matfilled_imgnewMat(src_img.Size(),MatType.CV_8UC1,Scalar.Black);for(inti0;isrc_img.Rows;i){for(intj0;jsrc_img.Cols;j){if(src_img.AtVec3b(i,j)newVec3b(0,0,0)){filled_img.Atbyte(i,j)0;}else{filled_img.Atbyte(i,j)255;}}}inthsrc_img.Rows;intwsrc_img.Cols;Matimg_floodfillfilled_img.Clone();MatMasknewMat();intpadding2;Cv2.CopyMakeBorder(img_floodfill,Mask,padding,padding,padding,padding,BorderTypes.Constant,newScalar(0));Cv2.FloodFill(Mask,newPoint(0,0),newScalar(255));Matimage_floodfill_invnewMat();Cv2.BitwiseNot(Mask,image_floodfill_inv);MatroinewMat(image_floodfill_inv,newRect(padding,padding,src_img.Cols,src_img.Rows));Matresult_imgnewMat();Cv2.BitwiseOr(filled_img,roi,result_img);src_imgresult_img.Clone();}处理流程详解彩色转灰度二值将彩色图像转换为灰度二值图像黑色为0白色为255边界扩展使用CopyMakeBorder在图像周围添加边框创建掩码漫水填充从(0,0)点开始填充背景区域为白色反转使用BitwiseNot反转填充结果提取ROI去除添加的边框恢复原始尺寸合并使用BitwiseOr将孔洞区域与原图合并OpenCV API// 漫水填充intCv2.FloodFill(Matsrc,// 输入图像Matmask,// 掩码比原图大2像素PointseedPoint,// 种子点ScalarnewVal,// 填充颜色outRectrect,// 填充区域边界Scalar?loDiff,// 低阈值差可选Scalar?upDiff,// 高阈值差可选FloodFillFlags flags// 填充模式);// 按位取反Cv2.BitwiseNot(Matsrc,Matdst);// 按位或Cv2.BitwiseOr(Matsrc1,Matsrc2,Matdst);// 边界扩展Cv2.CopyMakeBorder(Matsrc,Matdst,inttop,intbottom,intleft,intright,BorderTypesborderType,Scalar?value);四、参数调优4.1 连通性选择连通性特点适用场景四连通严格填充范围小目标边界复杂八连通宽松填充范围大目标边界平滑通过FloodFillFlags设置FloodFillFlags.FixedRange使用固定范围FloodFillFlags.MaskOnly只修改掩码4.2 边界扩展参数参数推荐值说明padding2通常设为2漫水填充需要掩码比原图大borderTypeConstant常量填充value0边界值为黑色4.3 种子点选择种子点通常选择图像边角位置(0, 0)左上角(0, height-1)左下角(width-1, 0)右上角(width-1, height-1)右下角五、常见问题Q1填充后目标区域也被填充原因种子点选择在目标区域内部。解决方案确保种子点在背景区域如边角位置检查目标是否完全封闭Q2孔洞未被完全填充原因孔洞与边界连通或连通性设置不当。解决方案确保目标区域完全封闭检查是否需要先进行形态学闭运算Q3为什么需要添加边界扩展原因OpenCV 的漫水填充要求掩码比原图至少大2像素。解决方案使用CopyMakeBorder添加边框填充完成后提取ROI恢复原始尺寸Q4彩色图像如何处理解决方案先转换为灰度或二值图像示例代码中已包含彩色到灰度的转换逻辑Q5漫水填充与形态学闭运算的区别特性漫水填充形态学闭运算孔洞类型内部封闭孔洞边缘小缺口填充效果完全填充部分填充边界影响不影响边界可能改变边界计算速度较慢较快

相关新闻

Android 10.0 UI开发环境搭建与实战指南

Android 10.0 UI开发环境搭建与实战指南

1. Android 10.0 UI开发环境搭建在开始Android 10.0的UI开发之前,我们需要先准备好开发环境。Android Studio是Google官方推荐的集成开发环境(IDE),它集成了代码编辑、调试、性能分析工具以及模拟器等全套开发工具。1.1 安装Android Studio首先访问Andro…

2026/7/19 19:59:42 阅读更多 →
Android App Bundle技术解析与优化实践

Android App Bundle技术解析与优化实践

1. Android App Bundle 技术解析与应用实践作为一名在Android开发领域深耕多年的技术老兵,我见证了APK打包方式的多次迭代。今天要和大家深入探讨的是Google在2018年推出的革命性打包格式——Android App Bundle(AAB)。这个看似简单的技术变革…

2026/7/19 19:59:42 阅读更多 →
Vue3渐进式框架实战与核心原理解析

Vue3渐进式框架实战与核心原理解析

1. 为什么选择Vue作为前端框架作为一名从jQuery时代走过来的前端开发者,我至今记得2016年第一次接触Vue时的震撼。当时团队正在评估React和Angular,偶然发现这个轻量级框架,用了一个周末时间就完成了从学习到产出可运行代码的全过程。这种&qu…

2026/7/19 19:59:42 阅读更多 →

最新新闻

SSH密钥多设备共享:告别一机一钥,实现高效安全Git访问

SSH密钥多设备共享:告别一机一钥,实现高效安全Git访问

如果你是一名开发者,大概率遇到过这样的场景:在公司电脑上配置好了 GitHub 的 SSH 密钥,推送代码一切正常。但当你回到家,想在个人笔记本上继续工作时,git push却无情地抛出了Permission denied (publickey)。于是&…

2026/7/21 1:54:14 阅读更多 →
三极管推挽输出电路原理与应用详解

三极管推挽输出电路原理与应用详解

1. 三极管推挽输出电路基础解析推挽输出电路作为电子设计中的经典拓扑结构,在音频放大、电机驱动、开关电源等领域有着广泛应用。我第一次接触这个电路是在大学电子实验课上,当时用两个三极管搭建的简易放大器让8Ω喇叭发出声音的瞬间,那种成…

2026/7/21 1:54:14 阅读更多 →
JDK 17新特性解析与生产实践指南

JDK 17新特性解析与生产实践指南

1. JDK 17的定位与核心价值 2021年9月发布的JDK 17作为最新的长期支持版本(LTS),标志着Java生态进入新的发展阶段。与之前的LTS版本(JDK 11和JDK 8)相比,JDK 17在语言特性、性能优化和开发体验等方面带来了…

2026/7/21 1:54:14 阅读更多 →
Hermes Profile机制解析:AI助手多开与隔离实践

Hermes Profile机制解析:AI助手多开与隔离实践

1. Hermes多开场景解析与Profile机制在AI助手日常使用中,我们经常遇到这样的困境:编程助手和个人助理混用导致记忆混乱,不同项目的API密钥相互干扰,或者需要同时运行多个专业领域的AI实例。Hermes的Profile机制正是为解决这些问题…

2026/7/21 1:54:14 阅读更多 →
Python学习小组第8周:从入门到进阶的关键阶段

Python学习小组第8周:从入门到进阶的关键阶段

1. Python学习小组的成长轨迹ScalersTalk成长会Python小组是一个持续8周以上的系统性学习社群,从网络公开信息可以看出,这个组织至少从2018年就开始运作深度学习小组,并保持着稳定的学习节奏。第8周的学习笔记意味着学员们已经完成了前7周的基…

2026/7/21 1:54:14 阅读更多 →
ChatGPT Atlas:AI浏览器如何重塑网页浏览体验

ChatGPT Atlas:AI浏览器如何重塑网页浏览体验

1. ChatGPT Atlas:AI浏览器的全新体验ChatGPT Atlas是OpenAI推出的首款内置AI功能的浏览器产品,标志着这家AI巨头正式进军浏览器市场。这款产品最引人注目的特点在于深度整合了ChatGPT的智能交互能力,让用户可以在浏览网页的同时获得即时AI辅…

2026/7/21 1:53:13 阅读更多 →

日新闻

Octane Render与C4D汉化版安装与优化指南

Octane Render与C4D汉化版安装与优化指南

1. Octane Render与C4D的黄金组合:为什么选择这个方案?在三维创作领域,渲染器的选择往往决定了作品的最终呈现质量和工作效率。作为Cinema 4D(C4D)用户,Octane Render的GPU加速特性与实时预览功能&#xff…

2026/7/21 0:00:19 阅读更多 →
GPMC接口设计:异步/同步模式与多路复用配置实战

GPMC接口设计:异步/同步模式与多路复用配置实战

1. GPMC接口设计:从硬件连接到软件配置的全局视角在嵌入式系统开发中,尤其是基于TI Sitara系列如AM263x这类高性能微控制器的项目里,外部存储器的扩展几乎是绕不开的一环。无论是存放大量非易失性代码的NOR Flash,还是作为高速数据…

2026/7/21 0:00:19 阅读更多 →
UE5 GAS框架下RPG被动技能系统:从核心原理到实战实现

UE5 GAS框架下RPG被动技能系统:从核心原理到实战实现

1. 项目概述:UE5 GAS RPG被动技能的核心价值在UE5里用GAS(Gameplay Ability System)做RPG游戏,主动技能像是你手里的武器,按一下打一下,逻辑直接,反馈也快。但被动技能,它更像是你身…

2026/7/21 0:00:19 阅读更多 →

周新闻

Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/20 5:57:49 阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/20 4:31:26 阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/20 5:56:42 阅读更多 →

月新闻