Mahotas 教程

Mahotas 主页 Mahotas 简介 Mahotas 计算机视觉 Mahotas 历史 Mahotas 功能 Mahotas 安装和环境配置

Mahotas 处理图像

Mahotas 处理图像 Mahotas 加载图像 Mahotas 将图像加载为灰色 Mahotas 显示图像 Mahotas 显示图像形状 Mahotas 保存图像 Mahotas 图像的质心 Mahotas 图像的卷积 Mahotas 创建 RGB 图像 Mahotas 图像的欧拉数 Mahotas 图像中的零分数 Mahotas 获取图像矩 Mahotas 图像中的局部最大值 Mahotas 图像椭圆轴 Mahotas 图像拉伸 RGB

Mahotas 颜色空间转换

Mahotas 颜色空间转换 Mahotas RGB 到灰度转换 Mahotas RGB 到 LAB 转换 Mahotas RGB 转棕褐色 Mahotas RGB 到 XYZ 转换 Mahotas XYZ 到 LAB 转换 Mahotas XYZ 到 RGB 转换 Mahotas 增加伽马校正 Mahotas 拉伸伽马校正

Mahotas 标记图像函数

Mahotas 标记图像函数 Mahotas 标记图像 Mahotas 过滤区域 Mahotas 边界像素

Mahotas 形态学操作

Mahotas 形态运算符 Mahotas 查找图像平均值 Mahotas 裁剪图像 Mahotas 图像偏心率 Mahotas 叠加图像 Mahotas 图像圆度 Mahotas 调整图像大小 Mahotas 图像直方图 Mahotas 扩大图像 Mahotas 腐蚀图像 Mahotas 分水岭 Mahotas 图像的开运算过程 Mahotas 图像的闭合过程 Mahotas 填补图像中的空洞 Mahotas 条件性膨胀图像 Mahotas 条件腐蚀图像 Mahotas 图像的条件分水岭 Mahotas 图像中的局部最小值 Mahotas 图像的区域最大值 Mahotas 图像的区域最小值

Mahotas 高级概念

Mahotas 图像阈值 Mahotas 设置阈值 Mahotas 软阈值 Mahotas Bernsen 局部阈值 Mahotas 小波变换 Mahotas 制作图像小波中心 Mahotas 距离变换 Mahotas 多边形实用程序 Mahotas 局部二元模式 Mahotas 阈值邻接统计 Mahotas Haralic 特征 Mahotas 标记区域的权重 Mahotas Zernike 特征 Mahotas Zernike 矩 Mahotas 等级过滤器 Mahotas 2D 拉普拉斯过滤器 Mahotas 多数过滤器 Mahotas 均值滤波器 Mahotas 中值滤波器 Mahotas Otsu 方法 Mahotas 高斯滤波 Mahotas 命中与未命中变换 Mahotas 标记最大值数组 Mahotas 图像平均值 Mahotas SURF 密集点 Mahotas SURF 积分 Mahotas Haar 变换 Mahotas 突出显示图像最大值 Mahotas 计算线性二进制模式 Mahotas 获取标签边框 Mahotas 逆 Haar 变换 Mahotas Riddler-Calvard 方法 Mahotas 标记区域的大小 Mahotas 模板匹配 Mahotas 加速稳健特征 Mahotas 移除带边框的标签 Mahotas Daubechies 小波 Mahotas Sobel 边缘检测



Mahotas - 分水岭

在图像处理中,分水岭算法用于图像分割,即将图像划分为不同区域的过程。分水岭算法对于分割区域不均匀或边界不清晰的图像特别有用。

分水岭算法的灵感来自水文学中的分水岭概念,水沿着山脊从高处流向低处,直到到达最低点,形成盆地。

同样,在图像处理中,该算法将图像的灰度值视为地形表面,其中高强度值代表峰顶,低强度值代表谷底。

分水岭算法的工作原理

以下是分水岭算法在图像处理中的工作原理的一般概述 −

  • 图像预处理:将输入图像转换为灰度图像(如果不是灰度图像)。执行任何必要的预处理步骤,如噪声消除或平滑,以改善结果。

  • 梯度计算:计算图像的梯度以识别强度转换。这可以通过使用梯度算子(如 Sobel 算子)来突出显示边缘来完成。

  • 标记生成:识别将用于启动分水岭算法的标记。这些标记通常对应于图像中感兴趣的区域。

    它们可以由用户手动指定,也可以根据某些标准(例如局部最小值或聚类算法)自动生成。

  • 标记标记:使用不同的整数值标记图像中的标记,代表不同的区域。

  • 分水岭变换:使用标记的标记计算图像的分水岭变换。这是通过模拟洪水过程来完成的,其中强度值从标记传播并填充图像,直到它们在不同区域的边界相遇。

    结果是灰度图像,其中区域之间的边界突出显示。

  • 后处理:分水岭变换可能会产生过度分割的区域。可以应用合并或平滑等后处理步骤来细化分割结果并获得最终的分割图像。

Mahotas 中的分水岭

Mahotas 库没有直接将传统分水岭算法应用于图像的函数。然而,Mahotas 确实提供了一种类似的技术,称为条件分水岭,我们将在后续章节中更详细地探讨和讨论它。

为了更好地理解传统的分水岭算法,让我们看一个在 cv2 库的帮助下使用分水岭算法进行图像分割的示例。

示例

在下面的例子中,我们应用 Otsu 的阈值、形态学操作和距离变换来预处理图像并获得前景和背景区域。

然后我们使用基于 marker− 的分水岭分割来标记区域并在分割图像中将边界标记为红色。

import cv2
import numpy as np
from matplotlib import pyplot as plt
image = cv2.imread('tree.tiff')
# 将图像转换为灰度
gray = cv2.cvtColor(image, 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)
# 执行距离变换
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)
# 确定确定的背景区域
sure_bg = cv2.dilate(opening, kernel, iterations=3)
# 确定未知区域
unknown = cv2.subtract(sure_bg, sure_fg)
# 标记分水岭的标记
_, markers = cv2.connectedComponents(sure_fg)
markers = markers + 1
markers[unknown == 255] = 0
# 应用分水岭算法
markers = cv2.watershed(image, markers)
image[markers == -1] = [255, 0, 0]
# 创建带有子图的图形
fig, axis = plt.subplots(1, 2, figsize=(7,5 ))
# 显示原始图像图像
axes[0].imshow(image)
axes[0].set_title('Original Image')
axes[0].axis('off')
# 显示分水岭图像
axes[1].imshow(markers)
axes[1].set_title('Watershed Image')
axes[1].axis('off')
# 调整布局并显示图
plt.tight_layout()
plt.show()

输出

以下是上述代码的输出 −

分水岭图像