Transformation

21
Transformation Grafische Bildverarbeitung Vortrag: Kenny Schlör 29.11.1999

description

Transformation. Grafische Bildverarbeitung Vortrag: Kenny Schlör 29.11.1999. Theorie:Einführung in die zwei- und drei-dimensionalen Transformation.. Transformation ist ein Teilgebiet in der linearen Algbra. Siehe LAII. - PowerPoint PPT Presentation

Transcript of Transformation

Page 1: Transformation

Transformation

Grafische Bildverarbeitung

Vortrag: Kenny Schlör

29.11.1999

Page 2: Transformation

Theorie:Einführung in die zwei- und drei-dimensionalen Transformation. Transformation ist ein Teilgebiet in der linearen Algbra.

Siehe LAII.

Die Transformationen kommen direkt in Anwendungsprogrammen und innerhalb vieler Graphikpakete zum Einsatz.Eine Applikation zur Stadtplanung würde mit einer Translation die Symbole für Gebäude und Bäume an die richtigen Stellen bringen ,die Symbole mit einer Rotation ausrichten und sie durch Skalierung auf die richtige Größe bringen.Im allgemeinen benutzen viele Applikationen die geometrische Transformation,um Position,Orientierung und Größe von Objekten in einer Zeichnung zu ändern.

Page 3: Transformation

Formen der Transformationen in Graphikpaketen:

Translation(Verschiebung):– Punkte werden mittels der Translation in einer Ebene (zweidimensionale

Transformation) mittels eines gewünschten Betrages der Verschiebungen zu den Koordinaten addiert.

– Ein Punkt beispielsweise P(x,y) wird um dx Einheiten parallel zur X-Achse und um dy Einheiten parallel zur Y-Achse auf den neuen Punkt P‘(x‘,y‘)verschoben.x‘= x+ dx , y‘= y + dy

P‘= P + T

– Um eine Linie zu verschieben brauchen wir nur die Endpunkte zu verschieben.Dies gilt auch für die Skalierung(Vergrößerung oder Verkleinerung) und Drehung.

Page 4: Transformation

Formen der Transformationen in Graphikpaketen

Skalieren (dehnen oder strecken): Es gibt zwei

Skalierungsarten:– die uniforme oder gleichmäßige Skalierung,wo die

Skalierungsfaktoren gleich sind,also sx = sy.Die Proportionen bleiben beim Objekt erhalten.

– Skalierung mit unterschiedliche Skalierungsfaktoren sx sy

x‘= sx * x ,y‘=sy * y

Page 5: Transformation

Formen der Transformationen in Graphikpaketen

Drehung: Punkte können um einen Winkel 0 um den Ursprung gedreht werden(Rotation). Einen Drehung wird mathematisch definiert durch die Gleichungen

x‘ = x* cos q -y*sin q, y‘ = x* sin q + y * cos q oder P‘ = R * P, wobei R die Drehungsmatrix in Matrixgleichung

ist.Wie die Skalierung bezieht sich auch die Drehung auf den Ursprung.

Positive Winkel werden gegen den Uhrzeigersinn von x nach y gemessen.Für negative Winkel(Also im Uhrzeigersinn) können wir die Gleichungen mit Hilfe der Identitäten cos(-q)=cos q und sin(-q)=-sinq umschreiben.

Page 6: Transformation

Formen der Transformationen in Graphikpaketen

Wir können bei einer Überführung von P(x,y) um Winkel p in den Punkt P‘(x‘,y‘) leicht ableiten. Da wir um den Ursprung drehen, sind die Abstände von P und P‘ zum Ursprung gleich.

x= r*cos p, y= r* sin pund

x‘=r*cos(p +q)=r *cos q *cos p - r*sin q*sin p y‘=r*sin (p +q)=r* cos q*sin p + r*sin q*cos p

Page 7: Transformation

Homogene Koordinaten und Matrizen-darstellung von 2D-Transformationen

Die Translation wird im vergleich zu Skalierung und Rotation auf eine andere Weise dargestellt.Man strebt zu einer einheitlichen Behandlung aller Transformationen,damit sie leichter kombiniert werden können.

Dafür werden die Punkte in homogene Koordinaten ausgedrückt.Die Transformationen können über die Multiplikation behandelt werden.

Homogene Koordinaten wurden zuerst in der Geometrie dargestellt und dann später auf die Graphik angewandt.

Jeder Punkt bekommt eine dritte Koordinate.P(x,y,W) [ein Tripel]

Page 8: Transformation

Homogene Koordinaten und Matrizen-darstellung von 2D-Transformationen

Homogene Punkte (x,y,W) und (x‘,y‘,w‘) sind genau dann gleich, wenn der eine Punkt das Vielfache des anderen ist.

Ein Punkt hat daher viele Verschieden Darstellungen in homogenen Koordinaten.Sie stehen für Punkte im zweidimensionalen Raum.

Eine der Koordinaten muss ungleich null sein.(0,0,0) ist nicht gültig.

Wenn W ungleich null ist , so wird durch W normalerweise dividiert.

Die Zahlen x/W und y/W sind die kartesischen Koordinaten des homogenen Punktes.

Die Punkte mit W = 0 heissen Punkte im Unendlichen.

Page 9: Transformation

Homogene Koordinaten und Matrizen-darstellung von 2D-Transformationen

Mit der Form (tx,ty,tW) mit t 0 erhalten Wir eine Gerade im 3D-Raum, daher steht jeder homogene Punkt für eine Gerade .

Homogenisieren wir den Punkt(Division durch W) erhalten wir (x,y,1).Dieser Punkt bildet eine Ebene mit W=1 im (x,y,W)-System.

Punkte im unendlichen werden auf dieser Ebene nicht dargestellt.

Die Punkte sind jetzt also dreielementige Spaltenvektoren. Die Transformationsmatrizen ,die bei der Multiplikation mit einem Punktvektor einen anderen Punktvektor liefern, haben die Grösse einer 3x3-Matrix.

Page 10: Transformation

Konventionen & Transformationsmatrizen

Um Zeilenvektoren von links an die Matrix zu und Spaltenvektoren von rechts zu an die Matrix zu multiplizieren werden die Matrizen transponiert.

(P*M)T = MT * PT

oder P‘=(T(dx,dy) *P Translation:Wenn ein Punkt P mit der Translationsmatrix

T(dx1,dy1) nach P‘ verschoben wird und anschliessend mit T(dx2,dy2) setzt sich das Matrizenprodukt als Komposition additiv zusammen.

Aufeinander folgende Skalierung sind multiplikativ. Aufeinander folgende Rotation sind additiv.

Page 11: Transformation

Betrachtung der linken oberen 2x2-Teilmatrixbei der Rotation

Jede der beiden Zeilen werden asl Vektor drei Eigenschaften zugewiesen.– 1. Beide sind Einheitsvektoren.– 2. Die beiden Vektoren stehen senkrecht aufeinander.– 3. Rotiert man die beiden Vektoren um R(P), so kommen sie

auf die positive x- bzw y-Achse zu liegen(zusammen mit den Eigenschaften 1 und 2 ist dies äquivalent dazu, dass die Determinate der Teilmatrix den Wert 1 hat).

Eine Matrix mit diesen Eigenschaften nennt man spezielle orthogonale Matrix.

Page 12: Transformation

Ähnlichkeitstransformationen und affineTransformationen

Diese Matrix erhält Längen und Winkel,sie werden Ähnlichkeitstransformationen genannt,da sie das Transformierte Objekt nicht verzerren.

Durch eine beliebige Folge von Rotations- und Transformations-matrizen entsteht eine Matrix dieser Form:

[Platz für die Matrix:siehe Tafel!!] Ein Produkt einer beliebigen Folge von Rotations-,Translations-

und Skalierungsmatrizen liefert eine affine Transformation.– Parallelität von Linien werden erhalten jedoch nicht die

Längen und Winkel.– Zustäzliche Rotation,Skalierung und Translation erhalten die

Parallelität.

Page 13: Transformation

Die speziele affine Transformation:Scherung

Der Term a bei SHx und der Term b bei SHy sind die Proportionaltätskonstanten.

Page 14: Transformation

Zusammengesetzte zweidimensionale Transformationen

Zusammengesetzte Transformationen sind effektiver, als wenn wir einzelne Transformationen nacheinander ausführen.

Die Basismatrizen R,S und T werden kombiniert. Beispiel:(Rotation)

– Verschiebe P1 zum Ursprung.

– Rotiere.

– Verschiebe so, dass der Punkt im Ursprung zu P1 zurückkehrt. Beispiel:(Skalierung )

– Verschiebe P1 zum Ursprung.

– Skalieren

– Verschiebe zurück zu P1

Page 15: Transformation

Effizienz

Die allgemeinste Komposition von Rotation,Skalierung und Translation ergibt eine Matrix der Form:

• Siehe Tafel:

Die obere 2x2 Teilmatrix ist die zusammensetzung von Rotation und Skalierung und tx und ty sind die Komponenten der Translation.

Da die letzte Zeile der Gleichung konstant ist, sind nur folgende Operationen nötig

x‘ = x*r11+y*r12 +tx,

y‘ = x*r21 +y*r22 +ty

Page 16: Transformation

Effizienz

Diese Matrix brauch also nur vier Multiplikationen und vier Additionen .

Dies ist einen beträchtliche Beschleunigung,wenn man bedenkt, dass diese Operation pro Bild auf Hundert oder gar Tausende von Punkten angewandt wird.

Page 17: Transformation

Umsetzung in Java: Die Klasse AffineTransform

Konstruktor:– AffineTransform()– AffineTransform(AffineTransform Tx)– Erzeugt ein neues Objekt AffineTransform ,dass eine Kopie von der

allgemeinen Matrix ist.– AffineTransform(double [ ] flatmatrix)

Erzeugt ein neues AffineTransform-Objekt mit einem Feld von Doublewerten. 4 Einträgen repräsentieren die Transformation ohne Translation oder alle 6 die allgemeine Transformationsmatrix.

– AffineTransform(double m00,double m10,double m01,double m11, double m02,double m12)Erzeugt ein neues Objekt AffineTransform von 6 spezifischen Doubelwerten,die die 6 Einträge in die allgemeinen Form darstellen.(Anlog mit Float)

Page 18: Transformation

Methoden von AffineTransform

public void getMatrix(double[ ] flatmatrix)– Übergibt 6 Werte in die 3x3-Matrix und plaziert sie in einem

DoubleFeld. public static AffineTransform getRotateInstance (double

theta)– Gibt eine Rotationstransformation zurück.

public static AffineTransform getRotateInstance(double theta, double x,doubel y) – Gibt eine Rotationstransformation um einen beliebigen festen Punkt

zurück public static AffineTransform(double sx,double sy)

– Gibt eine Skalierungstransformation zurück.

Page 19: Transformation

Methoden von der Klasse AffineTransform

public doubel getScaleX():– Gibt den Skalierungsfaktor in Richtung der X-Koordinate

zurrück.Der Faktor steht bei der allgemeinen Transformationsmatrix an der Stelle (m00). (Analog Y-Koordinate)

public static AffineTransform getTranslateInstance(double tx, double ty):– Gibt die Transformation für die Translation zurück.

public double getTranslateX():– Gibt die X-Koordinate der Translation ,das Element (m02) von der

allgemeinen Transformationsmatrix zurück.(Analog Y-Koordinate)

Page 20: Transformation

Methoden der Klasse AffineTransform

void transform(double[ ] scrPts, int scrOff, double [ ] dstPts, int dstOff, int numPts)– Diese Methode transformiert ein Feld von Koordinaten.Diese

Methode sichert ,das keine Quell-Daten von einer früheren Operation überschrieben wird,bevor die Quell-Daten transformiert sind.

– Die Parameter:• scrPts : Dieses Feld beinhaltet die UrsprungsKoordinate.• dstPts : Dieses Feld beinhaltet die Zielkoordinaten• srcOff : Der Anfang des ersten Punktes der Quelle, der transformiert

wird.• dstOff : Der Anfang des ersten Punktes des Zieles zu dem transponiert

wird.• numPts- Die Nummer des transformierenden Punktes.

Page 21: Transformation

Methoden der Klasse AffineTransform

public void transform(double [ ]srcPts, int srcOff, float [ ] dstPts,int dstOff,int

numPts)– Diese Methode transformiert ein Double-Feld und speichert das

Ergebnis in ein Float-Feld. public void transform(float [ ]srcPts, int srcOff,

double [ ] dstPts,int dstOff,int numPts)– Diese Methode transformiert ein Float-Feld und speichert das

Ergebnis in ein Double-Feld. public void transform(float [ ]srcPts, int srcOff,

float [ ] dstPts,int dstOff,int numPts)