Plot 2 dimensional numpy array in .npy file using matplotlib?

834 views Asked by At

I have numpy file stored as "test.npy" which is a 2 dimensional Synthetic Aperture Radar(SAR) image data with VV and VH polarization bands. How do I plot this 2 dimensional image array using 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()

But the line:

plt.imshow(img_array[0], cmap='gray')

plots only the first band in the list. So, how is it possible for me to plot 2 dimensional image array?

2

There are 2 answers

0
Ioannis Nasios On
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()
1
NMme On

The problem is that your array has the shape (2, 512, 512) but matplotlib can only show grayscale, rgb or rgba images. Also the array needs to have the form (H,W), (H,W,3) or (H,W,4) respectively as you can see in the documentation here. Therefore I suggest you swap the axes and extend the array to a (H,W,3) shape with an additionally empty channel:

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