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 中的均值滤波器,我们可以使用 mean_filter() 函数。

Mahotas 中的均值滤波器使用结构元素来检查邻域中的像素。

结构元素将每个像素值替换为其相邻像素的平均值。

结构元素的大小决定了平滑的程度。邻域越大,平滑效果越强,同时会减少一些精细细节,而邻域越小,平滑效果越差,但会保留更多细节。

mahotas.mean_filter() 函数

mean_filter() 函数使用指定的邻域大小将均值滤波器应用于输入图像。

它将每个像素值替换为其邻居中的多数值。过滤后的图像存储在输出数组中。

语法

以下是 mahotas − 中均值 filter() 函数的基本语法

mahotas.mean_filter(f, Bc, mode='ignore', cval=0.0, out=None)

其中,

  • img − 它是输入图像。

  • Bc − 它是定义邻域的结构元素。

  • mode(可选) −它指定函数如何处理图像的边界。它可以采用不同的值,例如"reflect"、"constant"、"nearest"、"mirror"或"wrap"。

    默认情况下,它设置为"ignore",这意味着过滤器会忽略图像边界之外的像素。

  • cval(可选) − 当 mode='constant' 时要使用的值。默认值为 0.0。

  • out(可选) − 它指定将存储过滤后的图像的输出数组。它必须与输入图像具有相同的形状。

示例

以下是使用 mean_filter() 函数过滤图像的基本示例 −

import mahotas as mh
import numpy as np
import matplotlib.pyplot as mtplt
image=mh.imread('tree.tiff', as_grey = True)
structuring_element = mh.disk(12)
filtered_image = mh.mean_filter(image, structuring_element)
# 显示原始图像
fig, axis = mtplt.subplots(1, 2, figsize=(9, 4))
axes[0].imshow(image, cmap='gray')
axes[0].set_title('Original Image')
axes[0].axis('off')
# 显示均值滤波后的图像
axes[1].imshow(filtered_image, cmap='gray')
axes[1].set_title('Mean Filtered')
axes[1].axis('off')
mtplt.show()
输出

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

均值滤波器

带反射模式的均值滤波器

当我们将均值滤波器应用于图像时,我们需要考虑每个像素周围的相邻像素来计算平均值。然而,在图像的边缘,有些像素在一侧或多侧没有邻居。

为了解决这个问题,我们使用"反射"模式。反射模式沿图像边缘创建镜像效果。它允许我们通过以镜像方式复制其像素来虚拟扩展图像。

这样,即使在边缘,我们也可以为均值滤波器提供相邻像素。

通过反射图像值,均值滤波器现在可以将这些镜像像素视为真实邻居。

它使用这些虚拟邻居计算平均值,从而在图像边缘实现更准确的平滑处理。

示例

在这里,我们尝试使用反射模式计算均值滤波器 −

import mahotas as mh
import numpy as np
import matplotlib.pyplot as mtplt
image=mh.imread('nature.jpeg', as_grey = True)
structuring_element = mh.morph.dilate(mh.disk(12), Bc=mh.disk(12))
filtered_image = mh.mean_filter(image, structuring_element, mode='reflect')
# 显示原始图像
fig, axis = mtplt.subplots(1, 2, figsize=(9, 4))
axes[0].imshow(image, cmap='gray')
axes[0].set_title('Original Image')
axes[0].axis('off')
# 显示均值滤波后的图像
axes[1].imshow(filtered_image, cmap='gray')
axes[1].set_title('Mean Filtered')
axes[1].axis('off')
mtplt.show()

输出

上述代码的输出如下 −

均值滤波器反射模式

通过将结果存储在输出数组中

我们也可以使用 Mahotas 将均值滤波器的结果存储在输出数组中。为此,我们首先需要使用 NumPy 库创建一个空数组。

此数组使用与输入图像相同的形状初始化,以存储结果滤波图像。数组的数据类型指定为浮点(默认)。

最后,我们将结果滤波图像作为参数传递给 mean_filter() 函数,将其存储在输出数组中。

示例

现在,我们尝试将均值滤波器应用于灰度图像,并将结果存储在特定的输出数组中 −

import mahotas as mh
import numpy as np
import matplotlib.pyplot as mtplt
image=mh.imread('pic.jpg', as_grey = True)
# 为过滤后的图像创建输出数组
output = np.empty(image.shape)
# 将结果存储在输出数组中
mh.mean_filter(image, Bc=mh.disk(12), out=output)
# 显示原始图像
fig, axis = mtplt.subplots(1, 2, figsize=(9, 4))
axes[0].imshow(image, cmap='gray')
axes[0].set_title('Original Image')
axes[0].axis('off')
# 显示平均过滤后的图像
axes[1].imshow(output, cmap='gray')
axes[1].set_title('Mean Filtered')
axes[1].axis('off')
mtplt.show()

输出

以下是上述代码的输出 −

结果输出数组