- 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 - Haralick特征
- 标记区域的权重
- Mahotas - Zernike特征
- Mahotas - Zernike矩
- Mahotas - 排序滤波器
- Mahotas - 二维拉普拉斯滤波器
- Mahotas - 多数滤波器
- Mahotas - 均值滤波器
- Mahotas - 中值滤波器
- Mahotas - Otsu方法
- Mahotas - 高斯滤波
- Mahotas - 击中与错过变换
- Mahotas - 标记最大值数组
- Mahotas - 图像平均值
- Mahotas - SURF密集点
- Mahotas - SURF积分图像
- Mahotas - Haar变换
- 突出显示图像最大值
- 计算线性二值模式
- 获取标签边界
- 反转Haar变换
- Riddler-Calvard 方法
- 标记区域的大小
- 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 # Loading the input image image = mh.imread('sea.bmp') # Creating markers or seeds markers = mh.imread('tree.tiff') # Perform conditional watershed segmentation segmented_image = mh.cwatershed(image, markers) # Display all three images in one plot plt.figure(figsize=(10, 5)) # Display image1 plt.subplot(1, 3, 1) plt.imshow(image) plt.title('Sea') plt.axis('off') # Display image2 plt.subplot(1, 3, 2) plt.imshow(markers) plt.title('Tree') plt.axis('off') # Display the segmented image plt.subplot(1, 3, 3) plt.imshow(segmented_image, cmap='gray') plt.title('Segmented Image') plt.axis('off') plt.tight_layout() plt.show()
输出
生成的输出如下:
使用自定义结构元素的条件分水岭
结构元素是一个小的二值图像,通常表示为矩阵。它用于分析参考像素的局部邻域。
在条件分水岭的上下文中,自定义结构元素允许我们在分水岭过程中定义像素之间的连接性。
通过自定义结构元素,我们可以控制每个像素的邻域如何影响图像的分割。
示例
import mahotas as mh import numpy as np from pylab import imshow, show # Load the image image = mh.imread('nature.jpeg') # Convert the image to grayscale image_gray = mh.colors.rgb2grey(image).astype(np.uint8) # Threshold the image threshold = mh.thresholding.otsu(image_gray) image_thresholded = image_gray > threshold # Perform conditional watershed with custom structuring element 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) # Show the result imshow(watershed) show()
输出
上述代码的输出如下: