Benutzer-Werkzeuge

Webseiten-Werkzeuge


bilder_rotieren

Dies ist eine alte Version des Dokuments!


Bilder Rotieren

Dieser Abschnitt zeigt wie sich Bilder um einen beliebigen Winkel φ (sprich PHI) rotieren lassen. Rotation (lat. rotatio: Drehung)

Dieser Abschnitt ist noch nicht komplett fertiggestellt.

Grad- und Bogenmaß

Wenn Bilder um einen Winkel $\varphi$ gedreht (rotiert) werden sollen, muss beachtet werden, dass das rotierte Bild eventuell größer als das originale Bild werden kann.

FIXMEFIXME
Das originale Bild ist hier Quadratisch FIXME.Das Bild wurde um 45° Grad gegen den Uhrzeigersinn gedreht.Damit das komplette Bild sichtbar ist muss es jetzt FIXME groß sein.
  • Wenn Bilder gedreht werden, ist das Drehzentrum in der Regel der Mittelpunkt des Bildes
  • Der wichtigste Parameter bei der Rotation ist der Drehwinkel $\varphi$. Die Drehung erfolgt gegen den Uhrzeigersinn
  • In Java (i.a. in allen Programmiersprachen) werden die Drehwinkel nicht in Grad, sondern in Rad angegeben. Es gilt 360° = 2 $\pi$ rad. Winkel werden also nicht im Gradmaß, sondern im Bogenmaß verwendet.

Für die Umrechnung vom Gradmaß in das Bogenmaß gilt die Beziehung: \begin{equation} \frac{360° }{\text{Winkel im Gradmaß}} == \frac{2 \pi}{\text{Winkel im Bogenmaß}} \end{equation}

Die Transformationsgleichung für die Rotation

Bei der Rotation wird jeder Bildpunkt P(x|y) des Originalbildes in einen neuen Bildpunkt P´(x|y) überführt.

  • mit altem Bildpunkt P( $p_x$ | $p_y$ ) bezeichnen wir die Bildpunkte des originalen Bildes.
  • mit neuem Bildpunkt P' ( $p\prime_x$ | $p\prime_y$ ) werden die transformierten Bildpunkte bezeichnet (P´ lies P Strich).

Gesucht ist eine Transformation, die ausgehend von dem alten Bildpunkt, sowie dem gewünschen Drehwinkel, einen neuen Bildpunkt berechnet.

\begin{equation} \left(\begin{array}{}p\prime_x\\p\prime_y\end{array}\right) = R(\varphi)\cdot \left(\begin{array}{}p_x\\p_y\end{array}\right) \end{equation}

  • in Wortenneuer Bildpunkt = Transformation $R(\varphi)$ · alter Bildpunkt
  • $R(\varphi)$ ist die sogenannte Transformationsmatrix um den Winkel $\varphi$

Transformationsgleichungen

Wir werden an dieser Stelle die Transformation gleich angeben und anschließend an einem Beispiel zeigen, wie man mit ihr arbeitet. Eine Herleitung dieser Gleichungen ist weiter unten angegeben. Die gesuchten Transformationsgleichungen sind:

\begin{equation} \color{blue}{p\prime_x} = cos(\varphi)\cdot \color{red}{p_x} - sin(\varphi) \cdot \color{red}{p_y} \\ \color{blue}{p\prime_y} = sin(\varphi)\cdot \color{red}{p_x} + cos(\varphi) \cdot \color{red}{p_y} \end{equation}

Beispiel

Aufgabe:
Wie lauten die Koordinaten des neuen Bildpunktes bei einer Drehung um 40°, wenn der alte Bildpunkt P(10,30) ist?
Lösung:
Für den Sinus und Cosinus ergibt sich:

  • sin(40°)=0,643
  • cos(40°)=0.766

Eingesetzt in die Transformationsformeln ergibt sich:

  • px´ = 0.766·10 - 0,643·30 = -11,63
  • py´ = 0,643·10 + 0,766·30 = 29,41

Die neuen Koordinaten sind damit P´( -11,63 | 29,41 ).

Java Methode zum Rotieren

Die folgende Java Methode benutzt die Java Klasse Point, um die Transformation zu berechnen.

public Point rotation(Point point, double angle){
 
      Point result = new Point();
 
      double c = Math.cos(angle);
      double s = Math.sin(angle);
 
      result.x = c*point.x - s*point.y;
      result.y = s*point.x + c*point.y;
 
      return result;
}
FIXMEFIXME
Orginal.Das um FIXME Grad gedrehte Bild.

Grundprinzip zum Rotieren von Bildern

fromScreen ↔ toScreen

Um Bilder zu rotieren, müssen grundsätzlich folgende Schritte abgearbeitet werden. Wir gehen hier davon aus, dass das Bild um seine Bildmitte rotiert werden soll.

  1. Vom zu rotierenden Bild $\text{Bild}_{\text{ALT}}$ werden die Größe (Breite und Höhe) ermittelt.
  2. Ein leeres Bild $\text{Bild}_{\text{NEU}}$ wird erzeugt.
    • Die neue Größe kann aus der alten Größe ermittelt werden!
  3. für jeden Bildpunkt des zu rotierenden Bildes $\text{Bild}_{\text{ALT}}$ gilt nun:
    • fromScreen Die Bildkoordinaten werden in kartesische Koordinaten umgerechnet.
    • Die kartesischen Koordinaten werden mithilfe der Transformationsformel um einen gegebenen Winkel rotiert.
    • toScreen Die rotierten kartesischen Koordinaten werden wieder in Bildkoordinaten umgerechnet.
    • Die so berechneten Bildkoordinaten werden im $\text{Bild}_{\text{NEU}}$ gespeichert.
Hierbei ist zu beachten, dass Bildkoordinaten integer Werte sind und die Transformation in der Regel double Werte ergibt. Grundsätzlich sollte man immer mit double rechnen. Nur beim Lesen der Bildkoordinaten und beim Schreiben in Bildkoordinaten müssen integer Werte verwendet werden.

fromScreen

BildkoordinatenfromScreenkartesische Koordinaten

Mit fromScreen bezeichnen wir eine Java-Methode, die Bildkoordinaten in (mathematisch) kartesische Koordinaten transformiert.

  • Kartesische Koordinaten, sind in der Regel vorzeichenbehaftete double Werte.
    • häufig ist der Koordinatenursprung in der Mitte des Bildes überaus zweckmäßig.

toScreen

kartesische Koordinaten toScreen Bildkoordinaten

Mit toScreen bezeichnen wir eine Java-Methode, die (mathematisch) kartesische Koordinaten in Bildkoordinaten transformiert.

  • Bildkoordinaten haben ihren Ursprung (0|) oben links und besitzen nur positive integer Werte

Herleitung der Transformationsgleichung:

Angewandte Informatik ist geschlossen

  Office Pakete (Textverarbeitung, Tabellenkalkulation und Präsentation)
      Office Anwendungen
      Datenbanken
  Bildverarbeitung
      Bildverarbeitung
  MSR (Messen Steuern Regeln) und Robotik
      Hardware-Überlebensregeln
      Lego Roboter (leJOS)
          Beispiele der LEJOS Bibliothek
          Ein neuronales Netz für den NXT Roboter
      Mikrocontroller IO-Warrior
      Android Programmierung
      Raspberry Pi
  Softcomputing/ Künstliche Intelligenz & Komplexe Systeme
      IFS - Iterierte Funktionensysteme
      Sierpinski-Dreieck
      ..Neuronale Netze
          Was sind neuronale Netze?
          Hopfield-Netze
              Grundlagen zu Hopfield-Netzen
              Hopfield-Netz in Aktion

Praktische Informatik ist geschlossen

  Java
      Java Grundlagen
      Java Applet
      Java & Datenbanken
      Java & Bildverarbeitung
  Hardware & Betriebssysteme
      Funktionsprinzip des Computers
      Betriebssystemarchitektur
  Linux
      Linux Essentials
      Linux - Grundlagen - Konsole

Technische Informatik ist geschlossen Theoretische Informatik ist geschlossen Fächerübergeifender Unterricht ist geschlossen

  Physik
  Biologie

Aufgaben & Tests ist geschlossen

  Aufgaben & Tests

Login Form

Benutzername

Passwort

Angemeldet bleiben

  Passwort vergessen?
  Benutzername vergessen?

Bilder Rotieren

    	Dieser Abschnitt zeigt wie sich Bilder um einen beliebigen Winkel φ (sprich PHI) rotieren lassen.
  Rotation (lat. rotatio: Drehung)

Wenn Bilder um einen Winkel φ gedreht (rotiert) werden sollen, muss beachtet werden, dass das rotierte Bild eventuell größer als das orginale Bild werden kann.

orginal todo gedrehtes Bild todo Das orginale Bild ist hier Quadratisch todoxtodo. Das Bild wurde um 45° Grad gegen den Uhrzeigersinn gedreht. Damit das komplete Bild sichtbar ist muss es jetzt todoxtodo groß sein.

  Wenn Bilder gedreht werden, ist das Drehzentrum in der Regel der Mittelpunkt des Bildes
  Der wichtgste Parameter bei der Rotation ist der Drehwinkel φ. Die Drehung erfolgt gegen den Uhrzeigersinn
  In Java werden die Drehwinkel nicht in Grad, sondern in Rad angegeben. Es gilt 360° = 2 Π rad. Winkel werden also nicht im Gradmaß, sondern im Bogenmaß verwendet.

Für die Umrechnung vom Gradmaß in das Bogenmaß gilt die Beziehung:

Die Transformationsgleichung für die Rotation

Bei der Rotation wird jeder Bildpunkt P(x|y) des Orginalbildes in einen neuen Bildpunkt P´(x|y) überführt.

  mit altem Bildpunkt P( px | py ) bezeichnen wir die Bildpunkte des orginalen Bildes.
  mit neuem Bildpunkt P' ( p´x | p´y ) werden die transformierten Bildpunkte bezeichnet (P´ lies P Strich).

Gesucht ist eine Transformation, die ausgehend von dem alten Bildpunkt, sowie dem gewünschen Drehwinkel, einen neuen Bildpunkt berechnet.

neuer Bildpunkt = Transformation R(φ) · alter Bildpunkt

  R(φ) ist die sogennante Transformationsmatrix um den Winkel φ

Wir werden an dieser Stelle die Transformation gleich angeben und zeigen, wie man mit ihr arbeitet. Eine Herleitung dieser Gleichungen ist weiter unten angegeben. Die gesuchten Transformationgleichungen sind:

p´x = cos(φ) · px - sin(φ) · py

p´y = sin(φ) · px + cos(φ) · py

Wie lauten die Koordinaten des neuen Bildpunktes bei einer Drehung um 40°, wenn der alte Bildpunkt P(10,30) ist?

Für den Sinus und Cosinus ergibt sich:

sin(40°)=0,643

cos(40°)=0.766

Eingesetzt in die Transformationsformeln ergibt sich:

px´ = 0.766·10 - 0,643·30 = -11,63

py´ = 0,643·10 + 0,766·30 = 29,41

Die neuen Koordinaten sind damit P´( -11,63 | 29,41 ).

Die folgende Java Methode benutzt die Java Klasse Point, um die Transformation zu berechnen.

1 2 3 4 5 6 7 8 9 10 11 12

public Point rotation(Point point, double angle){

Point result = new Point();

double c = Math.cos(angle);

    double s = Math.sin(angle);

result.x = c*point.x - s*point.y;

    result.y = s*point.x + c*point.y;

return result; }

orginal bild rotiertes bild Orginal. Das um xx Grad gedrehte Bild.

Herleitung der Transformationsgleichung:

Wir leiten jetzt die im vorherigen Abschnitt angegeben Transformationsgleichungen her. Voraussetzungen

Damit die Herleitung nachvollzogen werden kann, werden lediglich die Additionstheoreme für Sinus und Kosinus benötigt. Sie lauten:

cos(φ + α ) = cos(φ)·cos(α) - sin(φ)·sin(α)

sin(φ + α ) = sin(φ)·cos(α) + cos(φ)·sin(α)

Eine einfache Herleitung dieser Formel kann mit Hilfe der komplexen Zahlen (Eulerformel) erfolgen. Für unsere Zwecke ist es ausreichend, sie in das Gedächtnis gerufen zu haben.

Herleitung

bilder_rotieren.1705749831.txt.gz · Zuletzt geändert: 2024/01/20 11:23 von torsten.roehl