Python函数扩展图像(NumPy数组)

时间:2015-01-04 18:43:01

标签: python arrays numpy image-processing

假设我有一张3x3的灰度图像,并由下面的numpy数组表示。

我想增加图像的大小和分辨率,类似于普通图片编辑软件中的调整大小功能,但我不希望它改变像素的任何值,只是为了扩展它们。

是否有Python函数执行以下转换?

[0,0,0]
[0,1,0]
[0,0,0]

---->

[0,0,0,0,0,0]
[0,0,0,0,0,0]
[0,0,1,1,0,0]
[0,0,1,1,0,0]
[0,0,0,0,0,0]
[0,0,0,0,0,0]

1 个答案:

答案 0 :(得分:6)

您可以沿3x3 img数组的两个轴使用np.repeat

>>> img.repeat(2, axis=0).repeat(2, axis=1)
array([[0, 0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0, 0],
       [0, 0, 1, 1, 0, 0],
       [0, 0, 1, 1, 0, 0],
       [0, 0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0, 0]])

另一种方法是计算img的{​​{3}}和一个用1填充的适当形状的数组:

>>> np.kron(img, np.ones((2,2)))
array([[ 0.,  0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  1.,  1.,  0.,  0.],
       [ 0.,  0.,  1.,  1.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.,  0.]])

以下是Kronecker product文档的链接:

因此,在上面的示例中,x中的每个值img都乘以2x2的1数组,以创建一个{x} x值的2x2数组。这些新的2x2阵列组成了返回的数组。

然而,这种乘法可能比简单重复慢。