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 中,我们可以使用 mahotas.distance() 函数对图像执行距离变换。它使用迭代方法创建距离图。

该函数首先初始化图像中所有像素的距离值。背景像素被分配一个无穷大的距离值,而前景像素被分配一个零距离值。

然后,该函数根据其相邻像素的距离更新每个背景像素的距离值。这种情况会一直持续到计算完所有背景像素的所有距离值为止。

mahotas.distance() 函数

mahotas.distance() 函数将图像作为输入并返回距离图作为输出。距离图是包含输入图像中每个像素与最近背景像素之间距离的图像。

语法

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

mahotas.distance(bw, metric='euclidean2')

其中,

  • bw − 是输入图像。

  • metric(可选) − 它指定用于确定像素和背景像素之间距离的距离类型(默认为 euclidean2)。

示例

在下面的示例中,我们使用 mh.distance() 函数对图像执行距离变换。

import mahotas as mh
import numpy as np
import matplotlib.pyplot as mtplt
# 加载图像
image = mh.imread('nature.jpeg')
# 将其转换为灰度
image = mh.colors.rgb2gray(image)
# 查找距离图
distance_map = mh.distance(image)
# 为子图创建图形和轴
fig, axis = mtplt.subplots(1, 2)
# 显示原始图像
axes[0].imshow(image)
axes[0].set_title('Original Image')
axes[0].set_axis_off()
# 显示距离转换后的图像
axes[1].imshow(distance_map)
axes[1].set_title('Distance Transformed Image')
axes[1].set_axis_off()
# 调整子图之间的间距
mtplt.tight_layout()
# 显示图
mtplt.show()
输出

以下是上述代码的输出 −

Distance Transform

使用带标签的图像

我们还可以使用带标签的图像执行距离变换。带标签的图像是指为不同区域分配唯一标签以将图像分割成不同区域的图像。

在 mahotas 中,我们可以对输入图像应用距离变换,首先使用 mh.gaussian_filter() 函数降低其噪声。然后,我们使用 mh.label() 函数将前景区域与背景区域分开。

然后我们可以使用 mh.distance() 函数创建距离图。这将计算前景区域像素与背景区域像素之间的距离。

示例

在下面提到的示例中,我们正在寻找经过过滤的标记图像的距离图。

import mahotas as mh
import numpy as np
import matplotlib.pyplot as mtplt
# 加载图像
image = mh.imread('tree.tiff')
# 将其转换为灰度
image = mh.colors.rgb2gray(image)
# 应用高斯滤波
gauss_image = mh.gaussian_filter(image, 3)
gauss_image = (gauss_image > gauss_image.mean())
# 将其转换为带标签的图像
labeled, num_objects = mh.label(gauss_image)
# 查找距离图
distance_map = mh.distance(labeled)
# 为子图创建图形和轴
fig, axis = mtplt.subplots(1, 2)
# 显示原始图像
axes[0].imshow(image)
axes[0].set_title('Original Image')
axes[0].set_axis_off()
# 显示转换后的距离图像
axes[1].imshow(distance_map)
axes[1].set_title('距离变换图像')
axes[1].set_axis_off()
# 调整子图之间的间距
mtplt.tight_layout()
# 显示图形
mtplt.show()

输出

上述代码的输出如下

Labeled Image

使用欧几里得距离

对图像执行距离变换的另一种方法是使用欧几里得距离。欧几里得距离是坐标系中两点之间的直线距离。它计算为坐标之间的平方差之和的平方根。

例如,假设有两个点 A 和 B,其坐标值分别为 (2, 3) 和 (5, 7)。那么 x 和 y 坐标的平方差将为 (5−2)2 = 9 和 (7−3)2 = 16。平方和将为 9 + 16 = 25,平方根将为 5,这是点 A 和点 B 之间的欧几里得距离。

在 mahotas 中,我们可以使用 euclidean 距离而不是默认的 euclidean2 作为距离度量。为此,我们将值"euclidean"传递给 metric 参数。

注意 −欧几里得应该写为"euclidean"(用单引号引起来),因为度量参数的数据类型是字符串。

示例

在此示例中,我们使用欧几里得距离类型对图像进行距离变换。

import mahotas as mh
import numpy as np
import matplotlib.pyplot as mtplt
# 加载图像
image = mh.imread('sun.png')
# 将其转换为灰度
image = mh.colors.rgb2gray(image)
# 应用高斯滤波
gauss_image = mh.gaussian_filter(image, 3)
gauss_image = (gauss_image > gauss_image.mean())
# 查找距离图
distance_map = mh.distance(gauss_image, metric='euclidean')
# 为子图创建图形和轴
fig, axis = mtplt.subplots(1, 2)
# 显示原始图像
axes[0].imshow(image)
axes[0].set_title('Original Image')
axes[0].set_axis_off()
# 显示转换后的距离图像
axes[1].imshow(distance_map)
axes[1].set_title('距离变换图像')
axes[1].set_axis_off()
# 调整子图之间的间距
mtplt.tight_layout()
# 显示图形
mtplt.show()

输出

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

欧几里得距离