Ja, hallo, ich begrüße euch zur heutigen Vorlesung.
Gut, das letzte Mal haben wir mit dem Kapitel Bildverarbeitung
angefangen.
Und da machen wir heute weiter.
Und zwar, wir sind da stehen geblieben, soweit ich mich erinnern kann,
wenn der Rechner kommt.
Ja, da.
Da stehen geblieben, wo wir die Frage diskutiert haben oder
beantwortet haben, wie man Farbbilder darstellt.
Wir haben gesehen, dass man bei Graustufenbildern ein Byte zum
Beispiel pro Pixel.
Pixel ist die Kleinste oder die Einheit von Bildern, mit denen wir
arbeiten.
Und bei Graustufenbildern haben wir gesehen, dass wir dort Werte
zwischen 0 und 255 also jeden Pixel ein Wert zwischen 0 und 255
zuordnen können, wenn wir 8 Bit pro Pixel voraussetzen.
Bei Farbbildern gibt es unterschiedliche Modelle und eins von diesen
Modellen ist das sogenannte RGB-Modell, also Rot-Grün-Blau-Modell, das
heißt, wir ordnen jeden Punkt im Bild, also Image UV, also U und V
sind die Koordinaten von Pixeln im Bild, das ist alles natürlich
diskret, weil wir haben ja eine bestimmte Anzahl von Pixeln horizontal
und vertikal im Bild.
Und hier bei diesem Modell ordnen wir jedem Punkt oder jedem Pixel im
Bild einen Triple, und zwar einen Wert für Rot, einen Wert für Grün
und einen Wert für Blau.
Und wenn man natürlich hier voraussetzt, dass wir 1 Byte pro Farbe
haben, also ähnlich zu Graustufen, dann haben wir natürlich 3 Byte pro
Pixel bei Farbbildern nach dem RGB-Modell.
Und da sieht man hier, dass man damit eigentlich über 16 Millionen
unterschiedlichen Farben hier darstellen kann.
Das heißt, man hat hier für die Darstellung so einen Würfel, und man
sieht hier, die unterschiedlichen Achsen oder die Hauptachsen von
diesen Würfeln sind Rot, Blau und Grün hier.
Und wenn wir im Zentrum sind, das heißt, Aliverti 0 sind, dann haben
wir Schwarz, und wenn Aliverti 255 sind, dann sind wir an dieser Ecke
von diesem Würfel bei Weiß.
Und alle anderen Farben, die man hier darstellen will, sind eigentlich
Kombinationen aus den Werten von Rot, Grün und Blau.
Das heißt, wir haben diese Art von Abbildung, also ein Bild mit N
-Zeilen und M-Spalten wird hier auf einen Wert in diesen Räumen
abgebildet.
Und das wird häufig dargestellt durch diesen Farbwürfel, den man hier
sieht.
Und wie ich bereits erwähnt habe, andere Farben wie beispielsweise
Gelb ergeben sich aus der Kombination in dem Fall von 255 für Rot und
255 für Grün und dann ein 0 für Blau.
Und auf diese Art und Weise hat man diese additive Farbmischung,
sodass man aus diesen drei Grundfarben die anderen Farben erzeugen
kann.
Es gibt eine ganze Menge von Farbmodellen, da wollen wir nicht so sehr
auf die Details eingehen, aber ein sehr interessanter Farbraum ist der
HSI -Farbraum, wo man nicht diese additive Farbmischung hat, sondern
wo man dort den Farbton oder Farbnauanze darstellen kann.
Das ist immer dieses Heu bzw.
die Sättigung, Saturation und die Intensität bzw.
Value hier.
Also das sieht man hier, den Farbton, das ist praktisch um diese
Achse.
Und man muss sich vorstellen, das sind jetzt Polarkoordinaten, die wir
hier hatten und das wäre jetzt der Winkel hier um diese Hauptachse.
Value bzw.
Intensität ist die Z-Achse und die Sättigung ist eigentlich der Radius
in diesen Polarkoordinaten, also die Achse, die in diese Richtung hier
geht.
Und der Unterschied zu dem RGB-Modell ist, dass man hier die
Farbinformation getrennt von Sättigung und von Helligkeit darstellen
kann.
Deshalb ist auch dieses Modell unempfindlich gegen
Beleuchtungsänderungen und diese Farbinformation oder Farbton kann man
tatsächlich darstellen unabhängig von der Helligkeit, also von der
Intensität bzw.
von der Sättigung, die hier dargestellt ist.
Und beide Modelle stellen das Gleiche dar, deshalb ist es auch
möglich, dass man zwischen diesen beiden Modellen oder Werten oder
Bildrepräsentationen und Darstellungen zwischen diesen beiden Modellen
umrechnen kann und da sieht man hier die Umrechnungsvorschrift, wie
man diese HSI-Werte aus den RGB-Werten berechnen kann.
Da sieht man hier, dass Intensität eigentlich der Mittelwert aus allen
drei ist, dass die Sättigung drei durch die Summe von allen und dann
multipliziert mit dem minimalen Wert und bei H ein bisschen
komplizierter, wie es hier dargestellt ist, aber das ist eine einfache
Berechnungsvorschrift.
Eine Frage, wie bestimmt man zum Beispiel HSI-Werte in einem RGB
-Würfel, das ist nochmal hier dargestellt auf der Folie und im RGB
-Format entspricht diese Helligkeitsachse, die wir vorher, also die
Intensität oder Value, die Z-Achse in unserem HSI-Modell, der Linie
durch die beiden Ecken Schwarz und Weiß, also diese Linie hier, und
die Sättigung entspricht, also auf der Sättigungachse ist Null und
erhöht sich natürlich mit dem Abstand von der Helligkeitsachse, also
je mehr wir uns nach außen bewegen, erhöht sich dieser Wert und jeder
Punkt dann auf diesem Dreieck, was zwischen dieser Linie und dieser
Linie hier aufgespannt ist, hat denselben Farbton, aber
unterschiedliche Helligkeits- bzw.
Sättigungswerte und dieser Farbton, der kann verändert werden, indem
man dieses Dreieck, was man hier sieht, um diese Helligkeitsachse
rotiert.
Aber das sind so ein bisschen Details, aber vielleicht ist es
interessant, das zu wissen, wenn es jetzt um die Bildrepräsentation
geht, dann sieht man hier, dass wir im RGB-Modell solche Darstellung
von dem Bild haben und dass wir im HSI-Modell tatsächlich getrennte
Repräsentation von den drei Kanälen oder von den drei Modalitäten
haben, das heißt einmal die Sättigung, einmal die Helligkeit und dann
der Farbton hier separat dargestellt.
Genau, den Unterschied habe ich bereits erwähnt und deshalb machen wir
jetzt weiter, wie können wir tatsächlich jetzt diese Bilder in einem
Rechner darstellen.
Wir wissen, dass wir bei Graustufenbilder pro Pixel 8 Bit vorsehen
oder vorgesehen haben und hier die Pixel, die werden dann zeilenweise
linear im Speicher abgelegt, das heißt von oben links, das sind unsere
Koordinaten, U und V, von oben links nach unten rechts, wir bewegen
uns in die Richtung und wenn wir das so aufrollen, zeilenweise
aufrollen, dann bekommen wir schwarz, weiß, schwarz, weiß, dann
bekommen wir viermal weiß und dann bekommen wir viermal schwarz, wie
man hier sieht.
Und mit unserer Zuordnung, die wir hatten, also 0 ist schwarz und 255
ist weiß, haben wir im Speicher eigentlich diese Zeilenreihe, die wir
hier sehen, also 0, 255, dann 0 wiederum für schwarz, dann 5 mal die
255 für weiß und dann 4 mal die 0.
Wie macht man das bei Farbbildern?
Naja, wir wissen pro Pixel haben wir drei Bytes und diese Bytes können
wiederum auch oder die Werte können dann für die 8 Bits dieser Byte
zwischen 0 und 255 liegen und deshalb rollen wir das Ganze auch
zeilenweise auf, dann bekommen wir sowas hier, auf die gleiche Art und
Weise und jetzt für dieses schwarze Pixel, was wir hier gesehen haben,
müssen wir natürlich drei Bytes vorsehen, das sind die ersten drei
Bytes, die man hier sieht, mit 0, 0, 0, dann haben wir ein weißes
Pixel, das sind auch drei Bytes, vor rot, blau, grün mit 255, dann
kommt rot und rot ist 255 vor rot und 0, 0 vor die anderen, deshalb
255 und dann 0, 0, dann kommen 2 mal weiß, also 6 mal 255, dann kommt
grün und da sieht man grün, dann ist es 0, also rot, grün, blau, 0,
255 usw.
Und ich glaube ihr habt es verstanden bzw.
kapiert, das heißt pro Pixel haben wir drei Bytes und je nachdem
welche Farbe hier dieser Pixel hat, kommen die entsprechenden Werte
rein und natürlich ist es nicht immer 0 oder 255, es können ja
unterschiedliche Farben sein und dann bewegen wir uns, je nachdem wie
wir uns bewegen in diesem Würfel.
Und auf diese Art und Weise werden tatsächlich diese Farbbilder nach
dem RGB-Modell im Rechner bzw.
im Speicher eines Rechners abgelegt.
Ja, das sind hier ein paar Beispiele, ich habe jetzt die Roboception
-Kamera das letzte Mal erwähnt, das ist ein Stereokamerasystem mit
einer Baseline, also praktisch die Breite zwischen den beiden Kameras,
linkes Auge und rechtes Auge 160 mm ist, Bildauflösung von 1280 x 960,
das heißt eigentlich hat man pro Bild jetzt hier über ein Megapixel
und man sieht hier, was man aus dem Sensor bekommt, wir werden später
darauf kommen oder darauf zu sprechen kommen, wie man praktisch diese
Tiefeninformationen, wir haben das letzte Mal gesagt, dass wir, wenn
wir Bilder haben, diese dritte Dimension, die Tiefe, also Z, weil wir
stellen ja ein dreidimensionales Bild, was ich gerade jetzt sehe hier,
zweidimensional, wir haben XYZ zum Beispiel von einem Kopf von euch,
wir stellen das als einen Punkt mit U und V-Koordinaten, aber da gilt
es natürlich, wenn wir jetzt hier ein Modell von der Umgebung
erstellen wollen, diese Tiefeninformationen oder die Distanz zu
Objekten in der Szene wieder zu rekonstruieren aus den Bildern und da
werden wir später sehen, wie das mit Stereovision hier funktioniert.
Genau, die Kamera liefert auch nicht nur jetzt die RGB-Bilder von der
linken, also hier ist ein RGB-Bild von der linken Kamera, aber auch
von der rechten Kamera und daraus berechnet man dieses Tiefenbild,
zusätzlich berechnet oder liefert diese Kamera auch eine Abschätzung
oder eine Schätzung für das Vertrauen der Messwerte des Tiefenbildes,
also wie vertrauenswürdig sind diese Werte der einzelnen Pixel im
Tiefenbild, das ist natürlich sehr wichtig und sehr relevant für viele
Anwendungen.
Genau, somit sind wir mit dem ersten Punkt des Kapitels fertig und wir
wollen uns jetzt tatsächlich angucken, wie wir Objekte, die wir sehen
in einer Szene, also beispielsweise das hier, wie das in einer Kamera
dargestellt wird und wollen wir auch verstehen, unter anderem wie wir
zum Beispiel den echten Abstand zu diesem Objekt im
Weltkoordinatensystem bestimmen können.
Da gibt es eine ganze Reihe von Techniken, von Problemen eigentlich,
die man bewältigen muss und das einfachste Modell, um das zu
beschreiben, ist das Loch-Kamera-Modell, also da sieht man hier ein
Objekt und das ist hier eine Kamera mit diesem Loch hier, also eine
Loch -Kamera und wenn man die Strahlen hier von den eingrenzenden,
also von den Extremen, von den Objekten hier nimmt, dann sieht man
hier, dass bei diesem Modell der höchste Punkt hier, also P auf P
Strich abgebildet wird und der Boden hier auf diesem Punkt hier.
Und man hat hier einen Parameter, das ist ein sehr wichtiger Parameter
und zwar die Brennweite beziehungsweise der fokale Abstand einer
Kamera und zwar das ist F.
Das ist ein sehr wichtiger Parameter, was wir gleich sehen, das ist
unser Einkoordinatensystem, was hier dargestellt ist und man sieht X,
Y, das sind praktisch parallel zu unseren U und V, die
Bildkoordinaten, die wir definiert haben und Z ist immer der Abstand,
der von der Kamera in Richtung reales Objekt geht.
Das heißt, wenn ich jetzt hier eine Kamera hätte, dann hätte ich X, Y
in der Ebene und Z zeigt immer in eure Richtung.
So, und in diesem klassischen Loch-Kamera-Modell gibt es eigentlich
zwei Varianten davon.
Einmal die Variante, wo dieses Projektionszentrum, was man hier sieht,
also wo diese Linien sich schneiden, mehr oder weniger, vor der
Bildebene liegt.
Das ist im Fall A, das heißt, was wir gerade gesehen haben, wir haben
hier ein Fahrrad und man sieht hier, das Fahrrad wird hier abgebildet,
aber gespiegelt um die horizontale Achse auf der Bildebene.
Und man hat die zweite Variante, und zwar das ist Image Plane oder
Bildebene B, wo tatsächlich das Projektionszentrum hinter der
Bildebene liegt.
Also Projektionszentrum hinter der Bildebene liegt, das ist der Fall,
und da haben wir keine Spiegelung.
Wir haben nur eine Verkleinerung von dem Objekt, aber wir haben keine
Spiegelung.
Das wird oft auch benutzt, diese Variante, also Lochkammermodell in
der positiven Lage beziehungsweise in der negativen Lage.
Natürlich, der Unterschied ist, dass wenn ich jetzt hier mein
Koordinatensystem lege, dann sind alle Werte hier positiv.
Aber wenn ich mein Koordinatensystem hier in diesem Projektionszentrum
lege und ich verwende ein Lochkammermodell in der negativen Lage, also
wie im Fall A, dann habe ich natürlich die negativen Werte dort.
So, und bevor wir weitermachen, einige weitere Definitionen.
Also einmal hier für die Variante B, also Lochkammermodell in
positiver Lage, ein bisschen anders dargestellt, und zwar jetzt auch
mit den Koordinatensystemen X, Y und Z zum Objekt, wie man sieht hier,
Z zeigt zum Objekt, dann die Bildebene mit den Achsen U und V, also U
horizontal parallel zu X und V vertikal parallel zu Y.
Die Brennweite F ist immer der Abstand zwischen diesem
Projektionszentrum und dem Ursprung des Bildkoordinatensystems.
Und der Abstand Z, also die Distanz zu einem Objekt ist der Abstand
zwischen dem Projektionszentrum und dem echten Bild im
Weltkoordinatensystem.
Und da hat man hier einige Begrifflichkeiten, also zum Beispiel die
Hauptachse oder Principal Axis, das ist eine Gerade, die durch das
Projektionszentrum geht, und zwar rechtwinklig zur Bildebene.
Der Hauptpunkt oder Principal Point ist der Schnitt von dieser
Hauptachse mit der Bildebene, also rot, was man hier sieht, bzw.
der Ursprung von dem UV-Koordinatensystem.
Dann haben wir die Bildkoordinaten, das sind 2D-Koordinaten, UV in
dieser Bildebene und die Einheit dort, wie wir das letzte Mal auch
gesagt haben, sind Pixel.
Und anschließend haben wir ein Kamera-Koordinatensystem, also 3D
-Koordinaten XYZ eines Punktes relativ zum Kamera.
Und der Ursprung liegt im Projektionszentrum von diesem
Koordinatensystem, also hier.
Und die X- und Y-Achse sind parallel zur UV-Achse, und die Einheit
hier ist Millimeter, zumindest hier in dieser Vorlesung.
Das heißt, wir haben ein Kamera-Koordinatensystem, wir haben ein Welt
-Koordinatensystem noch, und zwar ein 3D-Basis-Koordinatensystem der
Welt, und der kann ja überall liegen.
Der kann zum Beispiel an der Ecke hier von diesem Tisch liegen.
Und die Einheit in diesem Welt-Koordinatensystem wollen wir auch in
Millimeter in dieser Vorlesung annehmen.
So, und wenn man jetzt den Strahlensatz nimmt und versucht mal die
Beziehungen hier abzulesen, dann weiß man, okay, das Verhältnis
zwischen F zu Z, also das sind hier Dreiecke, wie man sieht.
Ich hoffe, das kann jeder und kann jede von euch sehen.
Das sind rechtwinklige Dreiecke, einmal der große hier und einmal der
kleine hier.
Soll ich das...
Ich kann es mal versuchen hier.
Nein, das will nicht, deshalb lasse ich das.
Einmal dieses Rechteck hier vom Ursprung hier bis zum Z und dann hier
und einmal das andere Rechteck hier.
Und wenn man die Verhältnisse hier F zu Z hat, dann sind sie
eigentlich genauso wie U zu X bzw.
Y zu V.
Und basierend darauf, also wenn man das hat, dann kann man eigentlich
ganz einfach hinschreiben, dass U und V, also die Bildkoordinaten,
sind nichts anderes als XY-Koordinaten skaliert mit F durch Z.
Also F ist die Bremsweite und Z ist das hier.
So, bzw.
die Rückprojektion, wenn man die Koordinaten im Bild hat, also U und
V, kann man durch die Multiplikation mit Z durch V auf die Koordinaten
im XY, also im Kamera-Koordinatensystem kommen.
Kommt jeder damit klar oder ist die Ableitung eigentlich von dem hier
klar, wie das hier zustande kommt oder hat jemand Probleme damit?
Wer kann es nicht?
Gut, das heißt, das ist ein sehr einfaches Kameramodell, wo wir jetzt
angenommen haben, dass wir eine Bremsweite haben, wo wir auch
angenommen haben, dass zum Beispiel alle Pixel quadratisch sind.
In vielen Kameras, vor allem in Billig-Kameras eigentlich, erkennt man
das sehr oft, wenn man zum Beispiel ein Quadrant, ein Bild davon
nimmt, dann ist das Ganze verzerrt und es ist kein echter Rechteck,
sondern verzerrte Kurven.
Und deshalb erweitert man auch dieses einfache oder klassische
Kameramodell, um bei echten Anwendungen tatsächlich nutzbar zu machen,
und definiert man unterschiedliche Bremsweiten für die Kamera in die X
-Richtung und Y-Richtung.
Das heißt eigentlich, wir haben jetzt nicht nur nicht quadratische
Pixel, sondern wir haben sozusagen rechteckige Pixel, wo die Länge und
die Breite unterschiedlich sein können.
Das heißt, statt einem F definieren wir einen FX und einen FY, und der
Hauptpunkt, also der Schnittpunkt der Hauptachse mit der Bildebene,
der muss nicht immer durch den Ursprung gehen, sondern der kann ja
variieren.
Deshalb dieser Schnittpunkt ist nicht 0,0, sondern ist CX und CY.
Und wenn man das Ganze hier macht, dann mit den gleichen Überlegungen
von vorher, wir versuchen ja die Koordinaten in der Bildebene hier zu
berechnen aus denen in XY, dann haben wir natürlich nicht 0,0, sondern
wir haben CX und CY plus, vorher hatten wir F durch Z mal XY, jetzt
haben wir 1 durch Z FX mal X und FY mal Y.
Da sieht man hier, das war einfach das Modell von vorher.
Und wenn man jetzt homogene Koordinaten verwendet, wir wissen ja bei
homogenen Koordinaten, wir haben praktisch unsere XY und Z um eine
vierte Koordinate erweitert, das können wir gleich hier machen, das
heißt wir erweitern das hier auf drei Koordinaten, U, V und 1, das ist
die homogene Koordinate von U und V.
Und wenn wir alles miteinander hier multiplizieren, dann sehen wir,
dass wir...
und hier mit Z multiplizieren, dann müssen wir alle Elemente durch Z
hier dividieren, dann bekommen wir eigentlich hier eine Matrix in
dieser Form, also FX durch Z, FY durch Z und 1 durch Z in der
Diagonale und dann hier CX und CY jeweils dividiert durch Z.
Und das bedeutet, wenn wir jetzt das ein bisschen umformulieren, indem
wir hier auch auf beiden Seiten mit Z multiplizieren, dann bekommen
wir U mal Z, V mal Z und Z ist gleich FX, FY und 1, eine homogene
Matrix, wie man sieht, also eine 3 mal 3 homogene Matrix und dann CX
und CY, weil wir mit Z multipliziert haben und das gleiche bleibt hier
auf der Seite erhalten.
Also eine ein bisschen angenehmere Darstellungsform dieser Matrix,
weil diese Matrix sehr wichtig ist und diese Matrix die
Kalibriermatrix der Kamera heißt.
Ja, weil diese Matrix berechnet für uns tatsächlich aus den Punkten im
Kamerakoordinatsystem die Punkte hier in der Bildebene.
So, das heißt, diese Beziehung, die wir hier haben, lässt sich
schreiben, also die Beziehung zwischen Bild- und Kamerakoordinaten ist
gegeben durch diese Kalibriermatrix der Kamera.
So, und natürlich, wir wollen auch andersherum die Beziehungen haben,
das heißt, wir haben U und V, wir haben die Koordinaten in der
Bildebene und wir wollen XYZ berechnen, das ist nichts anderes als die
Invertierung von dieser quadratischen 3 mal 3 Matrix und die Inversion
von dieser Matrix ist hier, wie man sieht, einfach zu berechnen.
Genau, wenn man hier jetzt sieht, also Kalibriermatrix von einer
Kamera FX, FY und CX und CY, das sind ja Brennweiten, die wir
eigentlich nicht kennen, das heißt, man muss tatsächlich, damit man
diese Abbildung hat, zwischen Bild- und XYZ, müssen wir tatsächlich
diese Parameter bestimmen, diese FX, FY und CX und CY.
Und diese Parameter nennt man tatsächlich Kameraparameter und man
unterscheidet hier zwischen den sogenannten intrinsischen und
extrinsischen Kameraparametern.
Die Parameter, die wir jetzt in dieser Kalibriermatrix gesehen haben,
also FX, FY, CX und CY, also die unterschiedlichen Brennweiten von X
und Y und der Punkt, also der Hauptpunkt, der vom Ursprung verschieden
ist, die nennt man die intrinsischen Parameter.
Und die Beziehungen zwischen dem Kamerakoordinatensystem und dem
Weltkoordinatensystem werden durch die sogenannten extrinsischen
Parameter bestimmt.
Das heißt, diese extrinsischen Parameter, die beschreiben für mich
jetzt die Lage der Kamera in Bezug auf das Basiskoordinatensystem oder
Weltkoordinatensystem.
Und wie wir wissen natürlich aus den ersten Vorlesungen, dass solche
Beziehungen mithilfe von einer Rotation und einer Translation im Raum
beschrieben werden können.
Was bedeutet das?
Das bedeutet, wenn ich jetzt hier eine Rotationsmatrix R habe, wie
die, die wir kennengelernt haben in der Vorlesung, und einen
Translationsvektor T, dann diese Rotations-Translationsmatrix, die
geben für mich die Transformation vom Weltkoordinatensystem zum
Kamerakoordinatensystem.
Und zwar so, dass wir für einen Punkt im Weltkoordinatensystem die
Kamerakoordinaten bestimmen können.
Das heißt, die Kamerakoordinatie Xc ist nichts anderes als der
rotierte Punkt im Raum.
Also Xw multipliziert mit der Rotationsmatrix plus eine Translation.
Das ist alles nicht so schwierig, oder?
Soweit ist alles klar.
Und durch die Kombination von diesen intrinsischen und extrinsischen
Parametern der Kamera wird dann die Projektion von einem Punkt vom
Weltkoordinatensystem auf Bildkoordinaten durch eine sogenannte
Projektionsmatrix gegeben.
Also zunächst mal haben wir durch die intrinsischen Parameter von der
Bildebene die Punkte berechnet, und jetzt müssen wir natürlich diese
Punkte im Bildkoordinatensystem, also durch die intrinsischen
Parameter haben wir die Punkte von Kamera auf Bildkoordinaten
abgebildet.
Und jetzt wollen wir von Kamerakoordinaten auf Weltkoordinaten.
Das heißt, wir haben eine Verkettung von diesen Transformationen.
Und das wird durch eine sogenannte Projektionsmatrix angegeben.
Und diese Projektionsmatrix ist nichts anderes natürlich als die
Matrix K, die die erste Abbildung macht von Kamera auf Bild,
multipliziert mit der Matrix Rt, also dieser Strich soll heißen, also
K war eine 3x3 Matrix, R ist auch eine Rotationsmatrix, also 3x3
Matrix, und t ist ein 3x1 Vektor.
Deshalb habe ich hier eine Projektionsmatrix, die ist die
Multiplikation von einer 3x3 Matrix mit einer 3x4 Matrix.
Das heißt, dieses Rt ist eine 3x4 Matrix und insgesamt kriege ich also
eine Projektionsmatrix der Dimension 3x4, also 3 Zeilen mal 4 Spalten.
Und wir sind auf der Suche nach den Parametern, also wir müssen
tatsächlich, wenn wir alle Parameter dieser Matrix hier bestimmt
haben, dann können wir tatsächlich diese Korrespondenzen zwischen
Punkten im Weltkoordinatensystem und im Kamerakoordinatensystem
berechnen.
Und das ist, was man macht, wenn man von Kamerakalibrierung spricht,
also wenn man von einer Kamerakalibrierung spricht, dann muss man
tatsächlich den Ursprung von dem Kamerakoordinatensystem im
Weltkoordinatensystem bestimmen.
Was bedeutet das?
Ich muss die Lage der Kamera tatsächlich im Raum bestimmen.
Ihr könnt euch vorstellen, warum es jetzt so kompliziert ist oder
Bildverarbeitungsaufgaben schwieriger sind, wenn die Kamera sich
bewegt und nicht statisch an der gleichen Stelle bleibt.
Das heißt, Kamerakalibrierung bedeutet die Bestimmung dieser
intrinsischen und extrinsischen Parameter der Kamera und um das zu
machen, benötigt man mindestens 6 Korrespondenzen, nennt man das.
Das heißt, 6 Paare von Punkten im Raum, wo man praktisch die Zuordnung
kennt, die Korrespondenzen kennt, und zwar zwischen nicht-koplanaren
Weltpunkten und ihren Projektionen in der Bildebene.
Und für jede Korrespondenz haben wir natürlich diese Beziehung, also
wenn ich jetzt hier U und V und ich nehme einen Punkt XYZ hier, dann
weiß ich, okay, meine Projektionsmatrix haben wir vorher bestimmt, K
mal R, T, also beziehungsweise anders aufgeschrieben, K mal R und K
mal T.
Und insgesamt bekomme ich hier eine 3 mal 4 Matrix mit 12 Parametern,
die man bestimmen muss und das ist natürlich jetzt naheliegend, warum
man diese 6 Korrespondenzen braucht, weil 6 Paare von Punkten, damit
ich diese 12 Parameter hier bestimmen kann.
Das heißt, die Kamerakalibrierung bedeutet, also die Bestimmung der
Lage der Kamera im Weltkoordinatensystem bedeutet jetzt nichts anderes
als die Bestimmung von diesen 12 Parametern, die wir haben.
Und für diese 12 Parameter brauche ich ja irgendwie 12 unabhängige
Gleichungen.
Ja, 12 unabhängige Gleichungen und diese 12 unabhängigen Gleichungen
kriege ich aus 6 Korrespondenzen.
So, das heißt, wenn wir jetzt hier das Ganze, die Gleichung hier mal
aufschreiben und auflösen, also was wir hier gesehen haben mit U und V
und W und wir können natürlich durch W dividieren und so weiter und so
fort und behalten wir die Bezeichnung P1 bis P12, ohne dass ich jetzt
P1 durch W oder P12 durch W schreibe, dann bekommen wir folgendes.
U und V ist das hier.
Ja, also für U bekommen wir das hier und für V bekommen wir das hier.
Und da wir jetzt in homogenen Koordinaten arbeiten, können wir noch
einen Schritt weitergehen und sagen, die Multiplikation von P mit
einem Faktor, was ungleich 0 ist, ändert nichts.
Das war, wie wir homogene Koordinaten kennengelernt haben.
Daher kann man die Gleichung normalisieren, also diese Gleichung kann
man normalisieren, indem man z.B.
durch P12 dividiert.
Also ich dividiere alles hier durch P12, dann habe ich z.B.
P1 durch P12, aber ich schreibe trotzdem jetzt P1, damit wir es nicht
so kompliziert machen.
Und dann sieht man, dass wir das auch hier eliminiert haben und dann
bekommen wir eigentlich diese Beziehung hier.
P1 mal X plus P2 mal Y, P3 mal Z plus P4 ist gleich U mal P9 plus U
mal P10Y plus U mal P11Z plus U multipliziert mit 1.
Ja, das ist dieser Schritt, den wir hier implizit gemacht haben.
Genau, das heißt, wenn wir das hier machen, dann können wir das ein
bisschen umformen, weil wir suchen ja U und V, das heißt, wir können
alles auf der anderen Seite bringen, dann bleibt hier U und V und ein
bisschen Umformung.
Und wenn man das Ganze hier jetzt in Matrix-Schreibweise bringt, dann
hat man eigentlich die folgenden Beziehungen.
Man sieht hier, wir haben ja jetzt sechs unterschiedliche
Korrespondenzen mit jeweils zwei linearen Gleichungen.
Das heißt, es resultiert hier ein lineares Gleichungssystem der Form
AX gleich B, wo A, das hier kann man natürlich aus den Gleichungen
vorher ableiten, multipliziert mit X, X sind eigentlich die Parameter,
die wir bestimmen von unserer Matrix, was für uns die intrinsischen
und extrinsischen Parameter beschreibt, ist gleich B.
Und was wir haben in diesem linearen Gleichungssystem, wir kennen X1,
Y1, Z1 und U1, V1.
Wir kennen X2, Y2 und Z2 und die Korrespondenzen dazu, U2 und V2 und
so weiter und so fort.
Das heißt, wir müssen nur dieses Gleichungssystem lösen.
Also mit fünf Korrespondenzen hat man natürlich ein unterbestimmtes
Gleichungssystem, mit sechs Korrespondenzen hat man natürlich ein
überbestimmtes Gleichungssystem, weil wir ja nur elf Parameter hier
bestimmen wollen.
Und um diese Korrespondenzen zu nehmen oder diese Korrespondenzen zu
erhalten, nimmt man dieses berühmte Schachbrettmuster, was man vor der
Kamera in sechs unterschiedlichen koplanaren Konfigurationen oder
Positionen stellt.
Man sieht das hier, hat man natürlich diese Punkte, wählt man diese
Punkte, setzt man ein in dieses System, sodass man die P1 bis P11
berechnen kann.
Das ist natürlich eine Sache, für die es eine ganze Menge von Software
gibt, also Kamerakalibrierungssoftware, das ist jetzt nichts Neues,
sondern es existieren Tools und Methoden, die man runterladen kann, um
Kameras zu kalibrieren.
Aber im Allgemeinen basiert das darauf, dass man tatsächlich eine
optimale Lösung für dieses überbestimmte Koordinatensystem bestimmt.
Und das macht man zum Beispiel mit der Methode der Kleinsten Quadrate.
Also man multipliziert die Gleichung, also wir suchen eine optimale
Lösung Y-Stern und wir hatten vorher AX ist gleich B, man
multipliziert mit der Transponierten, natürlich das ist jetzt eine
nicht quadratische Matrix, eine 3x4 Matrix, unsere A-Matrix, die wir
kennengelernt haben.
Man multipliziert von beiden Seiten mit der Transponierten und wir
wissen, dass dieses A-Transponiert multipliziert mit A und A ist
wiederum eine quadratische Matrix, von der wir die Inversi bzw.
Pseudo-Inversi berechnen können und auf diese Art und Weise können wir
dann diese optimale Lösung X berechnen und das ist eigentlich, was wir
gesucht haben.
X war nichts anderes als die Parameter B1 bis B11, das heißt wir haben
alle intrinsischen und extrinsischen Parameter der Kamera bestimmt und
somit die Lage der Kamera im Weltkoordinatensystem.
Genau, gibt es Fragen dazu?
Einfach trivial, oder?
Hat jeder von euch mindestens zehnmal gemacht?
Wer hat jemals eine Kamera kalibriert?
Oh, okay, was für eine Kamera hast du kalibriert?
Ist egal, wie hast du es kalibriert?
Also du hast es implementiert oder hast du irgendeine Software
verwendet?
Okay, gut, alles klar.
Dann machen wir weiter.
Und zwar, wir wollen natürlich, nachdem wir diese Abbildungen haben,
das heißt von Punkten im Bildkoordinaten, wissen wir eigentlich die
Zuordnung zu Punkten im Weltkoordinaten, wollen wir schauen, wie wir
Bilder überhaupt verarbeiten.
Eine ganz zentrale Sache, die uns jetzt beschäftigen wird in dieser
Vorlesung, sind sogenannte Filteroperationen.
Also wie man mithilfe von bestimmten Filteroperationen die
Bildqualität, vielleicht irgendwelche Artefakte aus den Bildern
eliminieren kann.
Und was sind so Filteroperationen, Filteroperationen beziehungsweise
Filter in der Bildverarbeitung, nennt man auch räumliche Filter,
beziehungsweise Masken oder Kernels oder Fenster.
Und man sagt auch in der Bildverarbeitung das Filter und nicht der
Filter.
Also das ist das Filter für die Bildverarbeitung und der Filter, den
man benutzt, um Kaffee zu kochen.
Und deshalb, wenn hier ein der Filter auf der Folie steht irgendwo,
dann ist es von meinen Leuten, ich sage immer das Filter.
So und das Filter ist eine Operation auf eine Menge benachbarten
Pixeln.
Also wir haben irgendeine vordefinierte Operation, also eine
Vorschrift, wie wir praktisch die Werte berechnen sollen, die man
durch die Anwendung des Filters auf ein Pixel bekommen soll.
Und das ist natürlich keine Operation, wo man das nur auf ein Pixel
macht, sondern da betrachtet man Nachbarschaftsbeziehungen von diesem
Pixel zu vielleicht den nächsten acht Nachbarn, beziehungsweise
vielleicht weiteren Nachbarn, 16 oder 15 Nachbarn.
Und ein Filter wird also auf alle Pixel eines Bildes angewandt, also
Nachbarschaftsbeziehungen ist klar, dass man das anwenden kann, wenn
man irgendein Artefakt im Bild eliminieren will, zum Beispiel eine
weiße Linie überall im Bild, da kann man das nicht eliminieren, wenn
man nicht weiß, was drum herum liegt.
Und deshalb ist die Anwendung von Filteroperationen nicht nur auf das
Pixel selber, sondern auf benachbarte Pixel auch sehr wichtig.
Und wir wissen aus der Systemtheorie, dass wir zum Beispiel solche
Eigenschaften von linearen Filtern haben, das heißt, wenn ich zum
Beispiel einmal die Additivität, wenn ich hier einen Filter auf die
Summe von X plus Y anwende, dann ist es genauso wie die Anwendung von
diesem Filter auf die zwei Komponenten X und dann auf Y und dann die
Addition von beiden.
Oder wenn ich diese Operation auf ein Vielfaches von X abbilde oder
anwende, dann ist es gleich mit der Anwendung der Operation auf X und
dann der Multiplikation mit Alpha.
So, und die Anwendung von einem Filter auf ein Bildelement wird
dadurch realisiert, dass man die Filtermaske oder Körnerl, sagt man
auch dazu, auf dieses Element legt und dann den neuen Maskenwert so
berechnet, indem man alle darunter liegenden Pixel betrachtet, die
Werte aufnimmt und diese Werte multipliziert mit den Werten im Körnerl
oder in der Maske und das Ergebnis der Multiplikation mit allen Pixeln
aufsummiert und in diesem Pixel schreibt.
Das klingt so kompliziert, aber es ist sehr einfach.
Das heißt, nehmen wir mal an, das ist ein Bild und wir können das Bild
hier als eine diskrete Funktion, sieht man hier, da haben wir hier 5
mal 5 Pixel Bilder mit den Werten beispielsweise A, B, C, D, E, F usw.
und wir haben einen Filter, also eine Maske von einem Filter, die
nennen wir jetzt WXY, ein 3 mal 3 Filter und hat die Werte, wie man
sieht, minus 2, 0, 1, minus 1, 0, 1, minus 2, 0, 2, minus 1, 0, 1 und
wir wollen dieses Filter hier auf dieses Bild anwenden und das
resultierende Bild G hier aufschreiben.
Und was hier textuell eingegeben ist, bedeutet, wenn ich jetzt M, wenn
ich jetzt hier den Wert von diesem mittleren Pixel berechne, von G,
also wenn wir den Wert jetzt hier von diesem mittleren Pixel, also M'
berechnen, dann legen wir dieses Fenster hier oder diese Maske hier
mit dem Zentrum hier auf M, dann sehen wir, da sind eigentlich diese
Nachbarn von M betroffen, also G, L, Q, R, S, N und I und wir
multiplizieren diese Werte mit den Werten von der Maske, also G mit
minus 1 ist minus G, plus 0 mit H ist 0, plus 1 mal I ist I, minus 2
mal L, plus 2 mal N, weil hier ist eine 0, minus Q, ja, minus Q, plus
S.
Und diesen neuen Wert, den wir hier bekommen, den schreiben wir vor
M'.
Und da muss man sich vorstellen jetzt, wir müssen das tatsächlich für
jedes Pixel im Bild machen.
Das heißt, wir müssen diese Maske über das Bild verschieben, über
jedes Pixel verschieben und dann diese Rechnungsvorschrift hier machen
und die Summe der Multiplikation der Werte von der Maske hier mit den
ursprünglichen Werten im Bild, im neuen Pixel hier schreiben.
Da sind ja weitere Beispiele eingegeben, da sieht man hier zum
Beispiel für das Pixel G, da bekommt man ein G' nach diesem
Rechnungsvorschrift, für das Pixel H bekommt man auch sowas und für
das Pixel I sieht man hier, dass man auch die entsprechende
Rechnungsvorschrift hat.
So, wir werden gleich auch sehen, welche Details man beachten muss,
weil wenn ich jetzt einfach frage, wie bilde ich eigentlich, wie wende
ich dieses Fenster oder diese Maske oder dieses Filter hier auf Pixel
A.
Ja, das heißt, ich muss das Zentrum von dieser Maske auf Pixel A
anlegen und dann sehen wir, dass natürlich hier die Pixel drumherum,
für A habe ich nur die Nachbarn B, G und F, aber die anderen Pixel,
die kenne ich ja gar nicht.
Das heißt, diese Randfälle bzw.
die Randpixel, die muss man gesondert betrachten und da kommen wir
gleich hier drauf zu sprechen.
So, allgemein Filteroperationen unterscheidet man auf der einen Seite
zwischen Korrelationen, das heißt, das ist der Prozess, in dem eine
Filtermaske über das Bild bewegt und die Summe der Produkte an jedem
Punkt berechnet werden.
Und wenn man das jetzt ein bisschen formalisieren will, das ist unsere
Maske hier mit S und T als die Parameter und die gehen von Minus A bis
Plus A bzw.
Minus B bis Plus D und wir müssen das Ganze hier, wenn wir einsetzen
von Minus A bis Plus A, das ist die Diskretisierung der Anzahl der
Zeilen im Bild bzw.
Spalten im Bild, müssen wir immer diese Werte hier multiplizieren mit
den entsprechenden Werten von X.
Es gibt aber die Faltung und die Faltung ist der gleiche Vorgang, nur
tatsächlich wird der Filter um 180 Grad gedreht.
Das heißt, man sieht hier die gleiche Multiplikation und Summation,
aber mit X minus S bzw.
Y minus S.
Das heißt, wenn ich hier mit Minus A anfange, dann habe ich natürlich
X plus A und Y plus B im Gegensatz zu X minus A bzw.
Y minus B im übrigen Fall.
Und da gibt es eine ganz schöne Visualisierung, wie das Ganze hier
funktioniert.
Da sieht man hier, wie diese Maske über das Bild bewegt wird und wie
die Werte hier berechnet werden.
Also einfach addieren und praktisch als neuer Pixelwert hinschreiben.
Genau, und wie man hier an dem Beispiel sieht, wenn wir jetzt keine
besonderen Betrachtungen für diese Randpixel machen und wir schauen
nur dorthin, wo diese Operation überhaupt zulässig ist, dass wir mit
jeder Anwendung von einer Pixel- oder Filteroperation das Bild
verkleinern.
Also man sieht hier, dieses dunkelblaue Rechteck bewegt sich hier und
wir können natürlich nur hier die Werte für diese neuen Pixel
bestimmen, aber nicht die Werte für die Randpixel hier von dem Bild.
Das heißt, Standardfilteroperationen können die Auflösung vom Bild
verändern, wenn nur gültige Pixel betrachtet werden, wird das Bild
dann verkleinert, die Ränder werden abgeschnitten, da die Randpixel
nie im Zentrum einer Filtermaske liegen können.
Um jetzt die Größe von dem ursprünglichen Bild zu erhalten, werden die
Ränder oft mit künstlichen Pixeln aufgefüllt, wie man hier sieht, und
dieses Verfahren nennt man Padding.
Da werden wir unterschiedliche Möglichkeiten sehen, was diese
künstlichen Pixel für Werte haben sollen, damit man tatsächlich diese
Berechnungsvorschrift machen kann.
Das heißt die Frage, was passiert mit den Rändern, und da gibt es ja
unterschiedliche Möglichkeiten.
Einmal, dass man sagt, für die Ränder tue ich immer einen konstanten
Wert, zum Beispiel, ich setze die Ränder auf 0, dann bekomme ich so
ein Bild hier, wo der Rand von diesem Bild schwarz ist,
beziehungsweise ich mache so ein Umschlingen, beziehungsweise Rapping,
das heißt das Bild wird hier fortgesetzt, wie man sieht hier, das ist
ja ein Ausschnitt von dem Bild, und da sieht man hier, dass das Bild
drumherum an den Rändern fortgesetzt wird.
Ich kann natürlich das Ganze spiegeln, also Mirroring, beziehungsweise
Reflect, das heißt das Bild wird an den Rändern hier gespiegelt.
Da sieht man hier, zum Beispiel nach der Anwendung von diesem Filter,
bekommen wir das hier, Institute for so and so, und da sehen wir, was
wir hier am Rand bekommen, ist nur die Spiegelung von den letzten
Pixeln, die oben hier sind, beziehungsweise von den Pixeln, die auf
der Seite sind, oder unten, da sieht man hier noch die grüne Tasse,
beziehungsweise ein Teil von dieser Tasse hier.
Oder Wiederholen, beziehungsweise Replicate, das heißt wir nehmen den
letzten Wert, also den letzten Wert, den wir berechnet haben, nehmen
wir und schreiben wir in diesen Randpixel.
Gut,
eine andere Möglichkeit, die nützlich ist, zum Beispiel um die
Auflösung vom ursprünglichen Bild zu verkleinern, also wenn man jetzt
sehr hoch aufgelöste Bilder hat, wenn man sehr hoch aufgelöste Bilder
hat, und man will jetzt vielleicht nicht jedes Pixel wiederverwenden,
dann kann man natürlich die Schrittweise von dem Filter verändern.
Das heißt, dass dieses Filter jetzt nicht auf jedes Pixel
hintereinander angewandt wird, sondern auf jedes zweite Pixel im Bild
angewandt wird.
Das heißt, wenn ich jetzt die Höhe und die Breite des Bildes halbieren
will, ungefähr, dann kann ich das machen, indem ich ungefähr jedes
zweite Pixel für die Filteroperation betrachte oder mit einbeziehe.
So, ja, du hast eine Frage?
Nein, nein, das Padding ist nicht von dem Filter abhängig, Filter ist
ja nur die Maske eigentlich, und die Filteroperation ist das, was wir
vorher erklärt haben, dass wir multiplizieren, aufsummieren und Wert
schreiben, aber es muss gegeben werden, wie man bei solchen
Filteroperationen mit Randpixeln umgeht, also ob das Konstant oder
Rapping oder Replikate oder ähnliches ist.
Genau, das ist keine...
ja.
Mittelung von was?
Ja, wir haben noch nicht über einen Mittelwertfilter geredet.
Wir reden sehr abstrakt hier über eine Filteroperation und wir sagen,
diese Randpixel, die wirst du auch mit einem Mittelwertfilter nicht
berechnen können, weil du kannst ja das Zentrum von der Maske nicht
auf den Randpixeln haben und gültige Werte für alle Nachbarn bekommen.
So, genau.
Jetzt haben wir bis jetzt stillschweigend natürlich gesagt, oder
angenommen, dass wir natürlich in jedem Pixel nur einen Wert haben.
Ja, also das ist eigentlich die Vereinfachung, das sind
Graustufenbilder.
Aber wir wissen beispielsweise bei RGB, dass wir pro Pixel drei Werte
haben.
Also wir haben einen Wert für Rot, einen Wert für Grün und einen Wert
für Blau.
Und die Frage, wie man das heutzutage macht, das sind die Anwendungen
dann auf Graustufenbilder, ist tatsächlich einfach.
RGB-Bilder sind oft auch von großem Interesse und wir wissen ja, dass
wir dort drei Kanäle haben, also für Rot, Grün und Blau.
Und wie geht man damit um?
Jedes Filter hat tatsächlich eine Filter-Maske oder ein Körnerl pro
Eingabekanal.
Das heißt, wir haben ein Filter für Rot, eins für Grün und eins für
Blau, wie man hier bei diesen drei Kanälen sieht.
Und was man macht hier bei der Anwendung von diesem Filter ist, dass
man jeden Körnerl hier auf den zugehörigen Kanal anwendet.
Zum Beispiel, das ist ein Fenster hier auf Kanal Rot, auf Grün und auf
Blau.
Bekommt man natürlich ein Ergebnis.
Wir sehen hier, das Bild wird abgeschnitten, also keine Ränder hier
betrachtet.
Deshalb wird das Bild kleiner.
Und dann addiert man das, was man hier erhalten hat, nach der
unabhängigen Anwendung von dem Filter auf die einzelnen Kanäle.
Summiert man das Ganze und addiert man noch so ein Bias-Term dazu und
bekommt man hier das Endergebnis, wie man hier sieht.
Das sind natürlich ganz interessante Operationen, gerade im Kontext
von Deep Learning.
Also zum Beispiel, wie man tatsächlich die Menge von den Daten
vielleicht reduziert, indem man jetzt nicht jedes Pixel verwendet,
sondern vielleicht jedes zweite Pixel.
Beziehungsweise, wo man die Bilder, wie man sieht, hier auch
verkleinert, um vielleicht effizienter und schneller arbeiten zu
können.
Genau, jetzt gucken wir uns das Ganze ein bisschen an, und zwar, wie
designt man oder entwirft man so einen Filter, um eine bestimmte
Operation mit dem Bild oder einen Effekt mit dem Bild zu erreichen.
Das heißt, wir werden die Masken-Koeffizienten oder Kernel- oder
Fenster -Koeffizienten hier bestimmen.
Wenn ich jetzt ein Bild hier, also das ist unsere Maske mit den
Koeffizienten W1 bis W9, und natürlich, je nachdem, wie wir diese W1
bis W9 haben, haben wir ein unterschiedliches Effekt hier.
Wenn wir das hier als Originalbild nehmen, und wir wenden das hier auf
dieses Bild, dann ist es klar, da kriegen wir überall Null und wir
kriegen eigentlich ein schwarzes Bild.
Also eigentlich löschen wir sozusagen das Bild.
Wenn wir eine Eins hier im Zentrum haben, was würden wir kriegen?
Und wir wenden diese Maske hier auf das Originalbild, mit Eins im
Zentrum, das gleiche nochmal.
Also wir kriegen tatsächlich die Identität, das gleiche Bild.
Und was würden wir kriegen in dem Fall, wenn die Eins hier ist?
Verschiebung.
Wohin?
Wer ist rechts und wer ist links?
So, wir verschieben tatsächlich das ganze Bild hier um ein Pixel nach
links.
Und da sieht man hier das angedeutet durch dieses Randpixel, was weiß
ist.
So, das haben wir schon erwähnt, aber ich will es nochmal hier,
nochmal, also anhand von einem größeren Beispiel, also wo wir so ein
Eingabebild haben, und wir haben nur unser 3x3 Filter hier, wie man
sieht.
Und gut, wir wollen das hier drauf anwenden, das ist wie gesagt unsere
Maske, und das sind hier, damit man noch diese Schreibweise auch
versteht, das sind eigentlich die einzelnen Werte, das W00, W01, W0-1,
W -1-0, und das sind hier die Werte, die in diesem Eingabebild
stecken.
Und was wir tatsächlich machen bei einer Korrelation, ist, dass wir
diese Summe hier bestimmen.
Also W-1-1 multipliziert mit F, also mit Fx-1, Fy-1, plus W-1-0
multipliziert mit Fx-1, Y und so weiter und so fort.
Und dann kriegen wir diesen neuen Wert hier für dieses Pixel, was wir
im ursprünglichen Eingabebild haben.
Bei der Korrelation, bzw.
bei der Faltung, wie ich bereits erwähnt habe, ist das Filter
praktisch um 180 Grad gedreht, das heißt, wie man sieht, vorher haben
wir multipliziert Fx-1, Y-1 mit W-1-1, jetzt multiplizieren wir mit
dem, mit W-1-1, also mit dem Gegenüberliegenden immer.
Und wenn wir das hier vertauschen, dann ist das diese
Faltungsoperation.
Genau, so viel hier dazu.
Nun wollen wir uns mit einigen Filtertypen beschäftigen, und zwar mit
denen man sinnvolle Sachen machen kann, also zum Beispiel
Tiefpassfilter, Hochpassfilter, beziehungsweise auch kombinierte
Filter, oder kombinierte Operationen.
Und da sind vielleicht viele von diesen Filtern hier euch bekannt.
Das erste Filter, was wir hier kennenlernen, ist das sogenannte
Medienfilter.
Und dieses Medienfilter ist ein nicht-lineares Filter zur
Rauschunterdruckung in Bildern.
Also das sieht man hier an dem Beispiel, das ist unser Eingabebild,
wenn wir ein Medienfilter darauf anwenden, dann bekommen wir hier
dieses Bild, wo Rauschen tatsächlich komplett unterdruckt ist.
Die Filterantwort, also das Ergebnis, basiert darauf, dass man die
Reihenfolge der Pixel, also dass man die Werte der einzelnen Pixel im
Bild ordnet, also die Reihenfolge, Ranking der Pixel, die vom
filterumschlossenen Bereich enthalten sind, ordnet.
Das heißt, wir wählen zunächst mal eine Kernelgroße, also 3x3 oder 4x4
Maske für unser Filter.
Wir sortieren alle Werte, also Grauwerte jetzt in dem Beispiel, das
kann auch natürlich auf die unterschiedlichen Kanäle angewandt werden,
im Bereich von diesem Filter, und zwar von dem kleinsten bis zu dem
größten.
Und wir bestimmen den mittleren Grauwert aus den sortierten Pixel.
Also wir nehmen den Wert, der in der Mitte steht.
Also wenn ich jetzt einen 3x3 Filter habe, oder Maske habe, dann weiß
ich, dass das fünfte Element in den Werten in der Mitte ist, weil dann
habe ich vier hier links und vier rechts.
Und wenn ich sie sortiere nach aufsteigend, nehme ich einfach den
ersten in der Mitte.
Und das ist klar, dass ich damit natürlich Rauschen unterdrücke, weil
ich eliminiere die Pixel oder die Werte von Pixeln, die sehr klein
sind, weil die sind immer am Anfang meiner Liste.
Und ich eliminiere die Werte, die sehr groß sind, weil die sind immer
am Ende meiner Liste.
So, das Ganze hier ein bisschen visualisiert anhand von einem
Beispiel.
Nehmen wir mal an, das ist ein 3x3 Filter und wir haben das auf ein
Pixel in einem Eingabebild gelegt.
Und wir berechnen jetzt den Wert für diesen neuen Pixel, und zwar den
neuen Wert für diese 9.
Dann nehmen wir einfach diese Werte, 2, 4, 3, 5, 9, 2, 7, 2, 4 und wir
sortieren sie.
Wir sortieren sie tatsächlich aufsteigend, dann habe ich 2, 2, 2, 3,
4, 4, 5, 7, 9 und jetzt nehmen wir Median und Median ist nichts
anderes als die 4 und diese 4 schreiben wir hier rein.
Und da sieht man jetzt den Effekt, vorher hatte ich einen sehr großen
Wert dort, die 9, die wird nie auftauchen, also sehr große Werte im
Bild, zum Beispiel 255, die werden überhaupt nicht auftauchen, es sei
denn, das ganze Bild ist weiß, 255, und sehr kleine Werte, 0, die
werden auch verschwinden, weil ich immer irgendwas in der Mitte nehme.
Und auf diese Art und Weise bekommt man das hier, wie wir gesehen
haben, das heißt, das ganze Rauschen, das man hier im Bild hat, wird
eliminiert.
Und es gibt hierzu eine ganze Menge von Varianten, also zum Beispiel
statt des Medianwertes kann man auch den maximalen Wert wählen, um den
hellsten Punkt in einem Bild oder die hellsten Punkte in einem Bild zu
finden, beziehungsweise man kann den kleinsten Wert wählen, um die
dunkelsten Punkte in einem Bild zu finden.
Und natürlich durch die Eigenschaft von dem Median, das wir jetzt hier
verwenden, ist das ein nicht lineares Filter.
So, wozu?
Ja, bitte.
Ja, die hellsten Punkte, zum Beispiel die auffälligsten Punkte im
Bild.
Oh, das ist ja ganz wichtig, also zum Beispiel, dass ein Roboter jetzt
zu dem hellsten Punkt im Bild guckt, wo es Licht gibt.
Oder?
Ist nicht überzeugend?
Ach, zum Spaß.
Ja?
Bei was, bei was?
Aber der Nintendo Wii, der kenne ich mit diesen Spielen nicht aus.
Aber, ja?
Und da war ein Max- oder Min-Filter dahinter.
Oder du vermutest, ja?
Okay, aber schauen wir mal, wozu man das verwendet.
Also man verwendet das, um zum Beispiel diesen Salz-Pfeffer-Effekt in
Bildern zu beseitigen.
Also das ist hier eine Platine, wie man sieht, und man sieht hier
schwarze und weiße Punkte auf dieser Platine.
Das nennt man Salz-Pfeffer-Rauschen.
Und die Medium-Filter haben tatsächlich ausgezeichnete Eigenschaften
für die Unterdruckung des Rauschens dieser Art.
Und man sieht hier, wenn man ein 3x3 Mittelwertfilter, also wenn man
wirklich nur die Werte der 9 Pixel addiert und mittelt, also durch 9
dividiert, bekommt man sowas.
Ist auch ein Filter, mit dem man Rauschunterdruckung machen kann.
Aber wenn man einen Medium-Filter verwendet, dann sieht man, dass man
ein sehr sauberes und sehr rauschfreies Bild hier bekommt.
Genau.
Also das ist der erste Filter, den wir kennenlernen, was wir jetzt
konkret kennengelernt haben.
Das zweite Filter ist ein Mittelwertfilter, was du vorher erwähnt
hast.
Und die Idee ist die gleiche.
Also man hat eine Filtermaske.
Ich addiere alle Werte von den 9 Pixel zusammen und dividiere sie
durch 9, weil ich ja Mittelwert bilde.
Beziehungsweise eine Filtermaske, wo ich in jedem Pixel 1,9 habe.
Und wenn ich jetzt die Werte 50, 52, 55 habe, dann sieht man, dass ich
überall hier mit 1 durch 9 multipliziere und dann das Ergebnis hier in
diesem Bild schreibe.
Und da sieht man hier bei den Werten, die wir vorher hatten, 50, 45,
50, 52, 48, 60, 55, dass wir auf einen Wert von 52 hier kommen.
Und auf diese Art und Weise natürlich unterdrückt man auch Rauschen,
wie wir in dem Beispiel hier gesehen haben, aber nicht so wie bei dem
Mediumfilter.
Genau, und die Berechnungsvorschrift ist die gleiche wie vorher.
Also wir gehen hier bei diesem 3x3 Filter von s gleich minus 1 zu 1,
also s gleich minus 1, 0 und 1, damit wir die 3 Pixel der Maske
überdecken und t von der anderen Richtung auch von minus 1 zu 1, also
deshalb nicht wundern, das sind die 3 Werte für die Pixel in der
Maske.
Wenn ich jetzt eine 5x5 Maske habe, dann habe ich hier bei dieser
Summe s gleich minus 2 bis plus 2, bzw.
t gleich minus 2 bis plus 2.
Okay, und mithilfe von diesem Mittelwertfilter kann man tatsächlich
so, wie es hier auf der Folie steht, Rauschen unter Druckung, und die
Größe natürlich ist beliebig wählbar von dieser Maske oder von diesem
Körnerl.
Und da sieht man hier eigentlich die Anwendung, ich hoffe das kann man
da hinten sehen, aber das ist natürlich hier viel mehr geglättet, bzw.
das Rauschen viel mehr unterdruckt auf der rechten Seite als auf der
linken Seite.
Gut, wir werden dann noch weitere Filter kennenlernen, aber ich würde
an der Stelle hier aufhören heute in der Vorlesung, weil ich einen
wichtigen Zug erwischen muss.
Ich schenke euch sozusagen die 12 Minuten und bedanke mich für die Aufmerksamkeit.