注意
转到末尾下载完整的示例代码。或通过 Binder 在浏览器中运行此示例
构建图像金字塔#
pyramid_gaussian
函数接收一个图像,并产生以恒定比例因子缩小的连续图像。图像金字塔通常用于实现去噪、纹理判别和尺度不变检测等算法。
import numpy as np
import matplotlib.pyplot as plt
from skimage import data
from skimage.transform import pyramid_gaussian
image = data.astronaut()
rows, cols, dim = image.shape
pyramid = tuple(pyramid_gaussian(image, downscale=2, channel_axis=-1))
生成用于可视化的合成图像#
为了可视化,我们生成一个合成图像,该图像具有与源图像相同的行数,但具有 cols + pyramid[1].shape[1]
列。然后,我们有空间将所有下采样图像堆叠在原始图像的右侧。
注意:当 image.shape[0] 不是 2 的幂时,金字塔中所有下采样图像中的行数之和有时可能会超过原始图像大小。我们会在必要时稍微扩大合成图像中的行数以解决此问题。还需要扩展超出原始行数的数量,以覆盖 downscale < 2 的情况。
# determine the total number of rows and columns for the composite
composite_rows = max(rows, sum(p.shape[0] for p in pyramid[1:]))
composite_cols = cols + pyramid[1].shape[1]
composite_image = np.zeros((composite_rows, composite_cols, 3), dtype=np.double)
# store the original to the left
composite_image[:rows, :cols, :] = pyramid[0]
# stack all downsampled images in a column to the right of the original
i_row = 0
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
fig, ax = plt.subplots()
ax.imshow(composite_image)
plt.show()
脚本的总运行时间:(0 分钟 0.471 秒)