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 裁剪图像,我们可以使用 NumPy 数组切片操作来选择图像的所需区域。我们需要定义所需 ROI 的坐标或尺寸。这可以通过指定要裁剪的区域的起点、宽度和高度来完成。

通过提取和隔离 ROI,我们可以分析、操作或仅显示图像的相关部分。

示例

在下面的示例中,我们将图像裁剪为所需的大小 −

import mahotas as mh
import numpy as np
import matplotlib.pyplot as plt
image = mh.imread('sun.png')
cropping= image[50:1250,40:340]
# 创建带有子图的图形
fig, axis = plt.subplots(1, 2, figsize=(10, 5))
# 显示原始图像
axes[0].imshow(image)
axes[0].set_title('Original Image')
axes[0].axis('off')
# 显示裁剪后的图像
axes[1].imshow(cropping, cmap='gray')
axes[1].set_title('Cropped Image')
axes[1].axis('off')
# 调整布局并显示图
plt.tight_layout()
plt.show()

输出

以下是上述代码的输出 −

裁剪图像

裁剪方形区域

要在 mahotas 中裁剪方形区域,我们需要确定起始和结束行和列。以下是计算这些值的方法 −

步骤 1 − 找到图像的最小尺寸。

步骤 2 − 通过从总行数中减去最小尺寸并将结果除以 2 来计算起始行。

步骤 3 − 通过将起始行添加到最小尺寸来计算结束行。

步骤 4 −使用类似方法计算起始列。

步骤 5 − 通过将起始列添加到最小维度来计算结束列。

使用计算出的起始和结束行和列,我们可以从图像中裁剪出正方形区域。我们通过使用适当的行和列范围对图像数组进行索引来实现这一点。

示例

在这里,我们尝试在正方形区域中裁剪图像 −

import mahotas as mh
import numpy as np
import matplotlib.pyplot as plt
image = mh.imread('tree.tiff')
# 获取最小维度
size = min(image.shape[:2])
# 计算图像中心
center = tuple(map(lambda x: x // 2, image.shape[:2]))
# 裁剪中心周围的方形区域
crop = image[center[0] - size // 2:center[0] + size // 2, center[1] - size //
2:center[1] + size // 2]
# 创建带有子图的图形
fig, axis = plt.subplots(1, 2, figsize=(10, 5))
# 显示原始图像图像
axes[0].imshow(图像)
axes[0].set_title('原始图像​​')
axes[0].axis('off')
# 显示裁剪后的图像
axes[1].imshow(crop, cmap='gray')
axes[1].set_title('裁剪后的图像')
axes[1].axis('off')
# 调整布局并显示图表
plt.tight_layout()
plt.show()

输出

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

裁剪方形区域

裁剪圆形区域

要在 mahotas 中将图像裁剪为圆形区域,我们需要确定圆的中心坐标和半径。

我们可以通过将中心计算为图像尺寸的中点并将半径设置为最小尺寸的一半来实现这一点。

接下来,我们创建一个与图像尺寸相同的布尔掩码,其中 True 值表示圆形区域内的像素。

我们通过计算每个像素与中心的距离并将落在指定半径内的像素设置为 True 来实现这一点。

现在我们有了圆形蒙版,我们可以通过将圆形区域外的值设置为零来将其应用于图像。最后,我们得到裁剪后的图像。

示例

现在,我们尝试在圆形区域内裁剪图像 −

import mahotas as mh
import numpy as np
import matplotlib.pyplot as plt
image = mh.imread('sun.png')
# 计算图像中心
center = tuple(map(lambda x: x // 2, image.shape[:2]))
# 将半径计算为最小尺寸的一半
radius = min(image.shape[:2]) // 2
# 创建零的布尔掩码
mask = np.zeros(image.shape[:2], dtype=bool)
# 创建网格索引
y, x = np.ogrid[:image.shape[0], :image.shape[1]]
# 将圆形区域内的掩码值设置为 True
mask[(x - center[0])**2 + (y - center[1])**2 <= radius**2] = True
crop = image.copy()
# 将圆形区域外的数值设置为零
crop[~mask] = 0
# 创建带有子图的图形
fig, axis = plt.subplots(1, 2, figsize=(7, 5))
# 显示原始图像
axes[0].imshow(image)
axes[0].set_title('Original Image')
axes[0].axis('off')
# 显示裁剪后的图像
axes[1].imshow(crop, cmap='gray')
axes[1].set_title('Cropped Image')
axes[1].axis('off')
# 调整布局并显示图
plt.tight_layout()
plt.show()

输出

得到的输出如下所示 −

裁剪圆形区域