Transformation

Werbung
Transformation
Grafische Bildverarbeitung
Vortrag: Kenny Schlör
29.11.1999
Theorie:Einführung in die zwei- und dreidimensionalen 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.
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 XAchse 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.
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
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.
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 p
und
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
Homogene Koordinaten und Matrizendarstellung 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]
Homogene Koordinaten und Matrizendarstellung 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.
Homogene Koordinaten und Matrizendarstellung 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.
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.
Betrachtung der linken oberen 2x2-Teilmatrix
bei 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.
Ähnlichkeitstransformationen und affine
Transformationen




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 Transformationsmatrizen entsteht eine Matrix dieser Form:
[Platz für die Matrix:siehe Tafel!!]
Ein Produkt einer beliebigen Folge von Rotations-,Translationsund 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.
Die speziele affine Transformation:
Scherung

Der Term a bei SHx und der Term b bei SHy sind die
Proportionaltätskonstanten.
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
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
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.
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)
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.
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)
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.
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)
Herunterladen