Я хотел бы раскрасить 16-битное изображение глубиной с помощью RGB colormap в matplotlib.Технически, 3 канала с 8 битами на канал должно быть достаточно, чтобы иметь различные значения rgb для всех 2 ^ 16 возможных значений глубины.
Стандартная цветовая карта 'viridis' действительно дает <1000 различных значений, даже если исходныеглубина изображения была более чем вдвое больше. </p>
Я пытался создать цветовую карту с большим количеством образцов plt.get_cmap('viridis', 2**16)
, но этого все еще недостаточно.
Некоторый код, чтобы описать, что япытаясь сделать:
def depth_to_rgb(path):
depth_map = Image.open(path)
pixel = np.array(depth_map)
pixel = (pixel - np.min(pixel)) / np.ptp(pixel)
cm = plt.get_cmap('viridis', 2**16)
pixel_colored = np.uint8(np.rint(cm(pixel) * 255))[:, :, :3]
return Image.fromarray(pixel_colored)
Я могу немного увеличить количество различных значений на карте, создав собственный см, но этого по-прежнему недостаточно:
cm = mlp.colors.LinearSegmentedColormap.from_list("",
["red", "green", "yellow"], N=2**16)
Есть лиЦветовая карта с достаточным количеством значений или как я могу ее создать?Также приветствуются решения, связанные с библиотекой изображений подушек.
EDIT
Очевидно (благодаря ImportanceOfBeingErnest ) результирующая цветовая карта действительно имеет 2 ** 16 значений, но np.uint8(np.rint(cm(pixel) * 255))
заставил некоторых из них упасть на те же цвета.Я только напечатал количество различных цветов в полученном изображении.Я предполагаю, что мне нужно сделать что-то другое, но на оригинальный вопрос дан ответ.