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.template_match() 函数执行模板匹配。该函数将模板图像与较大图像中与模板图像大小相同的每个区域进行比较。

该函数使用平方差和 (SSD) 方法执行模板匹配。 SSD 方法的工作方式如下 −

  • 第一步是计算模板图像和较大图像的像素值之间的差异。

  • 下一步,对差异求平方。

  • 最后,对较大图像中所有像素的平方差异求和。

最终的 SSD 值决定了模板图像和较大图像之间的相似性。值越小,模板图像与较大图像之间的匹配度就越高。

mahotas.template_match() 函数

mahotas.template_match() 函数以图像和模板图像作为输入。

它从较大图像中返回与输入模板图像最匹配的区域。

最佳匹配是具有最低 SSD 值的区域。

语法

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

mahotas.template_match(f, template, mode='reflect', cval=0.0, out=None)

其中,

  • f −它是输入图像。

  • template − 它是将与输入图像匹配的模式。

  • mode(可选) − 它确定当模板应用于其边界附近时如何扩展输入图像(默认为"反射")。

  • cval(可选) − 当模式为"常量"时,它是用于填充的常量值(默认值为 0.0)。

  • out(可选) − 它定义存储输出图像的数组(默认值为 None)。

示例

在下面的示例中,我们使用 mh.template_match() 函数执行模板匹配。

import mahotas as mh
import numpy as np
import matplotlib.pyplot as mtplt
# 加载图像
image = mh.imread('tree.tiff', as_grey=True)
template = mh.imread('cropped tree.tiff', as_grey=True)
# 应用模板匹配算法
template_matching = mh.template_match(image, template)
# 为子图创建图形和轴
fig, axis = mtplt.subplots(1, 3)
# 显示原始图像
axes[0].imshow(image, cmap='gray')
axes[0].set_title('Original Image')
axes[0].set_axis_off()
# 显示模板图像
axes[1].imshow(template, cmap='gray')
axes[1].set_title('Template Image')
axes[1].set_axis_off()
# 显示匹配的图像
axes[2].imshow(template_matching, cmap='gray')
axes[2].set_title('Matched Image')
axes[2].set_axis_off()
# 调整子图之间的间距
mtplt.tight_layout()
# 显示图形
mtplt.show()
输出

以下是上述代码的输出 −

模板匹配

通过包裹边界进行匹配

在 Mahotas 中执行模板匹配时,我们可以包裹图像的边界。包裹边界是指将图像边界折叠到图像的另一侧。

因此,边界外的像素会在图像的另一侧重复出现。

这有助于我们在模板匹配期间处理图像边界外的像素。

在 mahotas 中,我们可以在执行模板匹配时通过为 template_match() 函数的 mode 参数指定值"wrap"来包裹图像的边界。

示例

在下面提到的示例中,我们通过包裹图像的边界来执行模板匹配。

import mahotas as mh
import numpy as np
import matplotlib.pyplot as mtplt
# 加载图像
image = mh.imread('sun.png', as_grey=True)
template = mh.imread('cropped sun.png', as_grey=True)
# 应用模板匹配算法
template_matching = mh.template_match(image, template, mode='wrap')
# 为子图创建图形和轴
fig, axis = mtplt.subplots(1, 3)
# 显示原始图像
axes[0].imshow(image, cmap='gray')
axes[0].set_title('Original Image')
axes[0].set_axis_off()
# 显示模板图像
axes[1].imshow(template, cmap='gray')
axes[1].set_title('Template Image')
axes[1].set_axis_off()
# 显示匹配的图像
axes[2].imshow(template_matching, cmap='gray')
axes[2].set_title('Matched Image')
axes[2].set_axis_off()
# 调整间距子图
mtplt.tight_layout()
# 显示图形
mtplt.show()

输出

上述代码的输出如下 −

Template Matching1

忽略边界匹配

我们还可以通过忽略图像的边界来执行模板匹配。通过忽略边界,在执行模板匹配时排除超出图像边界的像素。

在 mahotas 中,我们为 template_match() 函数的 mode 参数指定值"ignore",以在执行模板匹配时忽略图像的边界。

示例

在这里,我们在执行模板匹配时忽略图像的边界。

import mahotas as mh
import numpy as np
import matplotlib.pyplot as mtplt
# 加载图像
image = mh.imread('nature.jpeg', as_grey=True)
template = mh.imread('cropped nature.jpeg', as_grey=True)
# 应用模板匹配算法
template_matching = mh.template_match(image, template, mode='ignore')
# 为子图创建图形和轴
fig, axis = mtplt.subplots(1, 3)
# 显示原始图像
axes[0].imshow(image, cmap='gray')
axes[0].set_title('Original Image')
axes[0].set_axis_off()
# 显示模板图像
axes[1].imshow(template, cmap='gray')
axes[1].set_title('Template Image')
axes[1].set_axis_off()
# 显示匹配的图像
axes[2].imshow(template_matching, cmap='gray')
axes[2].set_title('Matched Image')
axes[2].set_axis_off()
# 调整子图之间的间距
mtplt.tight_layout()
# 显示图
mtplt.show()

输出

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

Matching Ignoring Boundaries