构建图像金字塔#

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 的幂的情况下。我们根据需要稍微扩展复合图像的行数以适应这种情况。为了覆盖下采样比例小于 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()
plot pyramid

脚本总运行时间: (0 分钟 0.140 秒)

由 Sphinx-Gallery 生成的图库