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 - Bernsen 局部阈值

Bernsen 局部阈值是一种将图像分割为前景和背景区域的技术。它使用局部邻域中的强度变化为图像中的每个像素分配阈值。

局部邻域的大小由窗口确定。较大的窗口大小在阈值处理过程中考虑更多相邻像素,从而在区域之间创建更平滑的过渡,但会删除更精细的细节。

另一方面,小窗口尺寸可以捕获更多细节,但可能容易受到噪声的影响。

Bernsen 局部阈值与其他阈值技术的区别在于,Bernsen 局部阈值使用动态阈值,而其他阈值技术使用单个阈值来分离前景和背景区域。

Mahotas 中的 Bernsen 局部阈值

在 Mahotas 中,我们可以使用 thresholding.bernsen() 和 thresholding.gbernsen() 函数对图像应用 Bernsen 局部阈值。这些函数创建一个固定大小的窗口,并计算窗口内每个像素的局部对比度范围以分割图像。

局部对比度范围是窗口内的最小和最大灰度值。

然后将阈值计算为最小和最大灰度值的平均值。如果像素强度高于阈值,则将其分配给前景(白色),否则将其分配给背景(黑色)。

然后将窗口移动到图像上以覆盖所有像素,从而创建二值图像,其中前景和背景区域根据局部强度变化分离。

mahotas.tresholding.bernsen() 函数

mahotas.thresholding.bernsen() 函数将灰度图像作为输入并对其应用 Bernsen 局部阈值。它输出一个图像,其中每个像素被分配一个值 0(黑色)或 255(白色)。

前景像素对应于图像中具有相对较高强度的区域,而背景像素对应于图像中具有相对较低强度的区域。

语法

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

mahotas.thresholding.bernsen(f, radius,contrast_threshold, gthresh={128})

其中,

  • f − 它是输入的灰度图像。

  • radius −它是每个像素周围窗口的大小。

  • contrast_threshold − 它是局部阈值。

  • gthresh(可选) − 它是全局阈值(默认值为 128)。

示例

以下示例显示了如何使用 mh.thresholding.bernsen() 函数对图像应用 Bernsen 局部阈值。

import mahotas as mh
import numpy as np
import matplotlib.pyplot as mtplt
# 加载图像
image = mh.imread('nature.jpeg')
# 将其转换为灰度
image = mh.colors.rgb2gray(image)
# 创建 Bernsen 阈值图像
threshold_image = mh.thresholding.bernsen(image, 5, 200)
# 创建子图的图形和轴
fig, axis = mtplt.subplots(1, 2)
# 显示原始图像
axes[0].imshow(image, cmap='gray')
axes[0].set_title('Original Image')
axes[0].set_axis_off()
# 显示阈值图像
axes[1].imshow(threshold_image, cmap='gray')
axes[1].set_title('Bernsen Threshold Image')
axes[1].set_axis_off()
# 调整间距子图
mtplt.tight_layout()
# 显示图形
mtplt.show()
输出

以下是上述代码的输出 −

Bernsen Local Thresholding

mahotas.thresholding.gbernsen() 函数

mahotas.thresholding.gbernsen() 函数还将 Bernsen 局部阈值应用于输入灰度图像。

它是 Bernsen 局部阈值算法的通用版本。它输出一个分割图像,其中每个像素被分配一个 0 或 255 的值,具体取决于它是背景还是前景。

gbernsen() 和 bernsen() 函数之间的区别在于,gbernsen() 函数使用结构元素来定义局部邻域,而 bernsen() 函数使用固定大小的窗口来定义像素周围的局部邻域。

此外,gbernsen() 根据对比度阈值和全局阈值计算阈值,而 bernsen() 仅使用对比度阈值来计算每个像素的阈值。

语法

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

mahotas.thresholding.gbernsen(f, se,contrast_threshold, gthresh)

其中,

  • f − 为输入灰度图像。

  • se − 为结构元素。

  • contrast_threshold − 为局部阈值。

  • gthresh(可选) −它是全局阈值。

示例

在此示例中,我们使用 mh.thresholding.gbernsen() 函数对图像应用广义 Bernsen 局部阈值。

import mahotas as mh
import numpy as np
import matplotlib.pyplot as mtplt
# 加载图像
image = mh.imread('nature.jpeg')
# 将其转换为灰度
image = mh.colors.rgb2gray(image)
# 创建结构元素
structuring_element = np.array([[0, 0, 0],[0, 0, 0],[1, 1, 1]])
# 创建广义 Bernsen 阈值图像
threshold_image = mh.thresholding.gbernsen(image, structuring_element, 200,
128)
# 为子图创建图形和轴
fig, axis = mtplt.subplots(1, 2)
# 显示原始图像
axes[0].imshow(image, cmap='gray')
axes[0].set_title('Original Image')
axes[0].set_axis_off()
# 显示阈值图像
axes[1].imshow(threshold_image, cmap='gray')
axes[1].set_title('Generalized Bernsen Threshold Image')
axes[1].set_axis_off()
# 调整子图之间的间距
mtplt.tight_layout()
# 显示图形
mtplt.show()
输出

上述代码的输出如下 −

Bernsen Local Thresholding1

使用平均值的 Bernsen 局部阈值

我们可以使用像素强度的平均值作为阈值来应用 Bernsen 局部阈值。它指的是图像的平均强度,计算方法是将所有像素的强度值相加,然后除以像素总数。

在 mahotas 中,我们可以先使用 numpy.mean() 函数找到所有像素的平均像素强度。然后,我们定义一个窗口大小来获取像素的局部邻域。

最后,我们将平均值传递给 bernsen() 或 gbernsen() 函数的 contrast_threshold 参数,将其设置为阈值。

示例

在这里,我们对图像应用 Bernsen 局部阈值,其中阈值是所有像素强度的平均值。

import mahotas as mh
import numpy as np
import matplotlib.pyplot as mtplt
# 加载图像
image = mh.imread('nature.jpeg')
# 将其转换为灰度
image = mh.colors.rgb2gray(image)
# 计算平均像素值
mean = np.mean(image)
# 创建 bernsen 阈值图像
threshold_image = mh.thresholding.bernsen(image, 15, mean)
# 创建子图的图形和轴
fig, axis = mtplt.subplots(1, 2)
# 显示原始图像
axes[0].imshow(image, cmap='gray')
axes[0].set_title('Original Image')
axes[0].set_axis_off()
# 显示阈值图像
axes[1].imshow(threshold_image, cmap='gray')
axes[1].set_title('Bernsen Threshold Image')
axes[1].set_axis_off()
# 调整子图之间的间距
mtplt.tight_layout()
# 显示图形
mtplt.show()

输出

执行上述代码后,我们得到以下输出 −

Bernsen Local Thresholding Mean