Matplotlib affine Transformation

PythonPythonBeginner
Jetzt üben

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

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

In diesem Lab wird gezeigt, wie man Matplotlib verwendet, um eine affine Transformation eines Bildes durchzuführen. Affine Transformationen verändern die Form und die Orientierung eines Bildes. In diesem Lab wird gezeigt, wie man die Funktion transforms.Affine2D verwendet, um die Form und die Orientierung eines Bildes zu manipulieren.

Tipps für die VM

Nachdem der Start der VM abgeschlossen ist, klicken Sie in der oberen linken Ecke, um zur Registerkarte Notebook zu wechseln und Jupyter Notebook für die Übung zu nutzen.

Manchmal müssen Sie einige Sekunden warten, bis Jupyter Notebook vollständig geladen ist. Die Validierung von Vorgängen kann aufgrund von Einschränkungen in Jupyter Notebook nicht automatisiert werden.

Wenn Sie bei der Lernphase Probleme haben, können Sie Labby gerne fragen. Geben Sie nach der Sitzung Feedback, und wir werden das Problem für Sie prompt beheben.

Bibliotheken importieren und das Bild definieren

Im ersten Schritt importieren wir die erforderlichen Bibliotheken und definieren das Bild, das im Beispiel verwendet werden soll. Das Bild ist eine Kombination aus zwei Gaußschen Funktionen.

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

Funktion zum Zeichnen des Bildes erstellen

In diesem Schritt definieren wir eine Funktion, die das Bild, die Zeichnungsachse und die Transformation als Eingaben nimmt. Die Funktion zeigt das Bild auf der Zeichnungsachse mit der angegebenen Transformation an. Die Funktion zeigt auch ein gelbes Rechteck um das Bild an, um den beabsichtigten Bereich des Bildes anzuzeigen.

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)

Bildrotation durchführen

In diesem Schritt führen wir eine Rotation des Bildes mit der Funktion rotate_deg durch. Wir übergeben den Rotationswinkel als Eingabe an die Funktion rotate_deg. Wir verwenden die Funktion do_plot, um das rotierte Bild anzuzeigen.

## prepare image and figure
fig, ax1 = plt.subplots()
Z = get_image()

## image rotation
do_plot(ax1, Z, mtransforms.Affine2D().rotate_deg(30))

Bildverzerrung durchführen

In diesem Schritt führen wir eine Verzerrung des Bildes mit der Funktion skew_deg durch. Wir übergeben die Verzerrungswinkel als Eingaben an die Funktion skew_deg. Wir verwenden die Funktion do_plot, um das verzerrte Bild anzuzeigen.

## prepare image and figure
fig, ax2 = plt.subplots()
Z = get_image()

## image skew
do_plot(ax2, Z, mtransforms.Affine2D().skew_deg(30, 15))

Bild skalieren und spiegeln

In diesem Schritt führen wir eine Skalierung und Spiegelung des Bildes mit der Funktion scale durch. Wir übergeben die Skalierungs- und Spiegelungsfaktoren als Eingaben an die Funktion scale. Wir verwenden die Funktion do_plot, um das skalierte und gespiegelte Bild anzuzeigen.

## prepare image and figure
fig, ax3 = plt.subplots()
Z = get_image()

## scale and reflection
do_plot(ax3, Z, mtransforms.Affine2D().scale(-1,.5))

Mehrere Transformationen durchführen

In diesem Schritt führen wir mehrere Transformationen des Bildes mit den Funktionen rotate_deg, skew_deg, scale und translate durch. Wir übergeben die Transformationsparameter als Eingaben an die jeweiligen Funktionen. Wir verwenden die Funktion do_plot, um das transformierte Bild anzuzeigen.

## 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))

Zusammenfassung

In diesem Lab wurde gezeigt, wie man Matplotlib verwendet, um eine affine Transformation eines Bildes durchzuführen. Wir haben die Funktion transforms.Affine2D verwendet, um die Form und die Orientierung eines Bildes zu manipulieren. Wir haben Rotation, Verzerrung, Skalierung, Spiegelung und mehrere Transformationen des Bildes durchgeführt. Wir haben das transformierte Bild auch auf einer Diagrammachse mit der beabsichtigten Ausdehnung des Bildes angezeigt.