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/
Blog post: https://yiweimao.github.io/blog/colour_of_spectra/
Install
pip install coloured-spectra
Examples
Find the observed colour of a blackbody at 6500 K.
from coloured_spectra.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()
lines_nm = [254,436,546,764,405,365,578,750,738,697,812,772,912,801,842,795,706,826,852,727] # approx sorted by emission strength
img = np.zeros((100,1000))
wavelengths = np.linspace(350,850,1000)
strength = 1.
for line in lines_nm:
indx = np.sum(wavelengths<line)
if indx > 0 and indx < 1000:
img[:,indx-2:indx+2] = strength
strength -= 0.05
plt.imshow(img,cmap="gray",extent=[np.min(wavelengths),np.max(wavelengths),0,np.shape(img)[0]])
plt.xlabel("wavelength (nm)")
Text(0.5, 0, 'wavelength (nm)')
You can see the emission lines have been coloured.
colour_hyperspectral_line(wavelengths,img)
100%|██████████| 100/100 [00:01<00:00, 52.00it/s]
You can also return a column of observed colour given a hyperspectral line
hyperspec_line2colour(wavelengths,img)
100%|██████████| 100/100 [00:03<00:00, 31.57it/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
File details
Details for the file coloured_spectra-0.0.8.tar.gz
.
File metadata
- Download URL: coloured_spectra-0.0.8.tar.gz
- Upload date:
- Size: 12.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.47.0 CPython/3.8.3
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 02846630b661ec05353e2ac661c61a1aab7f1086187090305dffac24482bd4d3 |
|
MD5 | f81294a1e4ad48b4c1f17b6402f851e2 |
|
BLAKE2b-256 | 23e0e77884c902ca26077caf5626c34a749d20bf8e6904013590982eca375098 |
File details
Details for the file coloured_spectra-0.0.8-py3-none-any.whl
.
File metadata
- Download URL: coloured_spectra-0.0.8-py3-none-any.whl
- Upload date:
- Size: 11.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.47.0 CPython/3.8.3
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | e1d591af1ae8a70fede94b5b1056df2f4705641e249b4d9cc9292c2c7f7f394d |
|
MD5 | 92365c128e29b030af6560436f4a2566 |
|
BLAKE2b-256 | 668a097f4206776e920f12baea26e1561edbba2d8a4396e38e9a1900e527950a |