使用 SciPy ndimage 模块裁剪/调整图像大小

795 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第3天,点击查看活动详情

SciPy 模块简介

SciPy 库是流行的科学计算库,提供了许多用户友好和高效的数值计算,如数值积分、插值、优化、线性代数等。

SciPy 库定义了许多数学物理的特殊函数,包括椭圆函数、贝塞尔函数、伽马函数等等,我们使用以下代码演示 SciPy 库的基本用法:

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

def drumhead_height(n, k, distance, angle, t):
    kth_zero = special.jn_zeros(n, k)[-1]
    return np.cos(t) * np.cos(n*angle) * special.jn(n, distance*kth_zero)

theta = np.r_[0:2*np.pi:50j]
radius = np.r_[0:1:50j]
x = np.array([r * np.cos(theta) for r in radius])
y = np.array([r * np.sin(theta) for r in radius])
z = np.array([drumhead_height(1, 1, r, theta, 0.5) for r in radius])

fig = plt.figure()
ax = fig.add_axes(rect=(0, 0.05, 0.95, 0.95), projection='3d')
ax.plot_surface(x, y, z, rstride=1, cstride=1, cmap='RdBu_r', vmin=-0.5, vmax=0.5)
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_xticks(np.arange(-1, 1.1, 0.5))
ax.set_yticks(np.arange(-1, 1.1, 0.5))
ax.set_zlabel('Z')
plt.show()

Figure_13.png

使用 SciPy ndimage 模块裁剪/调整图像大小

调整图像大小/裁剪图像是一项常见且重要的预处理步骤,例如,深度学习模型需要将输入图像调整为同一大小。在本节中,我们将学习如何使用 scipy.ndimage 模块的 zoom() 函数缩放图像,然后介绍如何使用 Numpy ndarray 切片语法裁剪图像。

首先,从 python 库模块导入所需的函数:

from scipy import ndimage
import matplotlib.pyplot as plt
from skimage.io import imread

读取输入图像并使用 scipy.ndimage.zoom() 函数缩放图像。根据 SciPy 文档所述,zoom() 函数的调用方式如下:

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

zoom() 函数默认使用样条插值缩放阵列,在函数中通过指定 “nearest” 模式执行样条插值,样条插值将通过复制最近的像素来扩展输入图像。

从以下代码可以看出,我们可以分别指定每个轴的缩放因子,因为我们不需要在颜色通道上缩放,所以通道上的缩放因子指定为 1,而宽度和高度维度的缩放因子指定为 2,样条插值的阶 (order),默认为 3,阶是 [0, 5] 范围内的整数:

im = imread('1.png') / 255
zoomed_im = ndimage.zoom(im, (2,2,1), mode='nearest', order=1) # 缩放图像
print(im.shape, zoomed_im.shape)

最后,使用 NumPy ndarray 切片语法通过裁剪图像显示原始图像和缩放后的图像:

plt.figure(figsize=(20,10))
plt.subplot(121)
plt.imshow(im)
plt.title('Original Image', size=25)
plt.subplot(122)
plt.imshow(zoomed_im[125:325,375:550,:]) # 裁剪图像
plt.title('Zoomed and Cropped Image', size=25)
plt.show()

Figure_14.png