numpy的indexing学习笔记

numpy的indexing学习笔记

np.newaxis

效果等价于None,放在哪儿哪儿就增加一个单位长度的维度

高级索引

高级索引如果用了一个ndarray的tuple,即同时使用多array进行索引,那么这些ndarray必须保证他们可以被广播到同样的shape,否则就会抛出异常。

而如果有多个索引,那么它们一次索引第1、2、3……维

每一个索引向量内部,相应位置上的值,表示要取被索引对象相应下标上的值,例子如下:

这个例子展示了如何使用 高级索引(Advanced Indexing)来根据查找表(lookup table)将图像中的每个像素映射到相应的 RGB 颜色值。

让我们以简单的代码示例来演示这个过程:

场景:根据查找表映射像素值到 RGB

假设我们有一个包含图像像素值的数组,像素值是 07 之间的整数,每个像素需要映射到一个 RGB 颜色。我们有一个 RGB 查找表,其中每一行对应一个颜色的 RGB 三元组。

示例代码:

import numpy as np

# 创建一个简单的 8 色查找表,每行是一个 RGB 颜色三元组
lookup_table = np.array([
    [255, 0, 0],    # Red
    [0, 255, 0],    # Green
    [0, 0, 255],    # Blue
    [255, 255, 0],  # Yellow
    [0, 255, 255],  # Cyan
    [255, 0, 255],  # Magenta
    [192, 192, 192],# Silver
    [0, 0, 0]       # Black
])

# 创建一个示例图像,像素值为 0 到 7 之间的整数,形状为 (3, 3)
image = np.array([
    [0, 1, 2],
    [3, 4, 5],
    [6, 7, 0]
], dtype=np.uint8)

# 使用高级索引根据像素值从查找表中获取 RGB 颜色
rgb_image = lookup_table[image]

# 打印结果
print("Image:\n", image)
print("\nRGB Image:\n", rgb_image)

解释:

  1. lookup_table:是一个形状为 (8, 3) 的二维数组,其中每一行是一个 RGB 颜色值,代表从 07 的 8 种颜色。

  2. image:是一个形状为 (3, 3) 的二维数组,包含了图像的像素值,像素值的范围是 07(即这些值在查找表的范围内)。

  3. 高级索引lookup_table[image] 采用了图像的像素值作为索引,从查找表中获取相应的 RGB 值。结果是一个形状为 (3, 3, 3) 的数组,每个像素都有一个 RGB 三元组。

执行结果:

Image:
 [[0 1 2]
 [3 4 5]
 [6 7 0]]

RGB Image:
 [[[255   0   0]
  [  0 255   0]
  [  0   0 255]]

 [[255 255   0]
  [  0 255 255]
  [255   0 255]]

 [[192 192 192]
  [  0   0   0]
  [255   0   0]]]

结果解释:

  • 图像的每个像素值都被映射到查找表中的 RGB 值。
  • 对于 image 中的 0,查找表中的对应行是 [255, 0, 0](红色)。
  • 对于 image 中的 1,查找表中的对应行是 [0, 255, 0](绿色)。
  • 依此类推,直到所有像素都被映射到相应的 RGB 颜色。

通过这种方式,可以将图像的像素值(比如灰度图像或标签图像)转换为对应的 RGB 图像,这在许多图像处理应用中非常常见。

posted @ 2024-12-20 22:05  Gold_stein  阅读(54)  评论(0)    收藏  举报