当前位置: 首页 > news >正文

数据图像处理26

六、图像分割

6.3 分水岭图像分割

6.3.1分水岭算法的基本概念

分水岭算法之所以得名,是因为其的分割原理与地理学中的分水岭现象非常相似。在地理学中,分水岭是分隔相邻水系的山岭或高地,雨水会分别流向两侧的水系。

分水岭算法常用于图像的态学分割。它把图像比作一个地形图,其中每个像素的灰度值则代表该点的海拔高度。分水岭算法可以想象成是模拟水从局部最小值(低地)开始流动并汇聚成河流,最终在不同河流相遇处形成分水岭(山脊)的过程。在图像中,分水岭代表了不同像素区域之间的边界。因为分水岭算法是通过像素灰度值的连续变化来寻找图像边界的,因此它能够捕捉到图像中的微弱边缘,并生成封闭的、连续的分割结果。

6.3.2分水岭算法的基本原理

①图像预处理:通过滤波操作等对图像进行降噪处理,以减少噪声对分割结果的影响。

②梯度计算:计算图像的梯度,梯度图像中每个像素的值反映了该点灰度变化的快慢程度。它能更好地捕捉图像的边缘信息。

③模拟浸入过程:分水岭算法通过模拟浸入过程来寻找分水岭。可以想象成在模型中每个局部最小值表面刺穿一个小孔,然后将整个模型慢慢浸入水中。随着水位的上升,每个局部最小值的影响域逐渐向外扩展。当两个不同局部最小值的影响域相遇时,在这些相遇点构建分水岭,从而实现对图像的分割。

import numpy as np
import cv2
from matplotlib import pyplot as plt# 读取图片
img = cv2.imread('fu.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# 使用Otsu自动阈值
_, thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)# 对二值图像进行一些形态学操作以去除噪声
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, cv2.DIST_L2, 5)
_, 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)# 标记标签
_, markers = cv2.connectedComponents(sure_fg)# 为所有的标记增加一,以确保背景是0而不是1
markers = markers + 1# 在未知区域标记0
markers[unknown == 255] = 0# 应用分水岭
markers = cv2.watershed(img, markers)
img[markers == -1] = [255, 0, 0]# 伪彩色处理
color_img = np.zeros((markers.shape[0], markers.shape[1], 3), dtype=np.uint8)
labels = np.unique(markers)
for label in labels:if label == 0:continuecolor = tuple(np.random.randint(0, 255, 3).tolist())color_img[markers == label] = color# 显示结果
plt.figure(figsize=(10, 5))
plt.subplot(121), plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
plt.title('Original Image with Watershed'), plt.axis('off')
plt.subplot(122), plt.imshow(cv2.cvtColor(color_img, cv2.COLOR_BGR2RGB))
plt.title('Pseudocolor Image'), plt.axis('off')
plt.show()

注:本人为在校学生,博客是边学边写的,主要是为了巩固知识,如有错误请积极指正。

本文的内容主要基于我对张运楚教授编著的《数字图像处理》一书的学习和理解。这本书深入浅出地介绍了数字图像处理的基本理论以及经典算法等,并且提供了丰富的示例代码和实际用例,极大地帮助了我学习图像处理知识。在此,我推荐大家阅读这本书,更加深入的学习有关图像处理的知识

我对数字图像处理的知识点学习主要是按照学校的教学大纲来的,这一节是课程要求的最后一部分了。所以,所以之后数字图像数据处理的笔记更新可能会先告一段落。


http://www.mrgr.cn/news/17360.html

相关文章:

  • jQuery库
  • Vue 3 Composition API 中如何正确添加表单项副本到数组
  • 单片机内存区域划分
  • SPI驱动学习二(驱动框架)
  • 网络层IP协议
  • Linux 常用命令 - hexdump 【以指定格式显示文件内容】
  • 今日早报 每日精选15条新闻简报 每天一分钟 知晓天下事 9月1日,星期日
  • 创建 AD9361 的 vivado 工程,纯FPGA配置,不使用ARM程序
  • docker技术详解,带你全方面玩懂docker
  • 国庆节微信头像怎么制作?制作国庆国旗节日头像的4个方法
  • SpringCloud-01
  • Java-多线程机制
  • AI问答:.NET核心组成概要、程序运行步骤和查询SDK版本的方法
  • 41°29‘29.06“ N 12°31‘25.08“ E表示什么含义?
  • 力扣435-无重叠区间(Java详细题解)
  • vue,小程序,uni-app的生命周期
  • 文件上传的学习
  • FactoryBean 实战练习 - 注入自定义 Date
  • 对字符、字符串的研究
  • python3.10安装