Разница между размером и каналом - PullRequest
1 голос
/ 29 октября 2019

У меня есть изображение, хранящееся в виде массива:

image = np.array([
    [[ 11,  12],
     [ 13,  14],
     [ 15,  16]],
    [[ 21,  22],
     [ 23,  24],
     [ 25,  26]],
    [[ 31,  32],
     [ 33,  34],
     [ 35,  36]]])

Я печатаю форму и размеры:

>>> print('image shape', image.shape, 'image dimensions', image.ndim)
image shape (3, 3, 2) image dimensions 3

Я понимаю, что матрица имеет 3 высоты, 3 изШирина и 2 цветовых канала (?)

Но .... если размерность матрицы равна 3 .. В чем разница между размерностью и цветовым каналом?

1 Ответ

1 голос
/ 29 октября 2019

Свойства массива shape и ndim. Форма - это размер массива в каждом измерении. image.ndim - это просто сокращение для len(image.shape). Другое связанное количество - image.size, что составляет np.prod(image.shape). В numpy размеры называются «осями» и начинаются с нуля. Таким образом, первый индекс в массиве соответствует оси 0, второй - оси 1 и т. Д.

Какое измерение является "каналом", полностью зависит от интерпретации. Как правило, это будет последнее измерение, но я также видел его как первое. В более общем смысле измерения обычно соответствуют некоторым полезным координатам в вашем массиве. Помните, что не все массивы являются изображениями. Данные могут быть абсолютно произвольными и будут основаны на вашем сценарии использования.

Ваш пример немного сбивает с толку, поскольку image.ndim == image.shape[0] == image.shape[1]. Вот пример массива, содержащего несколько RGB-изображений одинакового размера:

images = np.random.randint(255, size=(5, 7, 7, 3), dtype=np.uint8)

Мы можем интерпретировать ось 0 как индекс изображения, ось 1 как ширину, ось 2 как высота и ось 3 как цветовой канал. В этом случае у нас есть пять изображений размером 7х7, по три цветовых канала в каждом. Если каналы R, G, B, то images[3, 0, 0, 2] - это синий компонент верхнего левого пикселя в четвертом изображении.

...