8.3 Python图像处理之图像典型分割-分水岭分割

文章目录

  • 8.3 Python图像处理之图像典型分割-分水岭分割
    • 1 算法原理
    • 2 代码
    • 3 效果

1 算法原理

分水岭概念是以对图像进行三维可视化处理为基础的:其中两个是坐标,另一个是灰度级。基于“地形学”的这种解释,我们考虑三类点:

a.属于局部性最小值的点,也可能存在一个最小值面,该平面内的都是最小值点;

b.当一滴水放在某点的位置上的时候,水一定会下落到一个单一的最小值点; c.当水处在某个点的位置上时,水会等概率地流向不止一个这样的最小值点。

对一个特定的区域最小值,满足条件(b)的点的集合称为这个最小值的“汇水盆地”或“分水岭”。满足条件©的点的集合组成地形表面的峰线,称做“分割线”或

“分水线”。

分水岭分割方法,是一种基于拓扑理论的数学形态学的分割方法,目前较著名且使用较多的有 2 种算法:自下而上的模拟泛洪的算法;自上而下的模拟降水的算法。

2 代码

运行代码说明

1.要改变代码中的图片地址(地址不能有中文)

更改put(path)函数中的路径put(r'../image/image1.jpg')

2.注意最后的plt.savefig('1.new.jpg')是保存plt图像,如果不使用可以注释掉

代码依赖包:

matplotlib  3.4.2
numpy  1.20.3
opencv-python  4.1.2.30
imageio  2.9.0
pillow  8.2.0
PyWavelets  1.1.1
scikit-image  0.18.1
# pip安装
pip install matplotlib numpy opencv-python imageio pillow PyWavelets scikit-image
import numpy as np
import cv2
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = Falsedef put(path):src = cv2.imread(path)img = src.copy()gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)ret, thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)  # Otsu's 二值化# 消除噪声kernel = np.ones((3, 3), np.uint8)opening = cv2.morphologyEx(thresh, cv2.MORPH_OPEN, kernel, iterations=2)# 膨胀sure_bg = cv2.dilate(opening, kernel, iterations=3)# 距离变换dist_transform = cv2.distanceTransform(opening, 1, 5)ret, sure_fg = cv2.threshold(dist_transform, 0.7 * dist_transform.max(), 255, 0)# 获得未知区域获得边界区域sure_fg = np.uint8(sure_fg)unknown = cv2.subtract(sure_bg, sure_fg)# 标记ret, markers1 = cv2.connectedComponents(sure_fg)# 确保背景是1不是0markers = markers1 + 1# 未知区域标记为0markers[unknown == 255] = 0markers3 = cv2.watershed(img, markers)img[markers3 == -1] = [0, 0, 255]plt.subplot(241), plt.imshow(cv2.cvtColor(src, cv2.COLOR_BGR2RGB)),plt.title('原图'), plt.axis('off')plt.subplot(242), plt.imshow(thresh, cmap='gray'),plt.title('Otsu二值化'), plt.axis('off')plt.subplot(243), plt.imshow(sure_bg, cmap='gray'),plt.title('膨胀'), plt.axis('off')plt.subplot(244), plt.imshow(dist_transform, cmap='gray'),plt.title('距离变换'), plt.axis('off')plt.subplot(245), plt.imshow(sure_fg, cmap='gray'),plt.title('距离变换二值化'), plt.axis('off')plt.subplot(246), plt.imshow(unknown, cmap='gray'),plt.title('边界区域'), plt.axis('off')plt.subplot(247), plt.imshow(np.abs(markers), cmap='jet'),plt.title('标记区域'), plt.axis('off')plt.subplot(248), plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB)),plt.title('分割图像'), plt.axis('off')# plt.savefig('3.new-img.jpg')plt.show()# 图像处理函数,要传入路径
put(r'../image/img5.jpg')

3 效果

8.3 Python图像处理之图像典型分割-分水岭分割相关推荐

  1. 8.1 Python图像处理之图像典型分割-SUSAN边缘检测

    8.1 Python图像处理之图像典型分割-SUSAN边缘检测 文章目录 8.1 Python图像处理之图像典型分割-SUSAN边缘检测 1 算法原理 2 代码 3 效果 1 算法原理 SUSAN 的 ...

  2. 8.2 Python图像处理之图像典型分割-主动轮廓

    8.2 Python图像处理之图像典型分割-主动轮廓 文章目录 8.2 Python图像处理之图像典型分割-主动轮廓 1 算法原理 2 代码 3 效果 1 算法原理 主动轮廓模型,将图像分割问题转换为 ...

  3. 9.2.1 Python图像处理之图像数学形态学-二值形态学应用之噪声消除

    9.2.1 Python图像处理之图像数学形态学-二值形态学应用之噪声消除 文章目录 9.2.1 Python图像处理之图像数学形态学-二值形态学应用之噪声消除 1 算法原理 2 代码 3 效果 1 ...

  4. 4.3 Python图像处理之图像恢复-无约束滤波器(逆滤波)、有约束滤波器(维纳滤波器)

    4.3 Python图像处理之图像恢复-无约束滤波器(逆滤波).有约束滤波器(维纳滤波器) 文章目录 4.3 Python图像处理之图像恢复-无约束滤波器(逆滤波).有约束滤波器(维纳滤波器) 1 算 ...

  5. 9.4 Python图像处理之图像数学形态学-基于灰度形态学的应用(形态梯度、形态平滑、高帽变换、低帽变换)

    9.4 Python图像处理之图像数学形态学-基于灰度形态学的应用(形态梯度.形态平滑.高帽变换.低帽变换) 文章目录 9.4 Python图像处理之图像数学形态学-基于灰度形态学的应用(形态梯度.形 ...

  6. 9.3 Python图像处理之图像数学形态学-灰度形态学

    9.3 Python图像处理之图像数学形态学-灰度形态学 文章目录 9.3 Python图像处理之图像数学形态学-灰度形态学 1 算法原理 2 代码 3 效果 1 算法原理 灰度图像与二值图像的区别在 ...

  7. 9.2.3 Python图像处理之图像数学形态学-二值形态学应用-区域填充

    9.2.3 Python图像处理之图像数学形态学-二值形态学应用-区域填充 文章目录 9.2.3 Python图像处理之图像数学形态学-二值形态学应用-区域填充 1 算法原理 2 代码 3 效果 1 ...

  8. 9.2.2 Python图像处理之图像数学形态学-二值形态学应用-目标检测

    9.2.2 Python图像处理之图像数学形态学-二值形态学应用-目标检测(击中与击不中) 文章目录 9.2.2 Python图像处理之图像数学形态学-二值形态学应用-目标检测(击中与击不中) 1 算 ...

  9. 9.1 Python图像处理之图像数学形态学-二值形态学(腐蚀、膨胀、开启、闭合)

    9.1 Python图像处理之图像数学形态学-二值形态学(腐蚀.膨胀.开启.闭合) 文章目录 9.1 Python图像处理之图像数学形态学-二值形态学(腐蚀.膨胀.开启.闭合) 1 算法原理 1.1 ...

最新文章

  1. Ubuntu安装Anaconda
  2. 为什么你看了那么多面经,面试还是挂了?
  3. 关于JS中变量提升的规则和原理的一点理解(一)
  4. php aws s3查看所有文件_国内AWS没有文件系统服务,快来看如何通过EC2挂载S3存储桶替代...
  5. 计算机房防火要求,信息机房如何进行防火设计
  6. Linux Shell脚本入门教程系列之(十三)Shell分支语句case … esac教程
  7. 7.1 elementui的radio无法选中问题
  8. jmap简单实用示例
  9. FPGA基础入门篇(四) 边沿检测电路
  10. renren-fast:使用人人开源renren-fast报错Error:(11, 39) java: 程序包io.renren.datasource.annotation不存在
  11. dev grdicontrol 根据条件改变行颜色,字体颜色等
  12. 短视频解析,去水印原理整理汇总
  13. JavaScript学习笔记3--文本框获得焦点,文本框里提示信息自动消失
  14. html怎样使字数占相同位,《古对今》教案
  15. 【vue】imitate-beautiful-thing
  16. 【机器学习基础】贝叶斯神经网络
  17. java中flush函数作用_Java语言中flush()函数作用及使用方法详解
  18. 调频电视发射机工作原理
  19. 理解回溯算法——回溯算法的初学者指南
  20. 一键优化CentOS服务

热门文章

  1. 2014计算机应用基础试题及答案,2014年计算机应用基础试题及答案详解.doc
  2. java模拟旅馆床位管理系统
  3. 电子商务网站服务器构建,电子商务网站构建技术及应用研究
  4. android-更新版本签名异常解决方案
  5. DEDECMS后台无法登陆并跳转回登陆界面的解决方法
  6. 中小企业战略规划如何做?
  7. html5的video播放器上禁止下载和禁止右键下载实现。
  8. 性能优化系列之『DNS :主流的DNS优化方法有哪些?』
  9. this以及super
  10. app架构图,330页PDF,10万字的知识点总结,全网独家首发!