mindvisualizer-live / src /colormaps.py
Pixedar's picture
Deploy full MindVisualizer Python runtime
03e863f
Raw
History Blame Contribute Delete
1.85 kB
"""Colormap utilities: Turbo, Rainbow, and bipolar white-center."""
import numpy as np
def turbo_rgb01(t):
t = np.clip(np.asarray(t, np.float32), 0, 1)
r = (34.61 + t * (1172.33 + t * (-10793.56 + t * (33300.12 + t * (-38345.17 + 14829.80 * t))))) / 255.0
g = (23.31 + t * (557.33 + t * (1225.33 + t * (-3574.96 + t * 2199.29)))) / 255.0
b = (27.20 + t * (3211.10 + t * (-15327.97 + t * (34592.87 + t * (-30538.66 + 9347.97 * t))))) / 255.0
rgb = np.stack([r, g, b], axis=-1)
return (np.clip(rgb, 0, 1) * 255 + 0.5).astype(np.uint8)
def rainbow_rgb01(t):
t = np.clip(np.asarray(t, np.float32), 0.0, 1.0)
h = t * 4.0
i = np.floor(h).astype(np.int32)
f = h - i
q = 1.0 - f
i = np.clip(i, 0, 3)
zeros = np.zeros_like(t)
ones = np.ones_like(t)
r = np.choose(i, [zeros, zeros, f, ones])
g = np.choose(i, [f, ones, ones, q])
b = np.choose(i, [ones, q, zeros, zeros])
start = (t <= 0.0)
end = (t >= 1.0)
if np.any(start):
r[start], g[start], b[start] = 0.0, 0.0, 1.0
if np.any(end):
r[end], g[end], b[end] = 1.0, 0.0, 0.0
rgb = np.stack([r, g, b], axis=-1)
return (np.clip(rgb, 0, 1) * 255 + 0.5).astype(np.uint8)
def bicolor_white_center(dent_vals, pos=(255, 120, 0), neg=(0, 100, 255)):
d = np.asarray(dent_vals, np.float32)
a = np.abs(d)
scale = float(np.percentile(a, 97)) if a.size else 1.0
if not np.isfinite(scale) or scale <= 1e-12:
scale = 1.0
t = np.clip(a / scale, 0.0, 1.0)[:, None]
white = np.array([[255, 255, 255]], np.float32)
pos_c = np.array(pos, np.float32)[None, :]
neg_c = np.array(neg, np.float32)[None, :]
out = np.where(d[:, None] >= 0.0,
(1.0 - t) * white + t * pos_c,
(1.0 - t) * white + t * neg_c)
return out.astype(np.uint8)