如何对表示图像的 NumPy 数组进行重采样?


对表示图像的 NumPy 数组进行重采样,是指在保持图像质量的同时改变数组大小的过程。我们可以使用 Python 中的插值、抽取和上采样技术来对数组进行重采样。我们可以使用 Python 中 Scipy 库的 **ndimage.zoom()** 函数对表示图像的 NumPy 数组进行重采样。在本文中,我们将了解如何使用 Python 中的 Scipy 模块对表示图像的 NumPy 数组进行重采样。

插值

插值是一种用于估计现有数据点之间值的技巧。在 NumPy 中,我们有几种插值方法,例如线性插值、三次插值和最近邻插值。当新数组的分辨率高于原始数组时,会使用插值技术。

抽取

抽取是一种用于通过丢弃一些已存在的数据点来减小数组大小的技术。当新数组的分辨率低于原始数组时,会使用抽取技术。

上采样

上采样是一种通过在现有数据点之间插入新的数据点来增大数组大小的技术。当新数组的分辨率高于原始数组时,会使用此技术。

使用 scipy 模块对表示图像的 NumPy 数组进行重采样

为了对 NumPy 数组进行重采样,我们将使用 scipy 库及其中的 ndimage.zoom() 函数来缩放图像并增大其大小,而不会影响图像质量。您可以按照以下步骤对表示图像的 NumPy 数组进行重采样。

算法

可以使用 scipy 库按照以下算法对表示图像的 NumPy 数组进行重采样:

  • 导入所需的库:**NumPy、Scipy** 和 **Matplotlib。**

  • 使用 Scipy 库中的 **imread()** 函数将图像加载为 NumPy 数组。

  • 使用 Matplotlib 库中的 **imshow()** 函数显示原始图像。

  • 计算重采样图像的缩放因子。缩放因子是新图像大小与原始图像大小的比率。

  • 使用 Scipy 库中的 **ndimage.zoom()** 函数对图像进行重采样。将图像数组和缩放因子作为参数传递给该函数。

  • 使用 Matplotlib 库中的 **imshow()** 函数显示重采样图像。

  • 使用 **set_title()** 函数设置原始图像和重采样图像的标题。

  • 使用 Matplotlib 库中的 **show()** 函数显示图形。

  • 运行代码并观察输出,以检查重采样是否成功。

  • 根据需要调整缩放因子以增加或减少图像的分辨率。

我们可以使用 Scipy 库和 **ndimage.zoom()** 函数轻松地对表示图像的 NumPy 数组进行重采样。

语法

scipy.ndimage.zoom(input, zoom, output=None, order=3, mode='reflect', cval=0.0, prefilter=True)

此处,ndimage.zoom() 函数中使用的参数为:

  • **input** - 这是需要重采样的输入数组。它应该是一个 NumPy 数组。

  • **zoom** - 此参数是要用于重采样图像的缩放因子。它可以是标量或标量序列,指定输入数组沿每个维度的缩放因子。

  • **output** - 此参数是一个可选的输出数组,用于放置重采样的结果。它应该是一个与所需输出形状相同的 NumPy 数组。

  • **order** - 此参数是要使用的样条插值阶数。它应该是一个整数,其默认值为 3。

  • **mode** - 此参数是在处理输入边界之外的点时要使用的模式。它应该以下列字符串之一:'reflect'、'constant'、'nearest'、'mirror' 或 'wrap'。默认值为 'reflect'。

  • **cval** - 当 mode='constant' 时,此参数是用于输入边界之外的点的值。其默认值为 0.0。

  • **prefilter** - 此参数是一个布尔标志,指示是否在重采样之前对输入数据应用预滤波器。其默认值为 True。

步骤 1:导入必要的库

我们将导入 numpy 用于数组操作,导入 scipy 用于 ndimage.zoom() 函数,导入 matplotlib 用于图像可视化。

import numpy as np
from scipy import ndimage
import matplotlib.pyplot as plt

步骤 2:加载图像

我们将以 NumPy 数组的形式创建一个简单的 3*3 图像,并在下一步中缩放此图像。

image = np.array([[1, 2, 3],
               [4, 5, 6],
               [7, 8, 9]])

步骤 3:对图像进行重采样

为了缩放图像,我们将使用 ndimage.zoom() 函数。ndimage.zoom() 函数有两个参数 - 要缩放的输入数组和缩放因子。缩放因子是一个元组,用于指示输入数组每个维度的缩放比例。我们将使用 (2,2) 的缩放因子将图像在两个维度上的大小加倍。

zoom_factor = (2, 2)
resampled_image = ndimage.zoom(image, zoom_factor)

步骤 4:可视化原始图像和重采样图像

我们可以使用 matplotlib 的 **plt.show()** 函数来可视化原始图像和重采样图像。我们创建两个子图,在第一个子图中显示原始图像,在第二个子图中显示重采样图像。

# Create a figure with two subplots
fig, (ax1, ax2) = plt.subplots(1, 2)

# Display the original image in the first subplot
ax1.imshow(image, cmap='gray')
ax1.set_title('Original Image')

# Display the resampled image in the second subplot
ax2.imshow(resampled_image, cmap='gray')
ax2.set_title('Resampled Image')

# Show the figure
plt.show()

示例

对图像进行重采样的完整代码如下所示:

import numpy as np
from scipy import ndimage
import matplotlib.pyplot as plt

# Load the image as a NumPy array
image = np.array([[1, 2, 3],
                 [4, 5, 6],
                 [7, 8, 9]])

# Define the zoom factor
zoom_factor = (2, 2)

# Resample the image using the ndimage.zoom() function
resampled_image = ndimage.zoom(image, zoom_factor)

# Create a figure with two subplots
fig, (ax1, ax2) = plt.subplots(1, 2)

# Display the original image in the first subplot
ax1.imshow(image, cmap='gray')
ax1.set_title('Original Image')

# Display the resampled image in the second subplot

ax2.imshow(resampled_image, cmap='gray')
ax2.set_title('Resampled Image')

# show the figure
plt.show()

输出

结论

在本文中,我们讨论了对表示图像的 NumPy 数组进行重采样的方法。插值、抽取和上采样技术用于对图像进行重采样。Python 的 Scipy 库用于使用其 ndimage.zoom() 函数对图像进行重采样。通过更改缩放因子,我们可以根据需要增加或减少图像的分辨率。

更新于: 2023年7月11日

2K+ 浏览量

启动您的 职业生涯

通过完成课程获得认证

开始学习
广告
© . All rights reserved.