Введение
В этом практическом занятии показано, как использовать Matplotlib для выполнения аффинного преобразования изображения. Аффинные преобразования изменяют форму и ориентацию изображения. В этом практическом занятии показано, как использовать функцию transforms.Affine2D для манипулирования формой и ориентацией изображения.
Советы по использованию ВМ
После запуска ВМ нажмите в левом верхнем углу, чтобы переключиться на вкладку Ноутбук и получить доступ к Jupyter Notebook для практики.
Иногда вам может потребоваться подождать несколько секунд, пока Jupyter Notebook не загрузится полностью. Валидация операций не может быть автоматизирована из-за ограничений Jupyter Notebook.
Если вы сталкиваетесь с проблемами во время обучения, не стесняйтесь обращаться к Labby. Оставьте отзыв после занятия, и мы оперативно решим проблему для вас.
Импортируем библиотеки и определяем изображение
В первом шаге мы импортируем необходимые библиотеки и определяем изображение, которое будет использоваться в примере. Изображение представляет собой комбинацию двух гауссовых функций.
import matplotlib.pyplot as plt
import numpy as np
import matplotlib.transforms as mtransforms
def get_image():
delta = 0.25
x = y = np.arange(-3.0, 3.0, delta)
X, Y = np.meshgrid(x, y)
Z1 = np.exp(-X**2 - Y**2)
Z2 = np.exp(-(X - 1)**2 - (Y - 1)**2)
Z = (Z1 - Z2)
return Z
Создаем функцию для отображения изображения
В этом шаге мы определяем функцию, которая принимает на вход изображение, ось для отображения и преобразование. Функция отображает изображение на оси для отображения с указанным преобразованием. Функция также отображает желтый прямоугольник вокруг изображения, чтобы показать предполагаемый диапазон изображения.
def do_plot(ax, Z, transform):
im = ax.imshow(Z, interpolation='none',
origin='lower',
extent=[-2, 4, -3, 2], clip_on=True)
trans_data = transform + ax.transData
im.set_transform(trans_data)
## display intended extent of the image
x1, x2, y1, y2 = im.get_extent()
ax.plot([x1, x2, x2, x1, x1], [y1, y1, y2, y2, y1], "y--",
transform=trans_data)
ax.set_xlim(-5, 5)
ax.set_ylim(-4, 4)
Выполняем вращение изображения
В этом шаге мы выполняем вращение изображения с использованием функции rotate_deg. Мы передаем угол вращения в качестве входных данных в функцию rotate_deg. Мы используем функцию do_plot для отображения вращенного изображения.
## prepare image and figure
fig, ax1 = plt.subplots()
Z = get_image()
## image rotation
do_plot(ax1, Z, mtransforms.Affine2D().rotate_deg(30))
Выполняем сдвиг изображения
В этом шаге мы выполняем сдвиг изображения с использованием функции skew_deg. Мы передаем углы сдвига в качестве входных данных в функцию skew_deg. Мы используем функцию do_plot для отображения сдвинутого изображения.
## prepare image and figure
fig, ax2 = plt.subplots()
Z = get_image()
## image skew
do_plot(ax2, Z, mtransforms.Affine2D().skew_deg(30, 15))
Выполняем масштабирование и отражение изображения
В этом шаге мы выполняем масштабирование и отражение изображения с использованием функции scale. Мы передаем коэффициенты масштабирования и отражения в качестве входных данных в функцию scale. Мы используем функцию do_plot для отображения масштабированного и отраженного изображения.
## prepare image and figure
fig, ax3 = plt.subplots()
Z = get_image()
## scale and reflection
do_plot(ax3, Z, mtransforms.Affine2D().scale(-1,.5))
Выполняем несколько преобразований
В этом шаге мы выполняем несколько преобразований изображения с использованием функций rotate_deg, skew_deg, scale и translate. Мы передаем параметры преобразования в качестве входных данных в соответствующие функции. Мы используем функцию do_plot для отображения преобразованного изображения.
## prepare image and figure
fig, ax4 = plt.subplots()
Z = get_image()
## everything and a translation
do_plot(ax4, Z, mtransforms.Affine2D().
rotate_deg(30).skew_deg(30, 15).scale(-1,.5).translate(.5, -1))
Резюме
В этом лабе показано, как использовать Matplotlib для выполнения аффинного преобразования изображения. Мы использовали функцию transforms.Affine2D для манипуляции с формой и ориентацией изображения. Мы выполнили вращение, сдвиг, масштабирование, отражение и несколько преобразований изображения. Мы также отобразили преобразованное изображение на оси графика с заданным размером изображения.