简而言之,我想做的与这个问题类似:Convert RGB image to index image,但我想要获取 n 通道图像,而不是 1 通道索引图像,其中img[h, w]是 one-hot 编码向量。例如,如果输入图像为[[[0, 0, 0], [255, 255, 255]],索引 0 分配给黑色,索引 1 分配给白色,则所需的输出为[[[1, 0], [0, 1]]]。
就像上一个人问的问题一样,我天真地实现了这个,但是代码运行得很慢,我相信使用 numpy 的正确解决方案会明显更快。
另外,正如上一篇文章中所建议的,我可以将每个图像预处理为灰度并对图像进行单热编码,但我想要一个更通用的解决方案。
假设我想将白色分配给 0,红色分配给 1,蓝色分配给 2,黄色分配给 3:
(255, 255, 255): 0
(255, 0, 0): 1
(0, 0, 255): 2
(255, 255, 0): 3
Run Code Online (Sandbox Code Playgroud)
,我有一个由这四种颜色组成的图像,其中图像是一个 3D 数组,其中包含每个像素的 R、G、B 值:
[
[[255, 255, 255], [255, 255, 255], [255, 0, 0], [255, 0, 0]],
[[ 0, 0, …Run Code Online (Sandbox Code Playgroud) 我有一个rgb语义分段标签,如果其中有3个类,并且每个RGB值是以下之一:
[255, 255, 0], [0, 255, 255], [255, 255, 255]
Run Code Online (Sandbox Code Playgroud)
然后,我想根据dict将RGB文件中的所有值映射到新的2D标签图像中:
{(255, 255, 0): 0, (0, 255, 255): 1, (255, 255, 255): 2}
Run Code Online (Sandbox Code Playgroud)
之后,新的灰色标签文件中的所有值都是0、1或2之一。是否有解决此问题的有效方法?例如在NumPy中广播。
假设有 600 个带注释的语义分割掩模图像,其中包含 10 种不同的颜色,每种颜色代表一个实体。这些图像位于形状 (600, 3, 72, 96) 的 numpy 数组中,其中 n = 600、3 = RGB 通道、72 = 高度、96 = 宽度。
如何将 numpy 数组中的每个 RGB 像素映射到颜色索引值?例如,颜色列表将为 [(128, 128, 0), (240, 128, 0), ...n],并且 numpy 数组中的所有 (240, 128, 0) 像素将转换为索引唯一映射中的值 (= 1)。
如何用更少的代码高效地做到这一点?这是我想出的一种解决方案,但速度相当慢。
# Input imgs.shape = (N, 3, H, W), where (N = count, W = width, H = height)
def unique_map_pixels(imgs):
original_shape = imgs.shape
# imgs.shape = (N, H, W, 3)
imgs = imgs.transpose(0, 2, 3, 1)
# …Run Code Online (Sandbox Code Playgroud) 我有一个图像,我想从颜色图中更改图像中的所有颜色,例如。{(10,20,212):(60,40,112)...}
目前,我正在读取图像 OpenCV,然后遍历图像数组并更改每个像素,但这非常慢。
有什么办法可以更快地做到这一点吗?