我使用模板匹配算法来检测目标图像中给定对象的实例。 该算法会生成如下所示的热图:
到目前为止,我已经使用skimage.feature.peak_local_max
在热图中找到了运行良好的局部峰。
现在,我想针对模板的不同旋转运行模板匹配,这将给我几个热图。像这样:
我将这些图像堆叠在一起以创建3D数组,现在我想在本地 neighborhood 中找到最高的值。例如,将邻域定义为高15像素(但包括所有旋转)。
3D数组的形状为(高度,宽度,旋转)。 z轴对应于模板的旋转。
编辑: 我自己找到了一个解决方案(带有 markuscosinus 的有用评论),并将在此发布,以防有人遇到相同的问题:
我查看了scipy.ndimage.filters.maximum_filter
的实现(可以在here中找到。我微动了一下代码,以适应我的数据形状,并使用了footprint = np.ones((size_neighborhood, size_neighborhood, nr_rotations))
。
答案 0 :(得分:1)
实现此目标的一种方法如下:
skimage.feature.peak_local_max
m
处的每个最大(x,y,z)
,请检查附近是否有其他人。最简单的情况是检查带有拐角(x-n,y-n,y-n)
和(x+n,y+n,y+n)
的邻域立方体,其中n
是邻域大小。如果附近有一些,只能保持最大。我知道,这在效率方面不是很令人满意,但是如果您没有太多或太大的图片,则应该完成工作:)
答案 1 :(得分:1)
我自己找到了一个解决方案(带有 markuscosinus 的有用评论),如果有人遇到相同的问题,我会在这里发布:
我查看了scipy.ndimage.filters.maximum_filter
的实现(可以在here中找到。我微动了一下代码,以适应我的数据形状,并使用了footprint = np.ones((size_neighborhood, size_neighborhood, nr_rotations))
。