Title: Transformation
1Transformation
- Grafische Bildverarbeitung
- Vortrag Kenny Schlör
- 29.11.1999
2TheorieEinfü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.
3Formen 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.
4Formen 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 ,ysy y
5Formen 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 -ysin 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.
6Formen 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
rcos p, y r sin p und xrcos(p
q)r cos q cos p - rsin qsin p yrsin
(p q)r cos qsin p rsin qcos p
7Homogene 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
8Homogene 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.
9Homogene 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 W1 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.
10Konventionen Transformationsmatrizen
- Um Zeilenvektoren von links an die Matrix zu und
Spaltenvektoren von rechts zu an die Matrix zu
multiplizieren werden die Matrizen
transponiert. (PM)T MT
PT oder P(T(dx,dy) P - TranslationWenn 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.
11Betrachtung 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.
12Ä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
Transformations-matrizen entsteht eine Matrix
dieser Form - Platz für die Matrixsiehe 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.
13Die speziele affine TransformationScherung
- Der Term a bei SHx und der Term b bei SHy sind
die Proportionaltätskonstanten.
14Zusammengesetzte 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
15Effizienz
- 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 xr11yr12 tx,
- y xr21 yr22 ty
16Effizienz
- 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.
17Umsetzung 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)
18Methoden 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(d
ouble 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.
19Methoden 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)
20Methoden 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.
21Methoden 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)