首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将类别矩阵可视化为RGB图像?

如何将类别矩阵可视化为RGB图像?
EN

Stack Overflow用户
提问于 2018-07-24 18:07:38
回答 1查看 652关注 0票数 1

我正在使用神经网络进行语义分割(人类解析),类似于将人的照片作为输入,神经网络告诉我们每个像素最有可能是头部、腿部、背景或人体的其他部分。算法运行流畅,并给出一个numpy.ndarray作为输出。数组的形状是(1,23,600,400),其中600x400是输入图像的分辨率,23是类别的数量。3d矩阵看起来像23层堆叠的2d矩阵,其中每一层都使用浮点矩阵来告知每个像素属于该类别的可能性。

为了使矩阵可视化,如下图所示,我使用numpy.argmax将3d矩阵压缩成一个2d矩阵,该矩阵包含最可能的类别的索引。但我不知道如何继续获得我想要的可视化效果。

编辑

实际上,我可以用一种微不足道的方式来做这件事。也就是说,使用for循环遍历每个像素并为其分配颜色以获得图像。但是,这不是向量化编码,因为numpy内置了加速矩阵操作的方法。我需要为实时分割节省CPU周期。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-25 13:31:45

这相当简单。您所需要的只是一个将23个标签映射成独特颜色的lookup table。最简单的方法是使用23 x 3的numpy数组,每行存储相应标签的RGB值:

代码语言:javascript
运行
复制
import numpy as np
import matplotlib.pyplot as plt
lut = np.random.rand(23, 3)   # using random mapping - but you can do better
lb = np.argmax(prediction, axis=1)  # converting probabilities to discrete labels
rgb = lut[lb[0, ...], :]  # this is all it takes to do the mapping.
plt.imshow(rgb)
plt.show()

或者,如果您只对用于显示的色彩映射表感兴趣,则可以使用plt.imshowcmap参数,但这将要求您将lut转换为“色彩映射表”:

代码语言:javascript
运行
复制
from matplotlib.colors import LinearSegmentedColormap
cmap = LinearSegmentedColormap.from_list('new_map', lut, N=23)
plt.imshow(lb[0, ...], cmap=cmap)
plt.show()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51495927

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档