相关疑难解决方法(0)

如何使用numpy将RGB图像转换为基于颜色的one-hot编码3d数组?

简而言之,我想做的与这个问题类似: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)

python numpy image

5
推荐指数
1
解决办法
6907
查看次数

如何将3D RGB标签图像(在语义分割中)转换为2D灰度图像,并且类索引从0开始?

我有一个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中广播

python numpy numpy-broadcasting

5
推荐指数
1
解决办法
1248
查看次数

如何将图像集合中的像素(R、G、B)映射到不同的像素颜色值索引?

假设有 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)

python performance numpy image image-processing

4
推荐指数
1
解决办法
3087
查看次数

如何从颜色字典快速更改图像中的像素?

我有一个图像,我想从颜色图中更改图像中的所有颜色,例如。{(10,20,212):(60,40,112)...}

目前,我正在读取图像 OpenCV,然后遍历图像数组并更改每个像素,但这非常慢。

有什么办法可以更快地做到这一点吗?

opencv python-imaging-library python-3.x

1
推荐指数
2
解决办法
1936
查看次数