2015-01-04 3 views
2

Скажем, у меня есть изображение в оттенках серого, которое равно 3x3 и представлено массивом numpy ниже.Функция Python для расширения изображения (массив 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

См. Http://stackoverflow.com/questions/7656665/how-to-repeat-along-two-axis –

ответ

5

Вы можете использовать np.repeat вдоль обеих осей 3x3 img массива:

>>> 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]]) 

Другой способ расчета Kronecker product из img и массив соответствующей формы, заполненный единицами:

>>> 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.]]) 

Вот ссылка на документацию для np.kron:

Таким образом, в приведенном выше примере, каждое значение x в img умножается на 2х2 массив единиц, чтобы создать массив 2х2 x значений. Эти новые массивы 2x2 составляют возвращаемый массив.

Это умножение может быть медленнее, чем просто повторять.

Смежные вопросы