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 - 图像的条件分水岭

"分水岭"一词源自物理分水岭的概念,即分隔不同流域的边界线。同样,分水岭算法旨在找到图像中的边界或分离区域。

分水岭算法是一种用于图像分割的常用方法,图像分割是将图像划分为不同区域的过程。

因此,在图像处理中,分水岭图像是指经过分水岭分割过程的图像。

分水岭分割技术将图像中的像素强度视为地形表面,其中明亮区域代表高海拔,黑暗区域代表低海拔。

Mahotas 中的分水岭

Mahotas 提供条件分水岭函数,而不是传统的分水岭算法。

Mahotas 中的条件分水岭是分水岭算法的增强版本,它允许我们通过提供特定标记来指导分割过程。

让我们一步一步地了解 Mahotas 中条件分水岭算法的工作原理 −

步骤 1 − 假设我们有一张图像,我们想将其划分为不同的区域。使用条件分水岭,我们可以将图像中的某些区域标记为代表我们感兴趣的区域的标记。

步骤 2 − 然后,算法首先用水填充这些标记区域。水只会在每个标记区域内流动,不会越过其他标记的边界。

步骤 3 −结果是分割图像,其中每个区域都由您提供的标记定义的边界划定。

mahotas.cwatershed() 函数

Mahotas 中的 cwatershed() 函数接受两个输入−输入图像和标记图像,并返回分割成不同区域的输出图像。

标记图像是二值图像,其中前景像素(布尔值 1)表示不同区域的边界。

语法

以下是 mahotas 中 cwatershed() 函数的基本语法 −

mahotas.cwatershed(surface, markers, Bc=None, return_lines=False) W, WL =
cwatershed(surface, markers, Bc=None, return_lines=True)

参数

cwatershed() 函数接受的参数如下 −

  • surface −它表示将执行分水岭分割的输入图像。它通常是灰度图像。

  • markers − 它表示分水岭分割的标记。标记指示图像中的感兴趣区域。

  • Bc(可选) − 它表示用于邻域操作的结构元素。如果设置为 None,则使用默认连接。

  • return_lines − 它是一个布尔标志,指定是否除了标记图像外还返回分水岭线。如果为 True,则该函数将返回标记图像和分水岭线。

    如果为 False,则仅返回标记图像。默认情况下,它设置为 False。

返回值

  • W 或 WL − 它表示从分水岭分割中获得的标记图像,其中每个区域都分配有一个唯一的标签。标记图像的形状与输入图像相同。

  • WL(可选) − 仅当 return_lines 参数设置为 True 时才返回。它表示分水岭线,即图像中分割区域之间的边界。

示例

在下面的示例中,我们尝试显示图像的基本条件分水岭分割 −

import mahotas as mh
import matplotlib.pyplot as plt
# 加载输入图像
image = mh.imread('sea.bmp')
# 创建标记或种子
markers = mh.imread('tree.tiff')
# 执行条件分水岭分割
segmented_image = mh.cwatershed(image, markers)
# 在一个图中显示所有三幅图像
plt.figure(figsize=(10, 5))
# 显示图像 1
plt.subplot(1, 3, 1)
plt.imshow(image)
plt.title('Sea')
plt.axis('off')
# 显示图像 2
plt.subplot(1, 3, 2)
plt.imshow(markers)
plt.title('Tree')
plt.axis('off')
# 显示分割图像
plt.subplot(1, 3, 3)
plt.imshow(segmented_image, cmap='gray')
plt.title('Segmented Image')
plt.axis('off')
plt.tight_layout()
plt.show()

输出

生成的输出如下 −

Watershed Image Mohatas

具有自定义结构元素的条件分水岭

结构元素是通常表示为矩阵的小二进制图像。它用于分析参考像素的局部邻域。

在条件分水岭的背景下,自定义结构元素允许我们在分水岭过程中定义像素之间的连通性。

通过自定义结构元素,我们可以控制每个像素的邻域如何影响图像的分割。

Example

import mahotas as mh
import numpy as np
from pylab import imshow, show
# 加载图像
image = mh.imread('nature.jpeg')
# 将图像转换为灰度
image_gray = mh.colors.rgb2grey(image).astype(np.uint8)
# 对图像进行阈值处理
threshold = mh.thresholding.otsu(image_gray)
image_thresholded = image_gray > threshold
# 使用自定义结构元素执行条件分水岭
struct_element = np.array([[0, 1, 0], [1, 1, 1], [0, 1, 0]])
labels, _ = mh.label(image_thresholded, struct_element)
watershed = mh.cwatershed(image_gray.max() - image_gray, labels)
# 显示结果
imshow(watershed)
show()

输出

上述代码的输出如下 −

Watershed Image Mohatas1