850 likes | 1.04k Views
Kapitel 10: Farbbilder. RGB-Farbbilder Farbräume und Farbkonversion Colorimetrische Farbräume Statistiken von Farbbildern Farbquantisierung. 1 RGB-Farbbilder. Schwerpunkte dieses Kapitels: Programmtechnische Behandlung von Farbbildern
E N D
Kapitel 10: Farbbilder • RGB-Farbbilder • Farbräume und Farbkonversion • Colorimetrische Farbräume • Statistiken von Farbbildern • Farbquantisierung BV: Kap 10: Farbbilder
1 RGB-Farbbilder • Schwerpunkte dieses Kapitels: • Programmtechnische Behandlung von Farbbildern • Umwandlung zwischen unterschiedlichen Farbdarstellungen • RGB-Farbschema • Basiert auf Kombination der Primärfarben Rot (R), Grün (G) und Blau (B) • Standardformat für Computer, Digitalkameras, Scanner, Bildbearbeitungsprogramme, … • Additives Farbsystem: ausgehend von schwarz weitere Farben hinzufügen • Intensität der Farbkomponenten bestimmt Ton und Helligkeit der resultierenden Farbe • Auch grau und weiß sind Mischfarben BV: Kap 10: Farbbilder
RGB-Farbraum BV: Kap 10: Farbbilder
RGB-Farbraum • Dreidimensionaler Würfel • Koordinatenachsen: Primärfarben R,G und B • RGB-Werte: positiv, meist [0,255] • Mögliche Farben entsprechen Punkten im Würfel • Häufig: Normalisierung auf Intervall [0,1] • Schwarz: S = (0,0,0) • Weiß: W = (1,1,1) • Grautöne (nicht-bunt): • Gerade zwischen S und W • R = G = B BV: Kap 10: Farbbilder
Farbbild mit RGB-Komponenten als Grauwertbild Früchte - Großteils rot u. gelb - Geringer B-Anteil Tischdecke: - Hoher B-Anteil BV: Kap 10: Farbbilder
1.1 Aufbau von Farbbildern • Darstellung: Array von Pixel • Alternativen • Vollfarbenbilder: gleichförmig gesamter Farbraum • Indexbilder: beschränkte Anzahl von Farben • Vollfarbenbilder • Jeder beliebige Farbwert • Einsatz: viele, unterschiedliche Farben, z.B. Foto • Mögliche Anordnung • Komponentenanordnung: Array pro Primärfarbe • Gepackte Anordnung: Primärfarben in gemeinsamen Pixel BV: Kap 10: Farbbilder
Komponentenanordnung BV: Kap 10: Farbbilder
Gepackte Anordnung BV: Kap 10: Farbbilder
Indexbilder • Beschränkte Anzahl unterschiedlicher Farben • Einsatz: Illustrationen, Grafiken, … • Format: GIF, PNG • Pixel-Array: Indizes auf Farbtabelle • Farbtabelle im Bild gespeichert BV: Kap 10: Farbbilder
RGB-Indexbild BV: Kap 10: Farbbilder
1.2 Farbbilder in ImageJ • Zwei alternative Darstellungen • RGB-Vollfarbenbilder (RGB Color) • Indexbilder (8-bit Color) • RGB-Vollfarbenbilder • Gepackte Anordnung • Pro Farbpixel 32 Bit • Je 8 für Transparenz, R, G, B • ImageJ verwendet Transparenz nicht BV: Kap 10: Farbbilder
Zugriff auf Pixelwerte • Pixel laden int c = ip.getPixel(u,v) int r = (c & 0xff0000) >> 16 // rot int g = (c & 0xff00) >> 8 // grün int b = (c & 0xff) // blau • Pixel speichern int r = 169; int g = 212; int b = 17; int c = ((r & 0xff)<<16) | ((g & 0xff)<<8) | b & 0xff); • Zugriff sehr effizient BV: Kap 10: Farbbilder
ImageJ-Alternative int[] RGB = new int[3] RGB = ip.getPixel(u,v,RGB); int r = RGB[0]; int g = RGB[1]; int b = RGB[2]; … ip.putPixel(u,v,RGB); • Zugriff sehr langsam BV: Kap 10: Farbbilder
Bitoperationen auf RGB-Bild getPixels() liefert Referenz auf Pixel-Array, d.h. nur eine for-Schleife BV: Kap 10: Farbbilder
ImageJ-Operationen auf RGB-Bild BV: Kap 10: Farbbilder
ImageJ-Vollfarbenbildern • Unterstützte Arten von Bilddateien • TIFF (nur unkomprimiert): 3x8-Bit-RGB • BMP, JPEG: 3x8-Bit-RGB • PNG (nur lesen): 3x8-Bit-RGB • RAW: File->Import->Raw eigene Formate • Erzeugen von RGB-Bildern int w = 640, h = 480; ColorProcessor cProc = new ColorProcessor(w,h); ImagePlus cWin = ImagePlus("Farbbild",cProc); cWin.show(); BV: Kap 10: Farbbilder
Indexbilder • Struktur entsprechend Folie 10 • Index-Array 8 Bits groß • d.h. 256 unterschiedliche Farben • Unterstützte Arten von Bilddateien • GIF: 3x8-Bit-Farbwerte • PNG (nur lesen): 3x8-Bit-Farbwerte • BMP, TIFF (nur unkomprimiert): 3x8-Bit-Farbwerte • Verarbeitung von Indexbildern • Verarbeitung auf Farbtabelle, z.B. Intensität erhöhen • Keine Verarbeitung auf Pixel-Array • Anwendung von Filtern erfordert Konvertierung in Vollfarbenbild BV: Kap 10: Farbbilder
Intensität in Farbtabelle erhöhen BV: Kap 10: Farbbilder
Indexbild -> Vollfarbenbild BV: Kap 10: Farbbilder
Erzeugen von Indexbildern ByteProcessor makeIndexColorImage( int w, int h, int nColors){ byte[] rMap = new byte[nColors]; byte[] gMap = new byte[nColors]; byte[] bMap = new byte[nColors]; byte[] pixels = new byte[w * h]; IndexColorModel cM = new IndexColorModell(8,nColors,rMap,gMap,bMap); return new ByteProcessor(w,h,pixels,cM); } BV: Kap 10: Farbbilder
Konvertieren von Farbbildern in ImageJ:Konvertieren mittels ImageKonverter BV: Kap 10: Farbbilder
Duplizieren mittels TypeConverter BV: Kap 10: Farbbilder
Anwendung ImageConverter und TypeConverter • Anwendung ImageConverter ImagePlus ipl; ImageConverter ic = new ImageConverter(ipl) ic.convertToRGB(); // ipl ist jetzt Farbbild • Anwendung TypeConverter ImageProcessor ipr1; TypeConverter tc = new TypeConverter(ipr1,false); ImageProcessor ipr2 = tc.convertToRGB(); // ipr1 bleibt unverändert BV: Kap 10: Farbbilder
2 Farbräume und Farbkonversion • RGB einfache Darstellung auf Computer • Entspricht jedoch nicht der subjektiven Wahrnehmung • Verschiebung von Farbpunkten führt abhängig vom Ausgangspunkt subjektiv zu unterschiedlichen Farbänderungen • Bei jeder Koordinatenänderung ändern sich Farbton, Sättigung und Helligkeit gleichzeitig • Alternative Farbräume, z.B. HSV, stellen subjektive Farbeigenschaften explizit dar • Spezielle Farbräume auch im Druck und der TV-Übertragung BV: Kap 10: Farbbilder
Verschiedene Farbräume Landschaftsbild mit hohem Grün-/Blau-Anteil Sonnenflecken mit hohem Rot-/Gelb-Anteil BV: Kap 10: Farbbilder
2.1 Umwandlung RGB in Grauwertbilder • Einfachster Fall: Durchschnitt von RGB • Subjektiv: Helligkeit von Rot oder Grün höher als Blau • Luminanz: gewichtete Summe • Gewichte: • Analoges TV: • Digitale Kodierung: BV: Kap 10: Farbbilder
Unbunte Farbbilder • RGB-Bild ist unbunt, wenn für alle I(u,v): R = G = B • Farbe aus RGB-Bild entfernen: gewichtete Grauwerte setzen • Resultierendes Grauwertbild hat subjektiv die gleiche Helligkeit BV: Kap 10: Farbbilder
2.2 Desaturierung von Farbbildern • Grundlegende Eigenschaften von Farbe: Farbton, Farbsättigung und Helligkeit • Saturation: Farbsättigung, d.h. Ausmaß, in dem sich farbiger Reiz von einem gleich hellen Grau unterscheidet • Desaturierung (kontinuierliche Änderung) des Farbanteils durch lineare Interpolation • Faktor scolЄ [0,1] steuert Farbigkeit • scol = 0: Grauwertbild • scol = 1: unverändertes Farbbild BV: Kap 10: Farbbilder
Desaturierung im RGB-Raum BV: Kap 10: Farbbilder
2.3 HSV / HSB- und HLS-Farbraum HSV-Farbraum • H: Hue (englisch) , d.h. Farbton • S: Saturation, d.h. Farbsättigung • V: Value, d.h. Helligkeit • Alternative Bezeichnung: HSB (Brightness) • Darstellung: umgekehrte sechseckige Pyramide • Vertikale Achse: V-Wert • Horizontaler Abstand: S-Wert • Drehwinkel: H-Wert • Schwarz: untere Spitze der Pyramide • Weiß: Zentrum der Basisfläche • Ecken: • Drei Primärfarben: Rot, Grün, Blau • Drei Mischfarben: Gelb, Cyan, Magenta • Alternative Darstellung: zylindrischer Raum BV: Kap 10: Farbbilder
HSV- und HLS-Farbraum BV: Kap 10: Farbbilder
HLS-Farbraum HLS • H: Hue • L: Luminance • S: Saturation • Vergleich HSV: • H identisch • L und S: entsprechen V und S, aber anders berechnet • Darstellung: Doppelpyramide • Schwarz, Weiß: an den Spitzen • Grundfarben: an den Ecken • Alternative Darstellung: zylindrischer Raum • Weiter Details [Burger2005] S.258 – S.262 BV: Kap 10: Farbbilder
Zylindrischer HLS-Farbraum BV: Kap 10: Farbbilder
Konvertierung RGB -> HSV • RGB Є [0..Cmax], typisch: Cmax = 255 • Chigh = max(R,G,B) • Clow = min(R,G,B) • Crng = Chigh – Clow • Sättigung S: • Helligkeit V: BV: Kap 10: Farbbilder
Berechnung H • R=G=B: Crng = 0, SHSV= 0 -> HHSV ist unbestimmt • Crng > 0: Berechnung der Farbkomponenten • Berechnung des Farbtons im Intervall [-1 ..5] • Normierung auf das Intervall [0,1] BV: Kap 10: Farbbilder
Beispiel: Magenta • (R,G,B) = (255,0,255) • Chigh = 255; Clow = 0; Crgn = 255 • S = 255/255 = 1 • V = 255/255 = 1 • R‘ = (255-255)/255 = 0 • G‘ = (255-0)/255 = 1 • B‘ = (255-255)/255 = 0 • H‘ = B‘ – G‘ = 0 – 1 = -1 • H = 1/6 * (-1 + 6) = 5/6 BV: Kap 10: Farbbilder
Zylindrischer HSV-Farbraum BV: Kap 10: Farbbilder
Farbbild mit RGB und HSV als Grauwertbild • Dunkle Bereiche in HHSV: • Rot (0) und gelb (1/6) • Hohe Sättigung • Mittlere Helligkeit BV: Kap 10: Farbbilder
Java-Implementierung • Klasse java.awt.Color: float[] RGBtoHSB(int r,int g,int b,float[] hsv); • Nutzung import java.awt.Color; … float[] hsv = new float[3]; int red = 128; green = 255; blue = 0; hsv = Color.RGBtoHSB(red,green,blue,hsv); float h = hsv[0]; float s = hsv[1]; float v = hsv[2]; … BV: Kap 10: Farbbilder
HSV -> RGB • Farbsektor ermitteln [0,1] -> [0,6[ • Zwischenwerte ermitteln (Ganzzahl, Nachkomma) • v = VHSV • Normalisierte RGB-Werte ermitteln BV: Kap 10: Farbbilder
HSV -> RGB • Skalierung auf ganzzahligen Bereich • Java-Implementierung der Klasse java.awt.Color int HSBtoRGB(float h, float s, float v); BV: Kap 10: Farbbilder
Beispiel: Magenta • (H,S,V) = (5/6,1,1) • H‘ = 5,0 • c1 = 5; c2 = 0 • x = (1 – 1) * 1 = 0 • y = (1 – (1 * 0)) * 1 = 1 • z = (1 – (1 * (1 – 0)) * 1 = 0 • (R‘,G‘,B‘) = (1,0,1) • (R,G,B) = (255,0,255) BV: Kap 10: Farbbilder
Java-Implementierung BV: Kap 10: Farbbilder
2.4 TV-Komponentenfarbräume – YUV und YCbCr • Standarisierte Aufnahme, Übertragung und Wiedergabe im TV-Bereich • YUV: analoges NTSC und PAL-System • YCbCr : digitales Fernsehen • Gemeinsam: Luminenz Y und zwei Chroma-Komponenten (Farbdifferenzen) • Ziele • Kompatibilität mit Schwarz-/Weiß-Systemen • Optimale Ausnutzung von Übertragungskanälen • Schärfe der Farben weniger relevant als Schärfe der Helligkeit • Farben benötigen ¼ der Helligkeit-Bandbreite • Auch bei Kompression genutzt: JPEG BV: Kap 10: Farbbilder
YUV • Berechnung der Luminanz anhand der bereits gamma-korrigierten RGB-Werte • Berechnung der Farbdifferenzen U und V BV: Kap 10: Farbbilder
Resultierende Matrix-Transformationen • RGB -> YUV • YUV -> RGB BV: Kap 10: Farbbilder
YCbCr • Unterschied zu YUV: Zusammenhang zwischen Gewichtung der RGB-Komponenten und Chroma-Werte • ITU-Empfehlung: wR = 0.299 wG = 0.587 wB = 0.114 • Transformation RGB -> YCbCr : BV: Kap 10: Farbbilder
YCbCr • Transformation YCbCr -> RGB : BV: Kap 10: Farbbilder
Resultierende Matrix-Transformation • RGB -> YCbCr • YCbCr -> RGB BV: Kap 10: Farbbilder