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.rank_filter() 函数在 mahotas 中执行等级过滤器。 mahotas 中的等级过滤器会比较邻域内的像素强度值,并根据其在强度排序列表中的等级为每个像素分配一个新值。

为了详细说明,让我们看看等级过滤器在 mahotas − 中的工作原理

  • 假设您有一张由许多像素组成的灰度图像,每个像素都具有从黑色到白色的特定强度值。

  • 现在,让我们关注图像中的特定像素。等级过滤器将检查此像素周围的邻域。

  • 在此邻域内,等级过滤器将比较所有像素的强度值。它将根据强度值按升序或降序排列这些像素,具体取决于过滤器的配置。

  • 一旦强度值排序,等级过滤器将根据其在有序列表中的等级为中心像素分配一个新值。这个新值通常是邻域内的中位数、最小值或最大值。

通过对图像中的每个像素重复此过程,等级过滤器可以帮助完成各种图像增强任务。

mahotas.rank_filter() 函数

mahotas 中的 rank_filter() 函数接受三个参数:要过滤的图像、结构元素和邻域的大小。

邻域是每个像素周围的矩形区域,其大小由每个维度的像素数指定。例如,大小为 3×3 的邻域将包括像素的八个邻居。

rank_filter() 函数返回与原始图像具有相同尺寸的新图像。新图像中的值是原始图像中相应像素的排名。

语法

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

mahotas.rank_filter(f, Bc, rank, mode='reflect', cval=0.0, out=None)

其中,

  • f −它是将应用等级过滤器的输入图像数组。

  • Bc − 定义每个像素周围邻域的结构元素。

  • rank − 它确定要从邻域内的排序列表中选择的像素值的等级。如果需要多个等级,等级可以是整数或整数列表。

  • mode(可选) − 确定如何处理输入图像的边界。它可以采用以下值之一:"ignore"、"constant"、"nearest"、"mirror"或"wrap"。默认值为"reflect"。

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

  • out(可选) − 用于存储排名过滤器输出的数组。如果未提供,则创建一个新数组。

示例

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

import mahotas as mh
import numpy as np
import matplotlib.pyplot as mtplt
# 创建示例灰度图像
image = mh.imread('nature.jpeg', as_grey = True)
# 应用最小过滤器
filtered_image = mh.rank_filter(image, mh.disk(6), rank=0)
print(filtered_image)
# 显示原始图像
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('Rank Filtered')
axes[1].axis('off')
mtplt.show()
输出

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

[[193.71 193.71 193.71 ... 206.17 206.17 207.17]
 [193.71 193.71 193.71 ... 206.17 206.17 207.17]
 [193.71 193.71 193.71 ... 206.17 206.17 207.17]
 ...
 [ 74.59  62.44 53.62 ... 4.85 4.85 4.85]
 [ 85.37  74.59 62.44 ... 4.85 4.85 4.85]
 [ 90.05  79.3 73.18 ...  4.85 4.85 4.85]]

显示的图像如下所示 −

Rank Filter

RGB 图像上的 Rank Filter

彩色图像由三个颜色通道组成:红色、绿色和蓝色 (RGB)。通过分别对每个通道应用 Rank 过滤,我们可以增强每个颜色通道特有的功能。

要在 mahotas 中对 RGB 图像应用 Rank 过滤,我们首先通过指定通道值从 RGB 图像中提取通道。

分别使用红色、绿色和蓝色通道的索引 0、1 和 2 来访问通道值。然后,我们在每个通道上应用等级滤波器并将它们堆叠在一起以重建最终的 RGB 图像。

示例

在这里,我们在 RGB 图像的每个通道上分别应用具有不同邻域大小的中值滤波器 −

import mahotas as mh
import numpy as np
import matplotlib.pyplot as mtplt
image = mh.imread('nature.jpeg')
# 在每个通道上分别应用具有不同邻域大小的中值滤波器
filtered_image = np.stack([mh.rank_filter(image[:, :, 0], mh.disk(2), rank=4),
mh.rank_filter(image[:, :, 1], mh.disk(1), rank=4),
mh.rank_filter(image[:, :, 2], mh.disk(3), rank=4)],
axis=2)
# 显示原始图像
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('Rank Filtered')
axes[1].axis('off')
mtplt.show()

输出

以下是上述代码的输出 −

Rank Filter RGB Image

使用"Wrap"模式

在对图像执行等级过滤时,边缘或边界处的像素通常缺乏足够的相邻像素来准确计算等级。

为了解决这个问题,Mahotas 中的"wrap"模式将图像值环绕到另一侧。这意味着图像一端的像素值被视为另一端像素的邻居。

这样就创建了从一侧到另一侧的无缝过渡,确保在计算等级值时考虑边界处的像素。

示例

import mahotas as mh
import numpy as np
import matplotlib.pyplot as mtplt
image = mh.imread('sun.png', as_grey = True)
# 应用具有"wrap"模式的最大过滤器
filtered_image = mh.rank_filter(image, mh.disk(10), rank=8, mode='wrap')
print(filtered_image)
# 显示原始图像
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('Rank Filtered')
axes[1].axis('off')
mtplt.show()

输出

上述代码的输出如下 −

[[49.92 49.92 49.92 ... 49.92 49.92 49.92]
 [49.92 49.92 49.92 ... 49.92 49.92 49.92]
 [49.92 49.92 49.92 ... 49.92 49.92 49.92]
 ...
 [49.92 49.92 49.92 ... 49.92 49.92 49.92]
 [49.92 49.92 49.92 ... 49.92 49.92 49.92]
 [49.92 49.92 49.92 ... 49.92 49.92 49.92]]

得到的图像如下 −

Wrap Mode