In den Bildern unseres Versuchsaufbaus kann man deutlich einige Stellen erkennen, die keinen exakten Wert enthalten. Sie besitzen den Tiefenwert 0 und sind als schwarze Punkte in dem Tiefenbild zu erkennen. Diese fehlerhaften Bildpunkte sind auf den Versuchsaufbau zurückzuführen. Da der IR-Projektor und der IR-Sensor 7,5cm voneinander entfernt sind, kommt es zu einer Schattenbildung. Für diese Schatten kann kein direkter Tiefenwert errechnet werden. Daher werden sie als 0 Value dargestellt und bilden Lücken im Tiefenbild.
Zum Thema Filling werden zwei Ideen vorgestellt, in den versucht wird, diese Lücken zu schließen. Die Suche nach fehlerhaften Bildpunkten und der Aufruf der Filling Methoden wird in Algorithmus Abbildung [5] dargestellt.
Algorithm 5Filling Start Pseudocode
1: forY:Alle Zeilendo
2: forX: Alle Spaltendo
3: ifTiefenwert(X,Y) == 0then
4: DepthFilling(X,Y)
5: GrayFilling(X,Y)
6: end if
7: end for
8: end for
5.3.1 Depth Filling
Diese Variante des Filling beschäftigt sich damit, die einzelnen fehlerhaften Bildpunkte, die in unserem Tiefenbild existieren, zu befüllen. Hierbei werden nur die Informationen aus dem Tiefenbild genutzt. Die Idee dahinter ist, diese Bildpunkte anhand eines Durchschnittswertes zu befüllen. Der Durchschnittswert soll aus Punkten bestehen die in einer Zeile zu dem gefundenen fehlerhaften Bildpunkten bestehen. Hier kann man nun sehr variieren. Einerseits schaut man sich an, wie sich das Bild verändert, wenn man nur eine kleine Anzahl an Bildpunkten der Zeile nutzt. Weiterhin wird untersucht, wie die Werte sich verändern, wenn man eine große Anzahl von Bildpunkten nutzt, um die fehlerhaften Bildpunkte zu befüllen.
5 Design der Qualitätsverbesserungsverfahren
Algorithm 6Depth-Filling Pseudocode
1: AnzPixel = 5 // Anzahl der Pixel die zur Durchschnittsberechnung verwendet werden
2: Value = 0
3: count = 0
4: Ergebnis = 0
5: forX: von X aus bis X - AnzPixeldo
6: ifX >0then
7: ifT ief enImage(X, Y)! = 0then
8: Value = Value + TiefenImage(X,Y)
9: count++
10: end if
11: end if
12: end for
13: forX: von X aus bis X + AnzPixeldo
14: ifX < T ief enImageBreitethen
15: ifT ief enImage(X, Y)! = 0then
16: Value = Value + TiefenImage(X,Y)
17: count++
18: end if
19: end if
20: end for
21: ifcount >0then
22: Ergebniss = Value/count
23: end if
5 Design der Qualitätsverbesserungsverfahren
5.3.2 Grauwert Filling
Im Grauwert-Filling wird untersucht, wie die fehlerhaften Bildpunkte des Tiefenbildes mit Hilfe des Grauwertbildes befüllt werden können. Die Idee ist hierbei, sich fehlerhaften Bildpunkte aus dem Tiefenbild zu suchen. Sobald einer gefunden wird überprüft man, ob es ein einzelner fehlerhafter Bildpunkt ist oder ob es mehrere aufeinanderfolgende fehlerhafte Bildpunkte sind. Sollten es mehrere aufeinanderfolgende Bildpunkte sein, muss man das Ende dieser fehlerhaften aneinandergereiten Bildpunkte bestimmen. Somit erhält man eine Menge von fehlerhaften Bildpunkten.
Nun folgt der Teil, weswegen das aufgenommene Tiefenbild und das aufgenommene RGB-Bild des Versuchsaufbaus gemappt wurden. Somit besitzt man eine Referenz zu den gefundenen fehlerhaften Bildpunkten, da die Koordinaten der beiden Bilder übereinstimmen.
Man besitzt nun einen oder eine Menge von fehlerhaften Bildpunkten und die Referenz in Form des Grauwertbildes, welches aus dem RGB-Bild gewonnen wurde.
Der nächste Schritt ist, die gefundenen fehlerhaften Bildpunkt-Koordinaten zu nehmen und die Grauwerte, die man durch diese erhält, zu vergleichen.
In diesem Versuch wird eine einfache Methode angewendet, um die fehlerhaften Bildpunkte zu befüllen. Da die Koordinaten der fehlerhaften Bildpunkte bekannt sind, wird der Fokus auf den vorderen und hinteren Bereich des fehlerhaften Bildpunktes bzw. der Menge an
fehlerhaften Bildpunkten gelegt. Dazu speichert man eine bestimmte Anzahl der
Graubild-Bildpunkte in einem Zwischenspeicher. Dies wird für einen bestimmten Bereich vor dem ersten fehlerhaften Bildpunkt und für den selben Bereich hinter dem letzten fehlerhaften Bildpunkt gemacht. Als nächstes schaut man sich die Grauwerte der fehlerhaften Bildpunkte an und vergleicht diese mit den vorderen und hinteren gespeicherten Bildpunkten. Liegt eine Übereinstimmung mit einem passenden Wert vor, wird der fehlerhafte Bildpunkt durch den Tiefenwert des jeweiligen Bereiches ersetzt. Weitere Details hierzu und zu einer Auswertung folgen im nächsten Kapitel Ergebnisse [6].
5 Design der Qualitätsverbesserungsverfahren
Algorithm 7Gray-Filling Pseudocode
1: m = 10 // Menge der Punkte die Untersucht werden sollen vor und hinter den fehlerhaften Bildpunkten
2: count = 0
3: startDepth = 0
4: endDepth = 0
5: GrauwertVorPunkt[m] // Grauwerte vor dem fehlerhaften Bildpunkt
6: GrauwertNachPunkt[m]// Grauwerte nach dem fehlerhaften Bildpunkt
7: AnzPixel = findeLochLänge(X,Y) // hier wird die Menge an Fehlerhaften Bildpunkten bestimmt
8: if(X−m)>0∧(X+m+AnzP ixel)< ImageBreitethen
9: startDepth = TiefenImage(X-1,Y)
10: endDepth = TiefenImage((X + AnzPixel + 1), Y)
11: whilecount < mdo
12: GrauwertVorPunkt[count] = ImageGray(X - count,Y)
13: GrauwertNachPunkt[count] = ImageGray(x + AnzPixel + count)
14: count++
15: end while
16: end if
17: forX: Iteriere über X + AnzPixeldo
18: count = 0
19: whilecount < mdo
20: ifImageGray(X, Y) ==GrauwertV orP unkt[count]then
21: TiefenImage(X,Y) = startDepth
22: BREAK
23: end if
24: ifImageGray(X, Y) ==GrauwertN achP unkt[count]then
25: TiefenImage(X,Y) = endDepth
26: BREAK
27: end ifcount++
28: end while
29: end for
5 Design der Qualitätsverbesserungsverfahren
Abbildung 5.9: Skizze zur Idee des Gray-Filling
In Bild5.9soll skizziert, die Idee hinter dem Gray-Filling veranschaulicht werden. Dargestellt ist hier ein Ausschnitt aus einer Zeile, in dem Grauwertbild. Hier kann man auf der einen Seite den Grauwert G1 sehen und auf der anderen Seite den Grauwert G2. Zwischen beiden Grauwerten soll eine Menge an fehlerhaften Bildpunkten dargestellt sein. In der Mitte der Menge von fehlerhaften Bildpunkten soll eine Kante existieren. Die Idee hinter diesem Ansatz ist es, die fehlerhaften Bildpunkte mit den Tiefenwerten des jeweiligen Grauwerts bis zu der Kante, in der Menge der fehlerhaften Bildpunkte aufzufüllen.
6 Ergebnisse
In diesem Kapitel werden die in Kapitel5beschriebenen Verfahren, hinsichtlich Ihrer Eigenschaften untersucht und miteinander verglichen.
Die Verfahren werden an drei verschiedenen Beispielen dargestellt. Jedes dieser Beispiele besitzt Besonderheiten, die eine bessere Darstellung der Problemeffekte ermöglichen.
(a) Beispiel 1 Farbbild (b) Beispiel 1 Tiefenbild
Abbildung 6.1: Beispiel 1
Bild6.1(a)und Bild6.1(b)zeigen das erste Beispiel, welches in den jeweiligen Tests verwendet wurde. Hier sind zwei einfache Objekte dargestellt. Diese beiden Objekte stehen
hintereinander und weisen an ihren Rändern fehlerhafte Bildpunkte auf.
6 Ergebnisse
(a) Beispiel 2 Farbbild (b) Beispiel 2 Tiefenbild
Abbildung 6.2: Beispiel 2
Bild6.2(a)und Bild6.2(b)zeigen das zweite Beispiel. Hier findet man verschiedene Fehlereffekte. Zum einen zeigen sich hier große Kanten, wie die Tür und der Schrank.
Desweiteren findet man Spiegel, also reflektierende Oberflächen und einen Stuhl, als Objekt in diesem Bild. Darüber hinaus sind verrauschte Kanten in dem Bild zu erkennen.
(a) Beispiel 3 Farbbild (b) Beispiel 3 Tiefenbild
Abbildung 6.3: Beispiel 3
Bild6.3(a)und Bild6.3(b)zeigen das dritte Beispiel. Hier findet man eine Vielzahl von Kanten, sowie einen Stuhl. Der Hauptgrund für die Verwendung dieses Beispiels ist, die hohe Anzahl an fehlerhaften Bildpunkten in diesem Bild.
6 Ergebnisse