Я хочу наложить два вида одной и той же сцены - одно изображение белого цвета (монохромное, используется для справки), а другое - изображение в определенной полосе (у которой есть реальные данные, которые я показываю).Правильный способ наложения многозонных изображений?
Изображение с белым светом является «ссылкой», изображение данных «данные». Это обычные 2D-массивы с одинаковыми размерами. Я хочу, чтобы показать белое эталонное изображение с помощью «серой» цвета карты, и изображения данных, используя «горячую» цветовую карту.
Что такое «правильный» способ сделать это?
Я начал с этим:
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.cm as cm
hotm = cm.ScalarMappable(cmap='hot')
graym = cm.ScalarMappable(cmap='gray')
ref_rgb = graym.to_rgba(reference) # rgba reference image, 'gray' color map
data_rgb = hotm.to_rgb(data) # rgba data image, 'hot' color map
plt.imshow(ref_rgb + data_rgb)
Это не сработало, потому что в plt.imshow()
вызова сумма переполнила диапазон 0..1 (или, может быть 0..255, это сбивает с толку) и дал мне сумасшедшие цвета.
Тогда я заменил последнюю строку с этим:
plt.imshow(ref_rgb/2 + data_rgb/2)
Это работало, но дает мне очень размытых, с низким уровнем контрастности изображения.
Наконец, я попытался это:
plt.imshow(np.maximum(ref_rgb, data_rgb))
Это, кажется, дает лучший результат, но я боюсь, что большая часть моего «данные» утрачивается, имеющие более низкие R, G, или б значения, чем эталонное изображение.
Что такое «правильный» или «обычный» способ сделать это?