精确地将Python(numpy)中的小图像调整为原始大小的倍数

时间:2012-10-26 03:27:27

标签: python numpy scipy

  

可能重复:
  how to repeat along two axis

假设我们有以下矩阵/图像:

x = array([[1, 0, 1],
           [0, 1, 0],
           [1, 0, 1]])

我想得到的是一个9x9矩阵,它是上面的3倍放大版本,左上角有3x3个,中间顶部有3x3个,等等。

我已经尝试过的事情是:

scipy.ndimage.interpolation.zoom (x,3,order =(anything)),例如order = 0返回:

array([[1, 1, 0, 0, 0, 0, 1, 1, 1],
       [1, 1, 0, 0, 0, 0, 1, 1, 1],
       [0, 0, 1, 1, 1, 1, 0, 0, 0],
       [0, 0, 1, 1, 1, 1, 0, 0, 0],
       [0, 0, 1, 1, 1, 1, 0, 0, 0],
       [0, 0, 1, 1, 1, 1, 0, 0, 0],
       [1, 1, 0, 0, 0, 0, 1, 1, 1],
       [1, 1, 0, 0, 0, 0, 1, 1, 1],
       [1, 1, 0, 0, 0, 0, 1, 1, 1]])

scipy.misc.imresize (x,(9,9),interp =“nearest”)(实际上来自PIL),它提出了一个不同的创意(但错误的)解决方案。< / p>

同时,MATLAB imresize完美地解决了这个问题......

有什么想法吗? (注意:所有这些解决方案都应该有效,所以在提交之前,请尝试一下:))

1 个答案:

答案 0 :(得分:5)

Kronecker产品:

numpy.kron(x,numpy.ones((3,3)))

结果:

array([[ 1.,  1.,  1.,  0.,  0.,  0.,  1.,  1.,  1.],
       [ 1.,  1.,  1.,  0.,  0.,  0.,  1.,  1.,  1.],
       [ 1.,  1.,  1.,  0.,  0.,  0.,  1.,  1.,  1.],
       [ 0.,  0.,  0.,  1.,  1.,  1.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  1.,  1.,  1.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  1.,  1.,  1.,  0.,  0.,  0.],
       [ 1.,  1.,  1.,  0.,  0.,  0.,  1.,  1.,  1.],
       [ 1.,  1.,  1.,  0.,  0.,  0.,  1.,  1.,  1.],
       [ 1.,  1.,  1.,  0.,  0.,  0.,  1.,  1.,  1.]])