Picking up on PearsonArtPhoto great answer, I was intrigued by the assertion that what we saw in the image was mostly blue with almost no red channel.
So I wrote the following snippet of code, to analyze the following image https://www.nasa.gov/sites/default/files/thumbnails/image/pia22512.jpg, saved on my hard drive as "picture.jpg".
The output of the snippet is the following image, which shows the three RGB channel separated (first row), in grayscale (second row) and of a zoomed portion of the dune (third row):
Assuming that the downloaded image has inside a faithful representation of HiRISE data and assuming that I understood PearsonArtPhoto's answer correctly (i.e. that RED channel in the image would be the "RED" HiRISE signal, GREEN channel is the "Infrared" HiRISE signal and that the BLUE channel is the "BLUE/GREEN" HiRISE signal), then I would say that:
- there is a lot of infrared signal (wavelength > 750nm according to HiRise Spectral resolution graph) which as humans we would not see, so it does not affect the question if the dune is really blue to us or not. However, this reminds us that the dune probably doesn't emit a monochromatic color (i.e. a single wavelength) but it emits a combination of wavelengths.
- the blue/green signal is a lot active expected
- the red signal is perhaps not that low (it does not max out at 255 but still goes to 120).
If the red signal was zero, than we could conclude that the signal picked by the green/blue signal must be < 525nm, so it could be blue but also green (green is between 495 and 570nm https://en.wikipedia.org/wiki/Green).
On the other hand, if indeed that red is "significant" (not just some noise), then having green/blue+red HiRise signals tells us by the spectral resolution graph that we might be receiving a single wavelength between 525nm and 600nm so this would be almost certainly green!
However, I would also remind of the first point: it could be that the dune emits two (and more) wavelengths, one in the "blue/green only" signal part (< 525nm) and one in the "red only" signal part (between 600ns and 750nm more or less). I am not sure what would be the human perceived color in this case, I have still to think about it :)
from PIL import Image
import matplotlib.pyplot as plt
import numpy as np
jpgfile = Image.open("picture.jpg")
print(jpgfile.bits, jpgfile.size, jpgfile.format)
data_array = np.array(jpgfile)
nrow,ncol,_ = data_array.shape
fig, ax = plt.subplots(3,4)
labels = ['Human RED \n Hirise RED', 'Human GREEN \n Hirise Infrared', 'Human BLUE \n Hirise GREEN/BLUE']
for i in range(3):
data = np.zeros((nrow,ncol,3),data_array.dtype)
data[:,:,i] = data_array[:,:,i]
im = ax[0,i].imshow(data)
ax[0,i].set_title(labels[i])
ax[0,3].imshow(data_array)
for i in range(3):
data = np.zeros((nrow,ncol),data_array.dtype)
data[:,:] = data_array[:,:,i]
im = ax[1,i].imshow(data,cmap='gray')
fig.colorbar(im, ax=ax[1,i], orientation='horizontal')
print(i,data.max(),data.min())
ax[1,3].imshow(data_array)
data_array = data_array[700:1000,1150:1550,:]
for i in range(3):
data = np.zeros(data_array.shape[0:2],data_array.dtype)
data[:,:] = data_array[:,:,i]
im = ax[2,i].imshow(data,cmap='gray')
fig.colorbar(im, ax=ax[2,i], orientation='horizontal')
print(i,data.max(),data.min())
ax[2,3].imshow(data_array)
plt.show()