Home | Index of Lectures | << Prev | Next >> | PDF Version of Page |
Image Processing: Histogram and Image DefectsCopyright © by V. Miszalok, last update: 2009-06-16 |
|
Let me know what you think |
Histogramm |
Objectives |
What for is a histogram ? How to compute it ? What does it tell about a picture ? |
Knowing the 4 most important picture defects. |
Summary |
A histogram summarizes the pixel values of a picture. |
There are characteristic histograms for typical picture contents. |
The best threshold for binarisation is a valley of the histogram. |
Noise is the random part of a pixel value. |
Shading has nothing to do with shade. It comes from inhomogenous illumination. |
Contrast is the quotient (minimal value / maximal value ) * 100%. |
Blurring is the flattening of a value by its neighbor values. |
Das Histogramm eines Bildes ist ein Array der Länge 256, wobei jedes Feld H[g] die Anzahl der Pixel des Bildes enthält, die den Grauwert g haben.
H[0] enthält also die Zahl der Nullen im Bild, H[1] die Zahl der Einsen usw.
Grauwert- und Palettenbilder besitzen ein, TrueColor-Bilder besitzen drei Histogramme.
Das Histogramm bzw. die drei Histogramme informieren über grundlegende Bildeigenschaften: Belichtung, Kontrast, Farbanteile etc.
Beispiel: Code für das berechnen des Histogramms int H[256] eines Bildes Byte I[ySize][xSize],
H muss mit Nullen vorbesetzt sein.
Langsamer Code:
for ( y=0; y < ySize; y++ )
for ( x=0; x < xSize; x++ )
H[I[y][x]]++;
Schneller Code:
int* pointer = I;
for ( i=0; i < xSize*ySize; i++ ) H[*(pointer+i)]++;
Sehr schneller Code:
for ( int* pointer = I; pointer < I + xSize*ySize; ) H[*pointer++]++;
Beispiel: gegeben I[4][5], gesucht H[10]
01020 I[4][5]= 27891 Lösung: H = [ 5, 4, 3, 2, 0, 1, 1, 2, 1, 1 ] 06571 Probe: Summe des Histogramms muss ySize*xSize = 4*5 = 20 ergeben. 13230
Histogramme werden in der Regel in Form von Balkendiagrammen visualisiert. Auf der horizontalen Achse verlaufen die Grauwerte von 0 bis 255, parallel zur vertikalen Achse stehen die Häufigkeiten. Professionelle Videokameras zeigen die drei (RGB) Histogramme online auf den Bildmonitoren. Das ermöglicht dem Kameramann ein Online-Kontrolle von Beleuchtung, Blende, Bildausschnitt etc.
Beispiele für häufige und berühmte Histogramme:
Binarisierung ist eine wichtige Stufe zur Vorbereitung einer Mustererkennung. Man benötigt dazu eine Schwelle = Threshold, die Vordergrund von Hintergrund trennt. Ideal geeignet zur Schwellwertfindung sind zweigipflige Histogramme, wo man die Schwelle ins Tal zwischen den beiden Gipfeln positioniert.
Binarisierungsalgorithmus für Bilder mit zweigipfligen Histogrammen:
Langsamer Code:
for ( y=0; y < ySize; y++ )
for ( x=0; x < xSize; x++ )
if ( I[y][x]] < threshold ) I[y][x] = 0; else I[y][x] = 255;
Schneller Code:
int* pointer = I;
for ( i=0; i < xSize*ySize; i++, pointer++ ) if ( *pointer < threshold ) *pointer = 0; else *pointer = 255;
Sie finden eine Bauanleitung zu diesem Thema unter: ../../C_IPCis/C2_Histo/CIPCisHisto_d.htm,
oder Sie können eine lauffähiges EXE downloaden: ../../C_IPCis/C2_Histo/CIPCisHisto.exe.
Lena with 50% Noise |
Rauschen ( engl.: noise ) ist die additive Überlagerung eines idealen Bildes I mit einer Zufallsfunktion N. 0000 1021 1021 I = 0550 N = 2101 Bild = I+N = 2651 0000 0102 0102 |
Fast jedes reale Bild enthält > 10% Rauschen. Primärursache ist eine spontane Ladungstrennung in den Elementarsensoren, die nicht von Photonen verursacht ist, sondern von der Brown'schen Molekularbewegung. Häufige Sekundärursachen: 1) kopieren analoger Videos, 2) lange Lagerzeiten bespielter Magnetbänder.
Man bekämpft das primäre Rauschen durch Chipkühlung des Sensorarrays mit flüssigem Stickstoff oder Peltier-Element (benannt nach Jean Peltier 1834) = 2-schichtige Platte, die unter Gleichstrom auf der einen Seite kalt und auf der anderen warm wird. Molekularbewegung und Rauschen sinken bei fallender Temperatur des Sensorarrays und verschwinden bei -273 Grad Celsius. Chipkühlung = wichtige Eigenschaft professioneller Videoaufnahmetechnik. Nachteil: hoher Energieverbrauch = kurze Akkulaufzeit.
Andere Methode der Rauschunterdrückung = Tiefpassfilter (siehe unten)
siehe auch: Kovalevsky/ImProc/L01_Noise/Noise_e.htm
Lena with Shading |
Shading ist die additive Überlagerung eines idealen Bildes I mit einer langsam ansteigenden oder abfallenden Rampenfunktion S. Eigentlich heißt Shading wörtlich übersetzt Schattierung, was die Sachlage falsch beschreibt. Shading hat nichts mit Schatten zu tun, die Bezeichnung ist irreführend, aber sie wird trotzdem benutzt (außer in Japan und China, wo man viel treffender "schräges Licht" sagt). 22222 -2-1+0+1+2 01234 I=66666 S=-2-1+0+1+2 Bild=I+S=45678 22222 -2-1+0+1+2 01234 |
Fast jedes reale Bild enthält >1% Shading. Es ist schwer, eine Fläche homogen auszuleuchten.
Shadingkorrektur: Erzeugung eines Leerbildes S, das keinen Bildgegenstand enthält und Subtraktion: I = Bild - S.
Methoden zur Erzeugung eines Leerbildes S:
1) real: Immer 2 Photos aufnehmen: mit und ohne Bildgegenstand
2) künstlich: Bild unter Milchglasscheibe photographieren, so dass man die ungleichmäßige Beleuchtung erkennt aber keinen Bildinhalt
3) digital: auf Bild starken Tiefpassfilter anwenden, so dass man die ungleichmäßige Beleuchtung erkennt aber keinen Bildinhalt
4) digital: vertikale Regressionsgeraden der Bildspalten und anschließende horizontale Regression der Zeilen liefert ein exzellentes Leerbild ohne jeden Bildinhalt (siehe C#-Programm: Demo: shading.exe).
In der realen Welt gibt es überall schweres Shading. Alle natürliche Bildverarbeitung hat keinerlei Probleme damit und empfindet seine Existenz kaum als Mangel. Aber für die maschinellen Bildverarbeitung ist Shading ist ein schweres Problem, weil es die Binarisierung an Hand einer Schwelle stört.
Siehe obiges Beispiel: Zur Binarisierung von I eignen sich alle Schwellwerte zwischen 3 und 5, aber für Bild gibt es überhaupt keinen brauchbaren Schwellwert.
C# Code: | shading.htm | shading.pdf | Demo: shading.exe |
Dreimal Lena mit schlechtem Kontrast: |
Bildunschärfe = Verwaschung ist die „Glättung“ eines idealen Bildes I dadurch, dass jeder Grauwert durch seine Nachbargrauwerte hinauf oder hinab gezogen wird.
Ursachen: Falscher Focus, Bewegung des Objekts, Bewegung der Kamera (=Verwackeln), Streulicht
Ursachen von Streulicht: Nebel, unsaubere optische Flächen, Fremdkörper im Strahlengang
Beispiel: 0000000 0013100 0099900 0136310 I = 0099900 -> Blurring = 0369630 0099900 0136310 0000000 0013100 |
siehe: Image Processing: Filters |
top of page: |