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

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

在这篇文章中,我们将对一个代表图像的NumPy数组进行重采样。为此,我们将使用scipy包。Scipy包中有ndimage.zoom()方法,该方法通过使用给定阶数的样条插值来放大NumPy数组,为我们完成这一任务。默认是阶数3(又称立方)。

对于含有虚数成分的输入,scipy.ndimage.zoom,独立缩放实数和虚数成分。

语法: scipy.ndimage.zoom(input, zoom, output=None, order=3, mode=’constant’, cval=0.0, prefilter=True, *, grid_mode=False)

参数:

  • input:它定义了ndarray
  • zoom:它需要一个序列或一个单一的数字,如果是一个单一的数字,它意味着在所有轴上应用相同的缩放值,如果提供了一个序列,那么就按照给定的顺序应用到x、y、z…等。
  • output:默认情况下,将创建与输入相同类型的输出。
  • order:花键插值,其范围必须在[0,5]之间,包括在内。
  • mode:最重要的参数之一,它决定了插值必须发生在边界像素之外,它可以从这个列表中取值[‘反射’, ‘恒定’, ‘最近’, ‘镜像’, ‘包裹’]。
  • prefilter : 取布尔值,决定输入数组在插值前是否要用花键滤波器进行预过滤。

返回 : 缩放输入的数组。

示例

为了完成我们的缩放任务,我们将首先创建一个ndarray,如下所述。

import numpy as np
import scipy.ndimage
 
ndarray = np.array([[11, 12, 13, 14],
                    [21, 22, 23, 24],
                    [31, 32, 33, 34],
                    [41, 42, 43, 44]])
print(ndarray)

输出:

[[11 12 13 14]
 [21 22 23 24]
 [31 32 33 34]
 [41 42 43 44]]

例子1:在这个例子中,我们将通过

  • ndarray作为输入阵列
  • zoom: 2 (zoom with the value)
  • order: 0 (spline interpolation)

order=0,zoom=2,因此,缩放是在具有相同数值的轴上进行的。

print(scipy.ndimage.zoom(
  ndarray, 2, order = 0))

输出:

[[11 11 12 12 13 13 14 14]
 [11 11 12 12 13 13 14 14]
 [21 21 22 22 23 23 24 24]
 [21 21 22 22 23 23 24 24]
 [31 31 32 32 33 33 34 34]
 [31 31 32 32 33 33 34 34]
 [41 41 42 42 43 43 44 44]
 [41 41 42 42 43 43 44 44]]

例子2:在这个例子中,我们将通过

  • ndarray作为输入阵列
  • zoom: 2 (用数值缩放)
  • order : 1 (花键插值)

因为order =1,zoom=2,所以,缩放是在值+轴的轴上进行的,即;值+4。

print(scipy.ndimage.zoom(
  ndarray, 2, order = 1))

输出:

[[11 11 12 12 13 13 14 14]
 [15 16 16 17 17 17 18 18]
 [20 20 20 21 21 22 22 23]
 [24 24 25 25 26 26 26 27]
 [28 29 29 29 30 30 31 31]
 [32 33 33 34 34 35 35 35]
 [37 37 38 38 38 39 39 40]
 [41 41 42 42 43 43 44 44]]

例子3:在多波段图像的情况下,我们通常不希望沿Z轴插值来创建添加到图像中的新波段,因此我们应该为缩放系数参数传递一个序列而不是一个单一的数字。

import numpy as np
import scipy.ndimage
 
ndarray = np.array([[[11, 12, 13, 14],
                     [21, 22, 23, 24]],
                    [[31, 32, 33, 34],
                     [41, 42, 43, 44]]])
print(ndarray)
 
print(scipy.ndimage.zoom(ndarray, 1).shape)

输出:

[[[11 12 13 14]
  [21 22 23 24]]

 [[31 32 33 34]
  [41 42 43 44]]]
(2, 2, 4)

示例 4:

import numpy as np
import scipy.ndimage
 
ndarray = np.array([[[11, 12, 13, 14],
                     [21, 22, 23, 24]],
                    [[31, 32, 33, 34],
                     [41, 42, 43, 44]]])
 
print(scipy.ndimage.zoom(ndarray, (2, 2, 4)))

输出:

[[[11 11 11 11 12 12 12 12 13 13 13 13 14 14 14 14]
  [14 14 14 14 14 15 15 15 15 15 16 16 16 16 17 17]
  [18 18 19 19 19 19 20 20 20 20 20 21 21 21 21 21]
  [21 21 21 21 22 22 22 22 23 23 23 23 24 24 24 24]]

 [[16 16 16 17 17 17 17 18 18 18 18 18 19 19 19 19]
  [19 19 19 19 20 20 20 20 20 21 21 21 21 22 22 22]
  [24 24 24 24 24 25 25 25 25 25 26 26 26 26 27 27]
  [26 26 26 27 27 27 27 28 28 28 28 28 29 29 29 29]]

 [[26 26 26 26 27 27 27 27 27 28 28 28 28 29 29 29]
  [28 28 29 29 29 29 30 30 30 30 30 31 31 31 31 31]
  [33 33 33 34 34 34 34 35 35 35 35 35 36 36 36 36]
  [36 36 36 36 37 37 37 37 37 38 38 38 38 39 39 39]]

 [[31 31 31 31 32 32 32 32 33 33 33 33 34 34 34 34]
  [34 34 34 34 34 35 35 35 35 35 36 36 36 36 37 37]
  [38 38 39 39 39 39 40 40 40 40 40 41 41 41 41 41]
  [41 41 41 41 42 42 42 42 43 43 43 43 44 44 44 44]]]

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

Numpy教程