【问题标题】:generate 16-bit color map in matplotlib在 matplotlib 中生成 16 位颜色图
【发布时间】:2019-06-06 01:17:12
【问题描述】:

我想在 matplotlib 中使用 RGB colormap 为 16 位深度图像着色。从技术上讲,每个通道 8 位的 3 个通道应该足以为所有 2^16 个可能的深度值提供不同的 rgb 值。

标准颜色图 'viridis' 确实会产生

我尝试使用大量样本 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)

是否有具有足够值的颜色图,或者我如何创建一个? 与枕头图像库相关的解决方案也值得赞赏。

编辑

显然(感谢ImportanceOfBeingErnest)生成的颜色图确实有 2**16 个值,但np.uint8(np.rint(cm(pixel) * 255)) 导致其中一些落在相同的颜色上。我只打印了结果图像中不同颜色的数量。我想我必须做一个不同的映射,但原来的问题已经回答了。

【问题讨论】:

    标签: python matplotlib colormap color-depth


    【解决方案1】:

    Viridis 有 256 种颜色。它是ListedColormap,这意味着在重新采样时,它仍会为您提供最大的初始颜色数。所以plt.get_cmap('viridis', 2**16) 仍然会为您提供 256 种初始颜色。

    import numpy as np
    import matplotlib.pyplot as plt
    import matplotlib.colors as mcolors
    
    cmap = plt.get_cmap("viridis", 2**16)
    a = cmap(np.linspace(0,1,2**16))
    print(len(a))
    print(len(np.unique(a, axis=0)))
    

    打印

    65536
    256
    

    但是LinearSegmentedColormap.from_list 具有更大的 N 应该可以工作。

    cmap = mcolors.LinearSegmentedColormap.from_list("", ["red", "green", "yellow"], N=2**16)
    a = cmap(np.linspace(0,1,2**16))
    print(len(a))
    print(len(np.unique(a, axis=0)))
    

    打印

    65536
    65536
    

    如果您想要具有 2^16 个条目的 viridis 颜色图,您仍然可以在现有的 256 种颜色之间进行插值,

    cmap = mcolors.LinearSegmentedColormap.from_list("", plt.cm.viridis.colors, N=2**16)
    

    这将产生 65536 种颜色。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-01-21
      • 2021-07-20
      • 2018-04-01
      • 2013-09-27
      • 2013-03-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多