scikit-image 模板匹配+非极大值抑制实现
scikit-image
提供了一个match_template()
函数,不过这个函数的定位并不是像VisionPro中的PMAlign(或者VisionMaster中的模板匹配),它不是一个端到端的工具,而是输出一个用模板滑过图像窗口形成的相关系数矩阵:即结果是一个矩阵,每个值表示在相应窗口位置时,模板与图像窗口的相关性。
这个函数的作用类似于我们手写一个人脸检测模块时,在第一阶段构建的人脸分类+滑动窗口的功能——即输出每个位置的得分,以表示每个区域是否存在人脸(或者存在人脸的概率)。但是随之而来的问题是,位置相近的窗口会有多个,但是它们都是同一个实体对象。这篇笔记组合了match_template()
和NMS
算法,实现一个端到端的模板匹配功能。
实现对象
我们今天的实验对象是scikit-image
官方的硬币示例:
image = data.coins()
coin = image[170:220, 75:130]
fig, ax = pyplot.subplots(1, 2)
ax0: axes.Axes = ax[0]
ax0.imshow(image, cmap='gray')
ax0.set_title("image")
ax1: axes.Axes = ax[1]
ax1.imshow(coin, cmap='gray')
ax1.set_title("template")