I was trying to take any image and show it and its respective fftshifted
version. In this process, I would like to produce both images in black and white only (or gray scales...). Currently I have the following code:
from matplotlib import image
import matplotlib.pyplot as plt
import numpy as np
cameraman = image.imread("cameraman.png")
fftshifted_cameraman = np.fft.fftshift(cameraman)
fig1 = plt.figure()
ax11 = fig1.add_subplot(121)
plt.axis('off')
plt.imshow(cameraman, cmap = 'gray')
ax11.title.set_text('Cameraman')
ax12 = fig1.add_subplot(122)
plt.axis('off')
plt.imshow(fftshifted_cameraman, cmap = 'gray')
ax12.title.set_text('FFT Shifted Cameraman')
plt.show()
This gives me the following output:
Obviously, the second image is clearly not in gray scales and I believe the first one is only because it is like that by default. Does anyone know how to fix this?
Thanks for any help in advance.
To produce gray scale images with imshow(), you need to pass 2-D arrays. Check the shape of image array and if it is 3-D (or 4-D with alpha channel) then convert:
cameraman_gray = cameramen[:,:,0]
plt.imshow(cameraman_gray, cmap='gray')