Beim Auge wird die Helligkeitsinformation mit der Farbinformation, durch Rezeptorenarten, wie Stäbchen und Zäpfchen, auch getrennt bzw haben verschiedene Empfindlichkeiten. Die Stäbchen sind zuständig für die Helligkeitsinformation und können bei niedrigen Lichtstärken alleine Arbeiten.
for(int y = 0; y < bmp.image.getHeight(); y++) {
for(int x = 0;x < bmp.image.getWidth(); x++) {
PixelColor pix = bmp.image.getRgbPixel(x, y);
pix = new PixelColor(0, 0, pix.b);
bmp.image.setRgbPixel(x, y, pix);
}
}
// erzeugt Y-bild
for(int y = 0; y < bmp.image.getHeight(); y++) {
for(int x = 0;x < bmp.image.getWidth(); x++) {
PixelColor pix = bmp.image.getRgbPixel(x, y);
double luminanz = (0.299 * pix.r + 0.587 * pix.g + 0.114 * pix.b);
pix.r= (int) luminanz;
pix.g=(int) luminanz;
pix.b=(int) luminanz;
PixelColor pixLumi = new PixelColor(pix.r, pix.g, pix.b);
bmp.image.setRgbPixel(x, y, pixLumi);
}
}
Y-Bild
// erzeugt Cb-Bild
for(int y = 0; y < bmp.image.getHeight(); y++) {
for(int x = 0;x < bmp.image.getWidth(); x++) {
PixelColor pix = bmp.image.getRgbPixel(x, y);
int cbr = (int) (-0.169 * pix.r +128);
int cbg = (int) (-0.331 * pix.g +128);
int cbb = (int) (0.5 * pix.b +128);
PixelColor pixCb = new PixelColor(cbr, cbg, cbb);
bmp.image.setRgbPixel(x, y, pixCb);
}
}
Cb-Bild
// erzeugt Cr-Bild
for(int y = 0; y < bmp.image.getHeight(); y++) {
for(int x = 0;x < bmp.image.getWidth(); x++) {
PixelColor pix = bmp.image.getRgbPixel(x, y);
int crr = (int) (0.5* pix.r +128);
int crg = (int) (-0.491 * pix.g +128);
int crb = (int) (-0.081 * pix.b +128);
PixelColor pixCr = new PixelColor(crr, crg, crb);
bmp.image.setRgbPixel(x, y, pixCr);
}
}
Cr-Bild
//rekonstruktion
for(int y = 0; y < bmp.image.getHeight(); y++) {
for(int x = 0;x < bmp.image.getWidth(); x++) {
PixelColor pix = bmp.image.getRgbPixel(x, y);
double luminanz = (0.299 * pix.r + 0.587 * pix.g + 0.114 * pix.b);
double cb = (int)((-0.169 * pix.r -0.331 * pix.g + 0.5 * pix.b) + 128);
double cr = (int)((0.5 * pix.r + -0.491 * pix.g + 0.081 * pix.b)+ 128);
pix.r= (int) (luminanz + 1.403 * (cr - 128));
pix.g=(int) (luminanz - 0.344 * (cb -128) +- 0.714 * (cr - 128));
pix.b=(int) (luminanz + 1.773 * (cb - 128));
pix = new PixelColor (pix.r, pix.g, pix.b);
bmp.image.setRgbPixel(x, y, pix);
}
}
links: Original und rechts: rekonstruktion
//Histogramm Datei erstellen
int [] histogramm = new int[256];
for(int y = 0; y < bmp.image.getHeight(); y++) {
for(int x = 0;x < bmp.image.getWidth(); x++) {
PixelColor pix = bmp.image.getRgbPixel(x, y);
double luminanz = (0.299 * pix.r + 0.587 * pix.g + 0.114 * pix.b);
pix.b=(int) luminanz;
int yBild = pix.b;
histogramm[yBild]++;
}
}
File file01 = new File("/Uni/medientechnologie/histogrammNew.txt");
FileWriter fw = new FileWriter(file01);
PrintWriter pw = new PrintWriter(fw);
for(int i = 0; i < histogramm.length; i++) {
pw.println(histogramm[i]);
}
pw.close();
Histogramm Datei
//aufgabe 3a) Mittelwert berechnen
int value = 0;
for(int y = 0; y < bmp.image.getHeight(); y++) {
for(int x = 0;x < bmp.image.getWidth(); x++) {
PixelColor pix = bmp.image.getRgbPixel(x, y);
double luminaz = (0.299 * pix.r + 0.587 * pix.g + 0.114 * pix.b);
pix.b=(int) luminaz;
int yBild = pix.b;
value += yBild;
}
}
int mittelwert = value/(bmp.image.getHeight()* bmp.image.getWidth());
System.out.println("der Mittelwert ist " + mittelwert);
//stardardabweichung berechnen
int value02 = 0;
for(int y = 0; y < bmp.image.getHeight(); y++) {
for(int x = 0;x < bmp.image.getWidth(); x++) {
PixelColor pix = bmp.image.getRgbPixel(x, y);
double luminanz = (0.299 * pix.r + 0.587 * pix.g + 0.114 * pix.b);
pix.b=(int) luminaz;
int yBild = pix.b;
value02 += Math.pow(yBild-mittelwert,2) ;
}
}
int standardabweichung = value02/(bmp.image.getHeight()* bmp.image.getWidth());
double sd = Math.sqrt(standardabweichung);
System.out.println("Die Standardabweichung ist " + sd );
Der Mittelwert beträgt 119 und die Standardabweichung beträgt 55.910642993977454
int h =80;
for(int y = 0; y < bmp.image.getHeight(); y++) {
for(int x = 0;x < bmp.image.getWidth(); x++) {
PixelColor pix = bmp.image.getRgbPixel(x, y);
int luminaz = (int)(0.299 * pix.r + 0.587 * pix.g + 0.114 * pix.b + h);
// nicht groesser als 8-bit
if(luminaz >= 255) {
luminaz=255;
}
if(luminaz < 0) {
luminaz=0;
}
ix = new PixelColor(luminaz, luminaz, luminaz);
bmp.image.setRgbPixel(x, y, pix);
}
}
links:20 mitte:40 rechts:80
links:-20 mitte:-40 rechts:-80
blau= Helligkeit -80 grün= Helligkeit 80
Histogramm_Helligkeit_80 Datei
Histogramm_Helligkeit_-80 Datei
double k = 5.0;
for(int y = 0; y < bmp.image.getHeight(); y++) {
for(int x = 0;x < bmp.image.getWidth(); x++) {
PixelColor pix = bmp.image.getRgbPixel(x, y);
int luminaz = (int)(0.299 * pix.r + 0.587 * pix.g + 0.114 * pix.b);
int newlu = (int) (k * (luminaz - 128) + 128);
// nicht groesser als 8-bit
if(newlu >= 255) {
newlu=255;
}
if(newlu < 0) {
newlu=0;
}
pix = new PixelColor(newlu, newlu, newlu);
bmp.image.setRgbPixel(x, y, pix);
}
}
Helligkeit: links:0.2; mitte:0.4; rechts:0.8; links unten:1.0
Kontrast: links:1.5; mitte:2.5; rechts:5.0; links unten:10.0
links: -10.0 und rechts: - 2.0
blau= Kontrast 0.2 orange= Kontrast 10.0
Histogramm_Kontrast_0.2 Datei
Histogramm_Kontrast_10.0 Datei
Beim Kontrast erkennt man zwei Extrempunkte, die vor allem am Anfang und am Ende sind, welches auf einen hohen Kontrast aufweist (k = 10.0). Und bei einem niedrigen Kontrast (k=0.2) befindet sich der Extrempunkt mittig. Bei der Helligkeit verschieben sich die Werte, je nach Helligkeitsintensität, im Diagramm. Wenn der Extrempunkt am Ende ist, ist die Helligkeitsintensität hoch (h=80) Und wenn der Extrempunkt am Anfang ist, dann ist die Helligkeitsintensität niedrig (h= - 80), also das Bild ist dunkel. Im Vergleich zum Histogramm aus Aufgabe 2, sind keine Extrempunkte, weder am Anfang noch am Ende. Die Werte sind weiter verteilt im Diagramm und sammeln sich nicht an den Extremspunkten.