如何将多维查找表应用于彩色图像?

2024-04-19 07:34:05 发布

您现在位置:Python中文网/ 问答频道 /正文

为了简单起见,我们假设图像有两行四列,像素颜色由三组强度级别表示(强度量化为五个不同的整数值)。我想通过一个3D查找表将这样的彩色图像转换成单通道图像,使用每个像素的强度级别作为索引。这个玩具示例可以实现如下:

import numpy as np
levels = 5
rows, columns, channels = 2, 4, 3

lut = np.arange(levels**channels).reshape([levels for n in range(channels)])
np.random.seed(0)
img = np.random.randint(low=0, high=levels, size=(rows, columns, channels))

我知道我可以这样硬编码索引:

^{pr2}$

以上代码可用于多光谱图像:

indexed = lut[[img[:, :, i] for i in range(channels)]]

两种方法产生相同的结果:

In [931]: indexed
Out[931]: 
array([[103,  91,  89,   4],
       [ 55,  30,  48,  15]])

我的问题:有没有更优雅的方法来获得同样的结果?更具体地说,我正在寻找一个NumPy函数,它将一个彩色图像(3D数组)分割成彩色通道(2D数组)的列表。另外,我认为可以通过matplotlib使用lut作为颜色映射来执行转换。在


Tags: columnsin图像for颜色nprange像素