分水岭算法:图像分割的浸水原理

分水岭算法:基于拓扑地貌的边界提取

核心原理
分水岭算法将图像视为拓扑地貌,灰度值代表海拔高度。通过模拟浸水过程:

  1. 局部极小值:对应集水盆(区域内部)。
  2. 分水岭线:集水盆之间的山脊(区域边界)。
  3. 淹没过程:从最低点开始注水,水位上升时在不同集水盆汇合处构建堤坝(分水岭)。

关键步骤

  1. 预处理
    • 梯度计算:使用Sobel、Canny等算子提取边缘(如 gradient = cv2.Laplacian(image, cv2.CV_64F))。
    • 降噪:高斯模糊或形态学开运算去除微小噪声。
  2. 标记控制
    • 前景标记:通过阈值分割或距离变换提取确定区域(如 cv2.distanceTransform)。
    • 背景标记:膨胀操作扩展背景区域。
  3. 分水岭变换:使用 cv2.watershed 函数,标记区域边界为 -1
import cv2  # OpenCV库,用于图像处理
import numpy as np  # NumPy库,用于数值计算def watershed_segmentation(image):"""使用分水岭算法对输入图像进行分割,并标记边界:param image: 输入的BGR彩色图像:return: 标记了分水岭边界的图像(边界显示为红色)"""# 1. 转换为灰度图像# 分水岭通常基于灰度图像的梯度计算,因此先将彩色图像转为灰度图gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)# 2. 阈值分割(二值化)# 使用Otsu算法自动确定阈值,并反转二值图像(背景为白色,前景为黑色)# cv2.THRESH_BINARY_INV:反转二值化,使前景为白色(255),背景为黑色(0)ret, thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)# 3. 形态学开运算(去噪)# 定义3x3的全1结构元素(核)kernel = np.ones((3, 3), np.uint8)# 开运算 = 先腐蚀后膨胀,用于去除小的噪声点(如孤立白点)opening = cv2.morphologyEx(thresh, cv2.MORPH_OPEN, kernel, iterations=2)# 4. 确定背景区域# 对开运算结果进行膨胀操作,扩展背景区域,确保背景完全覆盖噪声sure_bg = cv2.dilate(opening, kernel, iterations=3)# 5. 距离变换(提取确定的前景)# 计算每个前景像素到最近背景像素的距离(欧式距离,L2范数)dist_transform = cv2.distanceTransform(opening, cv2.DIST_L2, 5)# 对距离变换结果进行阈值化,提取确定的前景区域(距离较大的像素)ret, sure_fg = cv2.threshold(dist_transform, 0.5 * dist_transform.max(), 255, 0)# 将结果转换为8位无符号整数(0-255)sure_fg = np.uint8(sure_fg)# 6. 确定未知区域(边界区域)# 未知区域 = 背景区域 - 确定的前景区域unknown = cv2.subtract(sure_bg, sure_fg)# 7. 标记连通区域# 对确定的前景区域进行连通组件标记(每个连通区域分配一个唯一标签)ret, markers = cv2.connectedComponents(sure_fg)# 分水岭算法要求标记从1开始(0表示未知区域),因此对所有标记+1markers = markers + 1# 将未知区域(unknown)的标记设为0markers[unknown == 255] = 0# 8. 应用分水岭算法# 输入原始图像和标记矩阵,分水岭算法会修改标记矩阵# 边界区域的标记会被设为-1markers = cv2.watershed(image, markers)# 9. 标记边界(可视化)# 将分水岭边界(markers == -1)在原图上标记为蓝色image[markers == -1] = [255, 0, 0]  # BGR格式的蓝色return image# 主程序
if __name__ == "__main__":# 读取输入图像(确保路径正确)image = cv2.imread('input.jpg')# 调用分水岭分割函数result = watershed_segmentation(image)# 保存结果图像cv2.imwrite('output.jpg', result)

 分水岭算法主要是用于标记前景和背景的分界线,最终的处理结果如下:

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

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

相关文章

汽车功能安全系统阶段开发【技术安全方案TSC以及安全分析】5

文章目录1 技术安全方案 (Technical Safety Concept - TSC)2 系统安全架构设计 (System Safety Architecture Design)3 如何进行安全分析 (Safety Analysis)4 技术安全需求 (TSR) 如何分配到系统架构1 技术安全方案 (Technical Safety Concept - TSC) 技术安全方案 (Technical…

学习软件测试的第十二天(接口测试)

一.如果一个接口请求不通,那么你会考虑那些方面的问题?如果一个接口请求不通,我会像“排查水管漏水”一样一步步定位问题发生在哪一段,主要从这几个方向去思考:当一个接口请求不通时,我会从以下几个方面进行…

Linux下的C/C++开发之操作Zookeeper

ZooKeeper C 客户端简介与安装ZooKeeper C API 简介ZooKeeper 官方提供了多语言客户端,C 语言客户端是最底层的实现之一,功能全面且稳定,适合嵌入式开发、系统级组件、C 项目集成等场景。zookeeper.h 是 ZooKeeper 提供的 C 语言客户端头文件…

【openp2p】学习3:【专利分析】一种基于混合网络的自适应切换方法、装 置、设备及介质

本专利与开源项目无关,但可能是实际商用的一种专利。专利地址从此专利,可见p2p的重要性。透传服务可能是实时转发服务,提供中继能力 透传服务可以是指一种通过公网服务器将数据从第一客户端传递到另一个设备 或客户端的服务。这种服务通常用于克服网络中的障碍,如防火墙、…

OpenCV中DPM(Deformable Part Model)目标检测类cv::dpm::DPMDetector

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 OpenCV 中用于基于可变形部件模型(DPM) 的目标检测器,主要用于行人、人脸等目标的检测。它是一种传统的基于特…

macOS 26快捷指令更新,融入AI打造智能操作体验

快捷指令作为Mac系统中提升用户操作效率的得力助手,在macOS 26中迎来了一次具有突破性的重大更新。此次更新融入了先进的AI技术,推出“智能操作”(Intelligent Actions)功能,让快捷指令从简单的自动化工具升级为真正的…

InstructBLIP:迈向具备指令微调能力的通用视觉语言模型

温馨提示: 本篇文章已同步至"AI专题精讲" InstructBLIP:迈向具备指令微调能力的通用视觉语言模型 摘要 大规模的预训练与instruction tuning在构建通用语言模型方面已取得显著成效。然而,构建通用的视觉-语言模型仍然具有挑战性&…

基于dropbear实现嵌入式系统ssh服务端与客户端完整交互

以下基于 Dropbear 实现 SSH 服务端与客户端交互的完整步骤,涵盖服务端部署、客户端连接、认证配置及消息传输,结合了多篇权威资料的核心实践:环境准备与安装 服务端安装 • Linux 系统(以 Ubuntu/CentOS 为例) Ubuntu…

深圳安锐科技发布国内首款4G 索力仪!让斜拉桥索力自动化监测更精准高效

近日,深圳安锐科技正式发布国内首款无线自供电、一体化的斜拉索实时监测设备 “4G索力监测仪”,成功攻克了传统桥梁索体监测领域长期存在的实时性差、布设困难和成本高昂的行业难题,为斜拉桥、系杆拱桥提供全无线、自动化、云端实时同步的索力…

Pipeline 引用外部数据源最佳实践

场景解析在企业网络安全日志处理场景中,防火墙、入侵检测系统(IDS)等设备会持续产生大量日志,记录网络流量、访问请求、异常事件等基础信息,但这些原始日志仅能呈现表面现象,难以全面剖析安全威胁&#xff…

UI + MCP Client + MCP Server(并且链接多个Server)

项目结构前端项目--------->MCP Client----------->MCP Serverserver就不过多赘述了,他只是相当于添加了多个的tools 链接前后端 http.createServer创建一个服务器// ---------------------------------------------------------------- // server.js import …

香港站群服务器与普通香港服务器对比

在选择香港服务器时,用户常常会遇到"站群服务器"和"普通服务器"两种选项,虽然它们都基于香港数据中心的基础设施,但在 IP 地址配置、功能定位和管理复杂度、成本上存在显著差异,理解这些差异有助于用户根据实…

4.B树和B+树的区别?为什么MySQL选择B+树作为索引?

区别:1.数据存储位置B树每个节点都存储了索引和数据B树只有叶子节点存储数据,非叶子节点仅存储索引2.叶子节点的链接B树的所有叶子节点通过指针连接成一个双向链表,可以高效地进行范围查询或者顺序遍历B树则没有这样的连接关系,查…

转换狂魔,Modbus TCP转Profinet网关打通视觉传感线连接之路

在汽车零部件冲压生产线的世界中,液压机的压力稳定性是确保产品质量的秘密武器。然而,旧时代的人工巡检和传统监测方式却好似拖累现代化进程的沉重枷锁:效率低、成本高,还总是赶不上实时反馈的快车。这时,工厂决心大刀…

C++进阶—二叉树进阶

第一章:内容安排说明 map和set特性需要先铺垫二叉搜索树,而二叉搜索树也是一种树形结构二叉搜索树的特性了解,有助于更好的理解map和set的特性二叉树中部分面试题稍微有点难度,在前面讲解大家不容易接受,且时间长容易…

驱动下一代E/E架构的神经脉络进化—10BASE-T1S

汽车电子电气架构的演进正经历一场深刻的变革,“中央计算单元区域控制器”的架构模式已成为当前主流车型平台发展的明确方向。这种从传统的“功能域”(Domain)架构向“区域”(Zonal)架构的转型升级,旨在实现…

某学校系统中挖矿病毒应急排查

本篇文章主要记录某学校长期未运营维护的程序,被黑客发现了漏洞,但好在学校有全流量设备,抓取到了过程中的流量包 需要你进行上机以及结合流量分析,排查攻击者利用的漏洞以及上传利用成功的木马 文章目录靶机介绍1.使用工具分析共…

vue 、react前端页面支持缩放,echarts、地图点击左边不准的原因和解决办法

原因 由于以上都是通过canvas画布生成的,一旦初始化,就会按照比例进行缩放,但与此同时,比例尺并没有变化,导致坐标偏移 解决办法 设置一个zoomVal产量,在页面加载时计算缩放比例,然后在canvas容…

(LeetCode 每日一题) 1353. 最多可以参加的会议数目 (优先队列、小顶堆)

题目:1353. 最多可以参加的会议数目 思路:优先队列实现小顶堆,0(mx*logn) 在第i天,优先选endDay最小的那一个活动进行。那么遍历每一天,用小顶堆来维护每个活动的最后一天即可,细节看注释。 C版本&#xf…

Java结构型模式---代理模式

代理模式基础概念代理模式是一种结构型设计模式,其核心思想是通过创建一个代理对象来控制对另一个真实对象的访问。代理对象在客户端和真实对象之间起到中介作用,允许在不改变真实对象的前提下,对其进行增强或控制。代理模式的核心组件主题接…