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

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

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, а также интерпретацию результатов.