为了简单起见,我们假设图像有两行四列,像素颜色由三组强度级别表示(强度量化为五个不同的整数值)。我想通过一个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
作为颜色映射来执行转换。在
这是:
你在找什么?在
重新排列通道解压缩所需的轴所需的
img.transpose()
。在对于任意数量的通道:
^{pr2}$相关问题 更多 >
编程相关推荐