对于从事目标检测工作的人来说特征金字塔一定不陌生,在深度学习中这是一种很有效的特征融合手段,这里主要是想从直观的图像数据层面来去理解可视化这个过程。为了可视化,我们生成了一个合成图像,其行数与源图像相同,但列数为cols+pyramid[1].shape[1]。然后,我们有空间将所有向下采样的图像堆叠到原始图像的右侧。当image.shape[0]不是2的幂时,金字塔中所有下采样图像的行数之和有时可能会超过原始图像大小。为了说明这一点,我们根据需要稍微扩展了组合中的行数。还需要扩展到原始行数之外,以覆盖缩小<2的情况。
直接看下效果:
原图:
结果图:
原图:
效果图:
核心实现如下:
pyramid = tuple(pyramid_gaussian(image, downscale=2, multichannel=True))
composite_image = np.zeros((rows, cols + cols // 2, 3), dtype=np.double)
composite_image[:rows, :cols, :] = pyramid[0]
可以说是很精简了,composite_image是堆叠后的图像。
接下来对单张图像进行可视化:
for p in pyramid[1:]:
n_rows, n_cols = p.shape[:2]
composite_image[i_row:i_row + n_rows, cols:cols + n_cols] = p
i_row += n_rows
plt.clf()
plt.imshow(composite_image)
plt.show()
这里我对原始图像进行了resize操作,在resize操作中有一个参数interpolation可以指定插值的算法,主要包括:INTER_AREA、INTER_LINEAR、INTER_NEAREST、INTER_CUBIC、INTER_LANCZOS4这五种,为了直观对比不同插值算法的效果,这里对其进行了整体的对比可视化,
效果如下:
肉眼基本上区分不出来的感觉。