Построение неравномерных изображений с использованием Matplotlib

Beginner

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

Введение

Этот лаба предоставляет пошаговое руководство по использованию класса NonUniformImage из библиотеки Matplotlib для Python. NonUniformImage позволяет пользователям рисовать изображения с неравномерными позициями пикселей.

Советы по ВМ

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

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

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

Импорт библиотек

Прежде чем создать NonUniformImage, нам нужно импортировать необходимые библиотеки. В этом примере мы будем использовать numpy и matplotlib.

import matplotlib.pyplot as plt
import numpy as np

from matplotlib import cm
from matplotlib.image import NonUniformImage

Создание линейных и нелинейных массивов

Нам нужно создать два массива, один с линейными значениями, а другой с нелинейными значениями. Эти массивы будут использоваться для создания нашего NonUniformImage.

## Линейный массив x для центров ячеек:
x = np.linspace(-4, 4, 9)

## Высоко нелинейный массив x:
x2 = x**3

y = np.linspace(-4, 4, 9)

z = np.sqrt(x[np.newaxis, :]**2 + y[:, np.newaxis]**2)

Создание подграфиков и NonUniformImage

Теперь мы создаем подграфики и добавляем в каждый из них NonUniformImage. Мы создадим четыре подграфика, два с интерполяцией 'nearest' и два с интерполяцией 'bilinear'. Аргумент ключевого слова interpolation определяет тип интерполяции, используемый для отображения изображения.

## Создание подграфиков
fig, axs = plt.subplots(nrows=2, ncols=2, layout='constrained')
fig.suptitle('NonUniformImage class', fontsize='large')

## Интерполяция nearest
ax = axs[0, 0]
im = NonUniformImage(ax, interpolation='nearest', extent=(-4, 4, -4, 4), cmap=cm.Purples)
im.set_data(x, y, z)
ax.add_image(im)
ax.set_xlim(-4, 4)
ax.set_ylim(-4, 4)
ax.set_title('nearest')

ax = axs[0, 1]
im = NonUniformImage(ax, interpolation='nearest', extent=(-64, 64, -4, 4), cmap=cm.Purples)
im.set_data(x2, y, z)
ax.add_image(im)
ax.set_xlim(-64, 64)
ax.set_ylim(-4, 4)
ax.set_title('nearest')

## Интерполяция bilinear
ax = axs[1, 0]
im = NonUniformImage(ax, interpolation='bilinear', extent=(-4, 4, -4, 4), cmap=cm.Purples)
im.set_data(x, y, z)
ax.add_image(im)
ax.set_xlim(-4, 4)
ax.set_ylim(-4, 4)
ax.set_title('bilinear')

ax = axs[1, 1]
im = NonUniformImage(ax, interpolation='bilinear', extent=(-64, 64, -4, 4), cmap=cm.Purples)
im.set_data(x2, y, z)
ax.add_image(im)
ax.set_xlim(-64, 64)
ax.set_ylim(-4, 4)
ax.set_title('bilinear')

plt.show()

Интерпретация результатов

Подграфики будут отображать два разных типа интерполяции: 'nearest' и 'bilinear'. Интерполяция 'nearest' будет отображать значение пикселя ближайшего соседа, в то время как интерполяция 'bilinear' будет отображать взвешенное среднее значение четырех ближайших соседей.

Резюме

NonUniformImage - это полезный инструмент для построения изображений с неравномерными позициями пикселей. В этом практическом занятии был представлен пошаговый гайд по использованию NonUniformImage в библиотеке Matplotlib для Python, включая импорт необходимых библиотек, создание линейных и нелинейных массивов, создание подграфиков и NonUniformImage, а также интерпретацию результатов.