OpenCV与图像处理学习十一——分水岭算法(含代码)

OpenCV与图像处理学习十一——分水岭算法(含代码)

  • 一、分水岭算法概要
  • 二、分水岭算法步骤
  • 三、代码应用

一、分水岭算法概要

任意的灰度图像可以被看做是地质学表面,高亮度的地方是山峰,低亮度的地方是山谷。
在这里插入图片描述
给每个孤立的山谷(局部最小值)不同颜色的水(标签),当水涨起来,根据周围的山峰(梯度),不同的山谷也就是不同的颜色会开始合并,要避免山谷合并,需要在水要合并的地方建立分水岭,直到所有山峰都被淹没,所创建的分水岭就是分割边界线,这个就是分水岭的原理。

二、分水岭算法步骤

  1. 将白色背景变成黑色背景——目的是为了后面的变换做准备
  2. 使用filter2D与拉普拉斯算子实现图像对比度的提高
  3. 转为二值图像
  4. 距离变换
  5. 对距离变换结果进行归一化[0-1]之间
  6. 使用阈值,在此二值化,得到标记
  7. 腐蚀每个peak erode
  8. 发现轮廓 findContours
  9. 绘制轮廓 drawContours
  10. 分水岭变换 watershed
  11. 对每个分割区域着色输出结果

三、代码应用

"""
完成分水岭算法步骤:
1、加载原始图像
2、阈值分割,将图像分割为黑白两个部分
3、对图像进行开运算,即先腐蚀在膨胀
4、对开运算的结果再进行 膨胀,得到大部分是背景的区域
5、通过距离变换 Distance Transform 获取前景区域
6、背景区域sure_bg 和前景区域sure_fg相减,得到即有前景又有背景的重合区域
7、连通区域处理
8、最后使用分水岭算法
"""import cv2
import numpy as np# Step1. 加载图像
img = cv2.imread('image/yezi.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# Step2.阈值分割,将图像分为黑白两部分
ret, thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)
cv2.imshow("thresh", thresh)# Step3. 对图像进行“开运算”,先腐蚀再膨胀
kernel = np.ones((3, 3), np.uint8)
opening = cv2.morphologyEx(thresh, cv2.MORPH_OPEN, kernel, iterations=2)
cv2.imshow("opening", opening)# Step4. 对“开运算”的结果进行膨胀,得到大部分都是背景的区域
sure_bg = cv2.dilate(opening, kernel, iterations=3)
cv2.imshow("sure_bg", sure_bg)# Step5.通过distanceTransform获取前景区域
dist_transform = cv2.distanceTransform(opening, cv2.DIST_L2, 5)  # DIST_L1 DIST_C只能 对应掩膜为3    DIST_L2 可以为3或者5
ret, sure_fg = cv2.threshold(dist_transform, 0.1 * dist_transform.max(), 255, 0)cv2.imshow("sure_fg", sure_fg)# Step6. sure_bg与sure_fg相减,得到既有前景又有背景的重合区域   #此区域和轮廓区域的关系未知
sure_fg = np.uint8(sure_fg)
unknow = cv2.subtract(sure_bg, sure_fg)
cv2.imshow("unknow", unknow)# Step7. 连通区域处理
ret, markers = cv2.connectedComponents(sure_fg, connectivity=8)     # 对连通区域进行标号  序号为 0 - N-1
markers = markers + 1           # OpenCV 分水岭算法对物体做的标注必须都 大于1 ,背景为标号 为0  因此对所有markers 加1  变成了  1  -  N
# 去掉属于背景区域的部分(即让其变为0,成为背景)
# 此语句的Python语法 类似于if ,“unknow==255” 返回的是图像矩阵的真值表。
markers[unknow==255] = 0# Step8.分水岭算法
markers = cv2.watershed(img, markers)  # 分水岭算法后,所有轮廓的像素点被标注为  -1
print(markers)img[markers == -1] = [0, 0, 255]   # 标注为-1 的像素点标 红
cv2.imshow("dst", img)
cv2.waitKey(0)
cv2.destroyAllWindows()

原图为:
在这里插入图片描述
使用大津阈值法二值化后的结果:
在这里插入图片描述
开运算消除一些噪声(本例不明显):
在这里插入图片描述
做膨胀操作,那么得到的背景区域一定是背景区域:
在这里插入图片描述
做距离变换操作(或腐蚀),那么得到的前景一定为真正的前景:
在这里插入图片描述
中间是既有前景又有背景的重合区域,此区域和轮廓区域的关系未知:
在这里插入图片描述
分水岭算法之后的效果为:
在这里插入图片描述

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

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

相关文章

10件5G能实现但4G不能做的事情

来源:雷锋网 5G的一些最佳用途可能还没有被发现,但下面是我们已经知道的十个令人兴奋的用途。雷锋网按;2019年6月6日,工信部正式向中国电信、中国移动、中国联通、中国广电发放5G商用牌照,这表明中国正式进入了5G商用的…

OpenCV与图像处理学习十二——图像形状特征之HOG特征

OpenCV与图像处理学习十二——图像形状特征之HOG特征一、图像特征理解1.1 颜色特征1.2 纹理特征1.3 形状特征1.4 空间关系特征二、形状特征描述2.1 HOG特征2.1.1 基本概念2.1.2 HOG实现过程2.1.3 代码实现前面介绍了图像的基础知识、基本处理方法以及传统图像分割的应用&#x…

深度解读:5G正式发牌,国内通信市场冷暖预判

来源:ICT解读者2019年6月6日,工业和信息化部向中国电信、中国移动、中国联通和中国广电正式颁发5G牌照,批准四家企业经营“第五代数字蜂窝移动通信业务”。这标志着我国正式进入5G商用元年。一石激起千层浪,相较于此前各运营商官方…

OpenCV与图像处理学习十三——Harris角点检测(含代码)

OpenCV与图像处理学习十三——Harris角点检测(含代码)一、角点的概念二、Harris角点检测的实现过程三、Harris代码应用一、角点的概念 角点: 在现实世界中, 角点对应于物体的拐角, 道路的十字路口、 丁字路口等。 从…

德勤发布《中国智能制造分析报告》

来源:CIO俱乐部亚洲正受到自动化、智能化大潮冲击。国际劳工组织调研发现,越南、柬埔寨、菲律宾和印度尼西亚的工人的失业风险最高,据估计这几个区域约50%的工人工作可能在未来20年被自动化取代。亚洲尤其是中国作为制造业的重要区域&#xf…

OpenCV与图像处理学习十四——SIFT特征(含代码)

OpenCV与图像处理学习十四——SIFT特征(含代码)一、SIFT算法二、SIFT实现过程三、代码实现一、SIFT算法 SIFT, 即尺度不变特征变换算法(Scale-invariant feature transform,SIFT) , 是用于图像…

液态大脑与固态大脑——圣塔菲最新群体智能文集

来源:The Royal society撰文 | Ricard Sol, Melanie Moses, and Stephanie Forrest大脑,神经元构成的器官根植于许多生物体内。这是一种固态的大脑,且组成它们的元素在空间中相对固定。但是相对的,大脑是否可以拥有流动不定的存在…

OpenCV与图像处理学习十五——LBP纹理特征(含代码)

OpenCV与图像处理学习十五——LBP纹理特征(含代码)一、LBP介绍二、LBP原理三、代码应用一、LBP介绍 LBP(Local Binary Pattern, 局部二值模式) , 是一种用来描述图像局部纹理特征的算子; 它具有…

pycharm运行程序时看不到任何结果显示

原因是用程序选择了console来运行,取消console方法如下: Run->Edit Configurations 取消run with python console的勾

iOS 的 XMPPFramework 简介

XMPPFramework是一个OS X/iOS平台的开源项目,使用Objective-C实现了XMPP协议(RFC-3920),同时还提供了用于读写XML的工具,大大简化了基于XMPP的通信应用的开发。 1. 登录和好友上下线 1.1XMPP中常用对象们 XMPPStream&a…

OpenCV与图像处理学习十六——模板匹配

OpenCV与图像处理学习十六——模板匹配一、模板匹配介绍二、代码应用一、模板匹配介绍 模板匹配是一种最原始、最基本的模式识别方法,研究某一特定目标的图像位于图像的什么地方,进而对图像进行定位。 在待检测的图像上,从左到右&#xff0…

李剑锋:意识科学就在身边

来源: 科技日报-中国科技网近些年,生命科学家开始关注神奇的大脑,因此各国纷纷提出各自的脑计划;当前有一个更基础的、但极富争议性的领域却被大家忽视了,就是意识科学。事实脑计划的终点应该就是意识科学,但由于目前大…

OpenCV与图像处理学习十七——OpenCV人脸检测(含代码)

OpenCV与图像处理学习十七——OpenCV人脸检测(含代码)一、人脸识别概要1.1 人脸检测1.2 人脸对齐(Face Alignment)1.3 人脸特征提取(Face Feature Extraction)1.4 人脸识别(Face Recognition&am…

清华大学:人工智能之知识图谱(附PPT)

来源:笑看国际风云【导读】知识图谱(Knowledge Graph)是人工智能重要分支知识工程在大数据环境中的成功应用,知识图谱与大数据和深度学习一起,成为推动互联网和人工智能发展的核心驱动力之一。基于此背景,《人工智能之…

有关EUV光刻机,你需要知道这些

来源:technews晶圆制造产业进入7 纳米制程之后,目前全世界仅剩台积电与三星,再加上号称自家10 纳米制程优于竞争对手7 纳米制程的英特尔等,有继续开发能力之外,其他竞争者因须耗费大量金钱与人力物力的情况下&#xff…

多家巨头实测鸿蒙系统:比安卓快60%

来源:腾讯新闻,数码科技大爆炸众所周知,近期,华为被打压和打击的事件一直没有停止,但华为并没有坐以待毙,很快就启动了“备胎计划”给予积极的回击和反击,像保险柜里的海思“备胎芯片”、华为自…

混淆矩阵及分类性能评估方法

混淆矩阵: 公式:其中TPR又叫召回率Recall

《细胞》:打破百年生物学法则,记忆可以遗传给下一代,甚至可能跨越多代...

来源:转载自iNature许多人推测大脑活动可能以某种方式产生可遗传的变化,这将影响下一代的命运。然而,这一想法虽然具有吸引力,却挑战了生物学的基本法则之一,也被称为“生物学的第二定律”, “Weismann障碍…

欢迎参加城市大脑与智慧城市前沿趋势 主题论坛 |未来科技大讲堂 第12期

近年来,智慧城市建设出现新的动向,包括城市大脑、城市云脑、城市超级大脑、城市超脑、城市神经网络等“泛城市大脑”概念也大量涌现。杭州、上海、北京、广州等城市各自提出和开展了不同城市大脑建设方案,其中上海市开展了以建设城市神经元系…

JavaSE——Java介绍与环境变量简述

第1节 Java介绍 1、Java的起源与演变 略 2、Java体系与特点 Java体系 : Java SE:标准版:各应用平台的基础,桌面开发和低端商务应用的解决方案。 Java EE:企业版,以企业为环境而开发应用程序的解决方案…