Got a spectra? Use this to find what is the observed colour.
Project description
coloured_spectra
Got a spectra? Use this to find the observed colour!
Works great when applied to a single spectra. Using this for hyperspectral though... this Python implementation is too slow to be practical. (Can be magnitudes faster if coded in Julia)
Documentation site: https://yiweimao.github.io/coloured_spectra/
Install
pip install coloured_spectra
Examples
Find the observed colour of a blackbody at 6500 K.
from coloured_spectra import *
import numpy as np
import pickle
import matplotlib.pyplot as plt
import cv2
bb = Blackbody(5778)
bb.plot()
def show_blackbody_colour(T_K):
bb = Blackbody(T_K,np.linspace(380,750))
sRGB = spectra2sRGB(bb.λ_nm,bb.B_λT)
# Due to normalisation choices, the brightness can change depending on the spectra
# show the colour at max brightness
HSV = cv2.cvtColor(np.reshape(sRGB,(1,1,3)), cv2.COLOR_RGB2HSV_FULL)
HSV[0,0,2] = 255
RGB = cv2.cvtColor(HSV, cv2.COLOR_HSV2RGB_FULL)
plot_colour(RGB)
This approximates the colour of the Sun with a blackbody temperature of 5778 K.
show_blackbody_colour(5778)
show_blackbody_colour(11000) # what about the star Rigel?
If you have a hyperspectral line, you can colour it in by the observed colour. For this, the invisible UV and NIR is painted white on top of a black background. This look up table spectrum is:
plot_hsv_LUT_spectrum()
# load a hyperspectral line (imaged HgAr lamp)
with open('../wave_cal.pkl','rb') as handle:
img = np.float32(np.rot90(pickle.load(handle),1))
# get rid of sensor abnormalities
img[669,467] = img[670,467]
img[587,1174] = img[588,1174]
img /= np.max(img)
plt.imshow(img,cmap='gray',extent=[400,850,0,np.shape(img)[0]])
plt.xlabel("wavelengths (nm)")
plt.ylabel("cross-track")
plt.colorbar()
<matplotlib.colorbar.Colorbar at 0x118865c10>
You can see the emission lines have been coloured.
colour_hyperspectral_line(np.linspace(400,850,2064),img)
100%|██████████| 772/772 [00:41<00:00, 18.53it/s]
You can also return a column of observed colour given a hyperspectral line
hyperspec_line2colour(np.linspace(400,850,2064),img)
100%|██████████| 772/772 [01:07<00:00, 11.46it/s]
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for coloured_spectra-0.0.2-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2f5c09f74b6532a3e444366f0bb001556dde5a849294e48e086506ab60f38777 |
|
MD5 | e103b8d27283d98fab3776bb6d2417ec |
|
BLAKE2b-256 | 82282920764c644a18ff97c02f1a9f18a582cd334ffa18440d6762fc28f1de06 |