5 Geometrische Operatoren und Überblendung
Was versteht man unter Geometrischen
Operatoren?
Die Veränderung der geometrischen Abbildung eines gegebenen Bildes.
Diese Abbildung kann z.B. eine Verkleinerung, Verschiebung, Drehung, Spiegelung
oder geometrische Verzerrung sein.
Dabei ist i.a. auch eine gewisse Korrektur oder Angleichung von Grauwerten
erforderlich.
Die Zuordnung der Bildpunkte im Original- und Ergebnisbild durch einen geometrischen Operator kann durch Angabe einer Koordinatentransformation definiert werden.
Vorwärtstransformation vs.
Rückwärtstransformation
Vorwärtstransformation: vom Originalbild wird auf das Zielbild
Transformiert.
Rückwärtstransformation: vom Zielbild wird Punkt für Punkt nachgeschaut welche
Punktfalbe durch eine Funktion vom Originalbild abhängig zugewiesen werden.
Vorteil: alle Punkte Werden erreicht im vergleich zu Vorwärtstransformation da
kann es Passieren dass Überlapperungen und lücken entstehen können je nach
Funktion.
Eineindeutigen Koordinatentransformationen
Bei eineindeutigen Koordinatentransformationen wird jedem Bildpunkt des
Ergebnisbildes genau ein Bildpunkt im Originalbild zugeordnet und umgekehrt. Die
Grauwerte aus dem Originalbild f werden unverändert übernommen. Es gibt nur
wenige Koordinatentransformationen, die diese Bedingungen erfüllen. Für
Bildrotationen oder diagonale Spiegelungen wird dabei M = N (quadratisches Bild)
vorausgesetzt.
Transformationsvorschrift für die
Rückwärtstransformation
Identität: id(m,n) := (m,n)
Vertikale Spiegelung: ver(m,n) := (m,N-n-1)
Horizontale Spiegelung: hor(m,n) := (M-m-1,n)
Diagonale Spiegelung: dia(m,n) := (n,m)
Drehung um 90°: rot(m,n) := (n,N-m-1)
Drehung um 180°: rot2(m,n):=(N-m-1,N-n-1)
Drehung um 270°: rot3(m,n):=(N-n-1,m)
Drehung u. Spiegelung: tor(m,n) :=(N-n-1,N-m-1)
(Drehungen gegen den Uhrzeigersinn um den
Bildmittelpunkt)
Affine Abbildung
Eigenschaften: ein Punkt mit endlichen Koordinaten wird auf einen Punkt mit
endlichen Koordinaten abgebildet Jede affine Abbildung lässt sich als
Kombination von Verschiebung, Rotation, Skalierung, Spiegelung und Scherung
darstellen. Affine Abbildungen, die nur aus Verschiebungen, Rotationen und
Spiegelungen bestehen, sind längen- und winkeltreu.
Homogene Darstellung affiner Abbildungen
Eigenschaften
Alle Grundtransformationen lassen sich als Matrix darstellen.
Die Verkettung von Transformationen lässt sich durch einfache
Matrizenmultiplikation erreichen.
Beispiel: Rotation eines Bildes um den Winkel ф
Transformationsschritte (Vorwärtstransformation)
1.Verschiebung des Bildmittelpunktes
in den Ursprung
2.Rotation um f
3.Verschiebung des Bildmittelpunktes an die alte Position
Transformationsmatrizen
Für die Rückwärtstransformation muss für jeden Schritt die inverse Abbildung
benutzt werden.
Transformationsmatrizen
Bilddeformation
Berechnung der gewünschten Verschiebung der
Koordinaten für alle Bildpunkte
Rekonstruktionsschritt:
Erzeugung des Ergebnisbildes durch Interpolation der Grauwerte an den einzelnen
Bildpunkten
Für die Spezifikation der Deformation sind verschiedene Verfahren entwickelt
worden, z.B. kann für markante Punkte des Bildes die Lage im Ergebnisbild
interaktiv durch den Benutzer festgelegt werden.
Triangulationsbasierte Deformation
Die Bildpunkte, für welche die Deformation spezifiziert ist, werden durch
Dreiecke verbunden.
Dieser Vorgang wird als Triangulierung bezeichnet. Innerhalb der einzelnen
Dreiecke kann die Deformation für einen beliebigen Punkt z.B. durch lineare
Interpolation aus der Deformation an den drei Eckpunkten berechnet werden.
Dadurch erhält man eine stetige, wenn auch nicht glatte Gesamtdeformation.
Morphing
Das Ursprungsbild wird schrittweise zum Zielbild deformiert.
Das Zielbild wird schrittweise zum Ursprungsbild deformiert.
Zwischen je zwei Bildern der so entstandenen Bildfolgen wird überblendet, d.h.
der Grauwert g(m,n) im Ergebnisbild ergibt sich aus den Grauwerten f1(m,n) und
f2(m,n) durch lineare Interpolation:
g(m,n) = (1-a) f1(m,n) + a f2(m,n) wobei a Î [0,1] gilt.
Quadratische Rotation in Richtung
mathematisch positivem sinn
inIm: Eingabebild (quadratisch)
outIm: gedrehtes Ausgabebild (quadratisch)
static void QuadratischRot(byte[][] inIm, byte[][] outIm)
{
int imSize = inIm.length;
for (int r=0; r<imSize; r++)
for (int c=0; c<imSize; c++)
outIm[r][c] = inIm[imSize-r-1][imSize-c-1];
}