- 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 到 Sepia 转换
- 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 - Haralic 特征
- 标签区域的权重
- Mahotas - Zernike 特征
- Mahotas - Zernike 矩
- Mahotas - 排序滤波器
- Mahotas - 2D 拉普拉斯滤波器
- 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.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 # Creating a sample grayscale image image = mh.imread('nature.jpeg', as_grey = True) # Applying minimum filter filtered_image = mh.rank_filter(image, mh.disk(6), rank=0) print(filtered_image) # Displaying the original image fig, axes = mtplt.subplots(1, 2, figsize=(9, 4)) axes[0].imshow(image, cmap='gray') axes[0].set_title('Original Image') axes[0].axis('off') # Displaying the rank filtered featured image 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]]
显示的图像如下所示:
RGB 图像上的排序滤波器
彩色图像由三个颜色通道组成:红色、绿色和蓝色(RGB)。通过分别对每个通道应用排序滤波器,我们可以增强每个颜色通道的特定特征。
要在 mahotas 中对 RGB 图像应用排序滤波器,我们首先通过指定通道值从 RGB 图像中提取通道。
通道值分别使用索引 0、1 和 2 来访问红色、绿色和蓝色通道。然后,我们对每个通道应用排序滤波器,并将它们堆叠在一起以重建最终的 RGB 图像。
示例
在这里,我们分别对 RGB 图像的每个通道应用具有不同邻域大小的中值滤波器:
import mahotas as mh import numpy as np import matplotlib.pyplot as mtplt image = mh.imread('nature.jpeg') # Applying a median filter with different neighborhood sizes on each channel separately 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) # Displaying the original image fig, axes = mtplt.subplots(1, 2, figsize=(9, 4)) axes[0].imshow(image, cmap='gray') axes[0].set_title('Original Image') axes[0].axis('off') # Displaying the rank filtered featured image axes[1].imshow(filtered_image, cmap='gray') axes[1].set_title('Rank Filtered') axes[1].axis('off') mtplt.show()
输出
以下是上述代码的输出:
使用“Wrap”模式
在对图像执行排序滤波时,边缘或边界处的像素通常缺乏足够的相邻像素来准确计算排名。
为了解决此问题,Mahotas 中的“wrap”模式将图像值环绕到另一侧。这意味着图像一端像素的值被视为另一端像素的邻居。
这在两侧之间创建了一个无缝过渡,确保在计算排名值时考虑边界处的像素。
示例
import mahotas as mh import numpy as np import matplotlib.pyplot as mtplt image = mh.imread('sun.png', as_grey = True) # Applying maximum filter with 'wrap' mode filtered_image = mh.rank_filter(image, mh.disk(10), rank=8, mode='wrap') print(filtered_image) # Displaying the original image fig, axes = mtplt.subplots(1, 2, figsize=(9, 4)) axes[0].imshow(image, cmap='gray') axes[0].set_title('Original Image') axes[0].axis('off') # Displaying the rank filtered featured image 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]]
获得的图像如下所示: