Визуализация каналов RGB в Matplotlib

PythonPythonBeginner
Практиковаться сейчас

This tutorial is from open-source community. Access the source code

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

Matplotlib - популярная библиотека визуализации данных в Python. Она предоставляет различные инструменты для построения графиков, включая возможности построения 2D и 3D графиков. В этом руководстве мы будем использовать модуль RGBAxes из набора инструментов AxesGrid в Matplotlib для отображения RGB-каналов.

Советы по работе с ВМ

После запуска ВМ нажмите в левом верхнем углу, чтобы переключиться на вкладку Notebook и получить доступ к Jupyter Notebook для практики.

Иногда вам может потребоваться подождать несколько секунд, пока Jupyter Notebook не загрузится полностью. Валидация операций не может быть автоматизирована из-за ограничений Jupyter Notebook.

Если вы сталкиваетесь с проблемами во время обучения, не стесняйтесь обращаться к Labby. Оставьте отзыв после занятия, и мы оперативно решим проблему для вас.

Импортируем необходимые библиотеки

В этом шаге мы импортируем необходимые библиотеки: numpy, matplotlib.pyplot и mpl_toolkits.axes_grid1.axes_rgb.

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1.axes_rgb import RGBAxes, make_rgb_axes

Определяем функцию для получения RGB-каналов

В этом шаге мы определим функцию get_rgb(), которая будет получать каналы R, G и B изображения. В этом примере мы будем использовать функцию get_sample_data() из модуля cbook для получения образца изображения.

import matplotlib.cbook as cbook

def get_rgb():
    ## Получаем образец изображения
    Z = cbook.get_sample_data("axes_grid/bivariate_normal.npy")
    Z[Z < 0] = 0.
    Z = Z / Z.max()

    ## Получаем каналы R, G и B
    R = Z[:13, :13]
    G = Z[2:, 2:]
    B = Z[:13, 2:]

    return R, G, B

Определяем функцию для создания RGB-куба

В этом шаге мы определим функцию make_cube(), которая будет создавать RGB-куб из каналов R, G и B, полученных на предыдущем шаге. Функция вернет кубы R, G и B, а также RGB-изображение.

def make_cube(r, g, b):
    ## Получаем размерность R
    ny, nx = r.shape

    ## Создаем кубы R, G и B
    R = np.zeros((ny, nx, 3))
    R[:, :, 0] = r
    G = np.zeros_like(R)
    G[:, :, 1] = g
    B = np.zeros_like(R)
    B[:, :, 2] = b

    ## Объединяем кубы R, G и B для создания RGB-изображения
    RGB = R + G + B

    return R, G, B, RGB

Создаем график с использованием RGBAxes

В этом шаге мы создадим график с использованием класса RGBAxes. Мы будем использовать метод imshow_rgb() объекта RGBAxes для отображения RGB-изображения.

def demo_rgb1():
    ## Создаем фигуру и объект RGBAxes
    fig = plt.figure()
    ax = RGBAxes(fig, [0.1, 0.1, 0.8, 0.8], pad=0.0)

    ## Получаем каналы R, G и B
    r, g, b = get_rgb()

    ## Отображаем RGB-изображение с использованием метода imshow_rgb()
    ax.imshow_rgb(r, g, b)

Создаем график RGBAxes с отдельными каналами

В этом шаге мы создадим график RGBAxes с отдельными каналами с использованием функции make_rgb_axes(). Мы будем использовать метод imshow() объектов Axes для отображения каналов R, G и B.

def demo_rgb2():
    ## Создаем фигуру и объект Axes
    fig, ax = plt.subplots()

    ## Создаем объекты Axes для каналов R, G и B с использованием функции make_rgb_axes()
    ax_r, ax_g, ax_b = make_rgb_axes(ax, pad=0.02)

    ## Получаем каналы R, G и B и создаем RGB-куб
    r, g, b = get_rgb()
    im_r, im_g, im_b, im_rgb = make_cube(r, g, b)

    ## Отображаем RGB-изображение и каналы R, G и B
    ax.imshow(im_rgb)
    ax_r.imshow(im_r)
    ax_g.imshow(im_g)
    ax_b.imshow(im_b)

    ## Задаем параметры делений и цвета рамок для всех объектов Axes
    for ax in fig.axes:
        ax.tick_params(direction='in', color='w')
        ax.spines[:].set_color("w")

Отображаем графики

В этом шаге мы вызовем функции demo_rgb1() и demo_rgb2() для создания графиков и отобразим их с использованием функции plt.show().

demo_rgb1()
demo_rgb2()

plt.show()

Резюме

В этом уроке мы узнали, как использовать модуль RGBAxes из набора инструментов AxesGrid в Matplotlib для отображения каналов RGB. Мы рассмотрели следующие шаги:

  1. Импортировать необходимые библиотеки
  2. Определить функцию для получения каналов RGB
  3. Определить функцию для создания RGB-куба
  4. Создать график с использованием RGBAxes
  5. Создать график RGBAxes с отдельными каналами
  6. Отобразить графики.