Построить 2-мерный массив numpy в файле .npy с помощью matplotlib?
У меня есть файл numpy, хранящийся как "test.npy", который представляет собой данные двумерного изображения радара с синтезированной апертурой (SAR) с полосами поляризации VV и VH. Как построить этот массив двумерных изображений с помощью matplotlib?
import numpy as np
img_array = np.load('test.npy')
from matplotlib import pyplot as plt
plt.imshow(img_array[1], cmap='gray')
plt.show()
Но строчка:
plt.imshow(img_array[0], cmap='gray')
отображает только первую полосу в списке. Итак, как я могу построить двумерный массив изображений?
2 ответа
Проблема в том, что ваш массив имеет форму (2, 512, 512), но matplotlib может отображать только изображения в оттенках серого, rgb или rgba. Также массив должен иметь форму (H,W), (H,W,3) или (H,W,4) соответственно, как вы можете видеть в документации здесь . Поэтому я предлагаю вам поменять местами оси и расширить массив до формы (H,W,3) с дополнительным пустым каналом:
import numpy as np
from matplotlib import pyplot as plt
img_array = np.load('test.npy')
c, h, w = img_array.shape
img = np.zeros((h, w, 3)) # create image of zeros with (height, width, channel)
img[:, :, :2] = img_array.swapaxes(0,2) # fill the first 2 channels
plt.imshow(img)
plt.show()
import numpy as np
from matplotlib import pyplot as plt
img2d = np.load('test.npy')
img3d = np.concatenate(( np.expand_dims(img2d[0],-1), np.expand_dims(img2d[1],-1),np.expand_dims((img2d[0]+img2d[1])/2, -1)), -1)
plt.imshow(img3d)
plt.show()