Medientechnik. Übung 5 Java Bildbearbeitung - Teil 2

Ähnliche Dokumente
Medientechnik. Übung Java-Bildbearbeitung

Medientechnik. Übung 4 Java Bildbearbeitung - Teil 1

Medientechnik. Übung 6 Videotechnik/-Analyse

Medientechnik. Übung 2 Java Swing

Medientechnik. Übung 3 MVC & Observer

Internationaler Studiengang Medieninformatik

ÜBUNGS-BLOCK 7 LÖSUNGEN

Medientechnik Sommersemester 2016

Medientechnik Sommersemester 2016

3D Programmierpraktikum: Einführung in C++ - Teil 1

Einführung in die Programmierung für NF MI. Übung 04

Ludwig-Maximilians-Universität München Sommersemester 2009 LFE Medieninformatik Übungsblatt 7 Prof. Dr. Andreas Butz

CG Übung 1: ColorConverter

float: Fließkommazahl nach IEEE 754 Standard mit 32 bit

Medientechnik Sommersemester 2016

Übung: Computergrafik 1

Einführung in die Programmierung für Nebenfach Medieninformatik. Beat Rossmy, Michael Kirsch

Java Referenzdatentypen genauer betrachtet

Einführung in die Programmierung für Nebenfach Medieninformatik. Beat Rossmy, Michael Kirsch

Einführung in die Programmierung für NF MI. Übung 07

Programmierung für Mathematik HS10

Übung Algorithmen und Datenstrukturen

KAPITEL 4: Bildbearbeitung Kopiervorlagen und Arbeitsblätter

Objekttypen. Referenzen, Objekte, Gleichheit, Wrapper, Arrays, mehr-dimensionale Arrays, Bildbearbeitung, krumme Arrays

3.8 Objekttypen und Arrays. Wir werden uns in diesem Kapitel näher mit den Objekttypen in Java beschäftigen.

Einführung Aufgabe 3 - MPEG. Tobias Reinsch 2011

Übung zur Vorlesung Programmierung

3D Programmierpraktikum: Szenegraphen und Texturierung

Programmierung für Mathematik HS11

Martin Unold INFORMATIK. Geoinformatik und Vermessung

Einführung in die Programmierung für Nebenfach Medieninformatik. Beat Rossmy, Michael Kirsch

Organisatorisches. Neue Übungsblätter: Nur mehr elektronisch? Abgabe Di, , 14 Uhr bis Do, , 8Uhr

Programmierung 1 Studiengang MI / WI

Einführung in die Programmierung für Nebenfach Medieninformatik. Beat Rossmy, Michael Kirsch

Einführung in die Programmierung für Nebenfach Medieninformatik. Beat Rossmy, Michael Kirsch

Arrays. Einleitung. Deklarieren einer Array Variablen

2 Programmieren in Java I noch ohne Nachbearbeitung

Grundlagen der Technischen Informatik. 13. Übung

Übung zu Einführung in die Informatik # 14

Nachholklausur zur Vorlesung: Einführung in die objektorientierte Programmierung mit Java WS1415

1. Die rekursive Datenstruktur Liste

EINFÜHRUNG IN DIE PROGRAMMIERUNG

Martin Unold INFORMATIK. Geoinformatik und Vermessung

Bildverarbeitung mit ImageJ

Informatik II. Woche 10, Giuseppe Accaputo

Farbtiefe. Gängige Farbtiefen

Prozedurale Texturen >>Was nicht passt wird passend gemacht...<<

Programmieren in Java

Images. Kommen auf zweierlei Weise zur Anwendung. Darstellung von Pixelbildern(.jpg,.gif,.png) Bilden die Grundlage für Offscreendrawing

JTable. W. Lang HWR Berlin, SS

Computergrafik Universität Osnabrück, Henning Wenke,

Übung zur Vorlesung Digitale Medien. Hanna Schneider Ludwig-Maximilians-Universität München Wintersemester 2014/2015

Farbe die dritte Dimension in einem 2D Bar Graph

Algorithmen als systematische Vorgehensweisen zur Lösung eines formal definierten Problems

(6) Verknüpfen der GUI mit dem Spiel

Crashkurs C++ - Teil 1

FARBTIEFE / KANÄLE 1 5

Java Zusammenfassung. Basisdatentypen ganzzahlig: Byte, Short, Integer, Long Fließkomma: Float, Double Zeichen: Character Wahrheitswerte: Boolean

Algorithmen als systematische Vorgehensweisen zur Lösung eines formal definierten Problems

Klausur Digitale Medien

Klassen und Objekte. Klassen und Objekte

Bildverarbeitung mit C++

Vorstellung der Aufgabe Nonogramme

BILDBEARBEITUNG IM UNTERRICHT

Übungsstunde 3. Einführung in die Programmierung

Informatik II. Woche 15, Giuseppe Accaputo

Was ist der Farbwiedergabeindex?

Computer/Robot-Vision: Übung 1

Digitale Medien. Vorlesung: Heinrich Hußmann Übung: Renate Häuslschmid. Übung zur Vorlesung

Übung zur Vorlesung. Digitale Medien. Vorlesung: Heinrich Hußmann Übung: Renate Häuslschmid, Hanna Schneider

Created by Michael Kirsch & Beat Rossmy

1 Klassen und Objekte

Zustände umsetzen Enumerations (Aufzählungen) Zustandsobjekte

Benchmarking von Bilddatenstrukturen

Organisatorisches. drei Gruppen Gruppe 1: 10:10-11:40, Gruppe 2: 11:45-13:15 Gruppe 3: 13:20-14:50

U4 Grundlagen der C-Programmierung

Angewandte Mathematik und Programmierung

Institut für Informatik und Angewandte Kognitionswissenschaften

Arrays. Theorieteil. Inhaltsverzeichnis. Begriffe. Programmieren mit Java Modul 3. 1 Modulübersicht 3

Programmiervorkurs Einführung in Java Tag 3

EINFÜHRUNG IN DIE PROGRAMMIERUNG

Tutoraufgabe 1 (Programmanalyse):

Einführung in das Programmieren Probeklausur Lösungen

6. Tonwertkorrektur. HBS Gimp 2

16. Dynamische Datenstrukturen

VU Einführung in Visual Computing Sebastian Zambanini Computer Vision Lab TU Wien. Ablauf

Programmieren: Bildbearbeitung

Informatik für Ingenieure (InfIng)

Objektorientierte Programmierung und Modellierung

Informatik I (D-ITET)

Das Model/View/Controller Paradigma

Einführung in die Informatik - Teil 6a -

Java Einführung Klassendefinitionen

Einführung in die Programmierung

GIMP - THE GNU IMAGE MANIPULATION PROGRAM

Programmieren in Python

Javakurs für Fortgeschrittene

Transkript:

Medientechnik Übung 5 Java Bildbearbeitung - Teil 2

Planung Nr Zeitraum Thema 1 20.04. 25.04. Bildretusche mit Gimp 2 27.04. 01.05. GUI Programmierung 3 04.05. 08.05. Model-View Controller 4 18.05. 22.05. Bildfilter Teil 1 5 26.05. 29.05. Bildfilter Teil 2 6 01.06. 03.06. Video & Film Theorie 7 29.06. 02.07 Audio-Aufnahme und Bearbeitung Keine Übungen zw. 03.06. und 29.06.! LMU München - LFE Medieninformatik - Medientechnik Sommersemester 2015 2

Java2D Bildbearbeitung Teil 1 (letzte Woche): Bilder laden Konvolution Filter von JH Labs Teil 2: Eigene Filter LMU München - LFE Medieninformatik - Medientechnik Sommersemester 2015 3

Rewind Was ist Konvolution? Was ist ein Kernel? Warum benötigen wir ein BufferedImage? LMU München - LFE Medieninformatik - Medientechnik Sommersemester 2015 4

Eigene Filter Theorie: Wie kann man Bilder auf Pixelbasis manipulieren? Spezielle Datenstruktur speichert Werte der einzelnen Pixel Zugriff und Manipulation einzelner Pixel durch Bit- Operatoren (<<, >>, &, ) Grafik aus http://www.dma.ufg.ac.at/app/link/grundlagen:2d-grafik/module/12858?step=2 LMU München - LFE Medieninformatik - Medientechnik Sommersemester 2015 5

Eigener Filter Beispiel: BufferedImage (RGB): Zugriff auf einzelnes Pixel: public int getrgb(int x, int y) Laden der Pixelwerte in ein RGB Array: public int[] getrgb( int startx, int starty, int w, int h, int[] rgbarray, int offset, int scansize) LMU München - LFE Medieninformatik - Medientechnik Sommersemester 2015 6

Iteration über Pixel Zwei for-schleifen for (int x = 0; x < image.getwidth(); x++){ for (int y = 0; y < image.getheight(); y++) { int pixelvalue = image.getrgb(x, y); // do something... } } 1-D Array int[] allpixels = new int[image.getwidth()*image.getheight()]; image.getrgb(0, 0, image.getwidth(),image.getheight(), allpixels, 0, 0); for (int pixelvalue : allpixels) { // do something... } LMU München - LFE Medieninformatik - Medientechnik Sommersemester 2015 7

RGB Farbwerte interpretieren R G B Dezimal: (74, 156, 122) Hexidezimal: (4A, 9C, 7A) 0x4A9C7A 16 0x4A9C7A 16 = 4889722 10 Das ist der RGB-Wert des Pixels, Der von.getrgb( ) zurückgegeben wird LMU München - LFE Medieninformatik - Medientechnik Sommersemester 2015 8

Farbwerte zurückrechnen 4889722 10 = 01001010 10011100 01111010 2 R G B Wie kommt man jetzt an den Grün-Wert? LMU München - LFE Medieninformatik - Medientechnik Sommersemester 2015 9

Grün-Wert herausfiltern (1) 01001010 10011100 01111010 2 Wir wollen an die zweiten 8 Bits. Idee: große Bitmaske mit logischem Und 01001010 10011100 01111010 & 00000000 11111111 00000000 ---------------------------- 00000000 10011100 00000000 LMU München - LFE Medieninformatik - Medientechnik Sommersemester 2015 10

Grün-Wert herausfiltern (2) 00000000 10011100 00000000 2 Idee: Bits um 8 Stellen nach rechts verschieben 00000000 10011100 00000000 >> 8 ---------------------------- 00000000 00000000 10011100 LMU München - LFE Medieninformatik - Medientechnik Sommersemester 2015 11

Farbwerte herausfiltern Bitshift kann auch vor der Bit-Maske kommen Operationen können gemeinsam ausgeführt werden: int green = (pixelvalue >> 8) & 0b11111111; Bitmasken funktionieren auch mit Hexadezimal-Werten: int green = (pixelvalue >> 8) & 0xff; LMU München - LFE Medieninformatik - Medientechnik Sommersemester 2015 12

Farbwert zurückschreiben Nach Berechnung / Modifikation müssen wir wieder einen eindeutigen Integer Wert erzeugen. logisches Oder int newpixelvalue = (red << 16) (green << 8) blue; r = 01001010 g = 10011100 b = 01111010 image.setrgb(x, y, newpixelvalue); 01001010 00000000 00000000 00000000 10011100 00000000 00000000 00000000 01111010 -------------------------- 01001010 10011100 01111010 LMU München - LFE Medieninformatik - Medientechnik Sommersemester 2015 13

Color Klasse statt Arithmetik Man kann auch Color Objekte erzeugen, und darüber and die Werte der Farbkanäle gelangen: Color color = new Color(image.getRGB(x,y)); int red = color.getred(); int green = color.getgreen(); int blue = color.getblue(); // modify red/green/blue, then: int newpixelvalue = (red << 16) (green << 8) blue; image.setrgb(x,y,newpixelvalue); Nachteile: man kan die Werte nicht mehr ins Color-Objekt zurückschreiben. Overhead durch neue Objekte (potenziell Performanz-Verlust) LMU München - LFE Medieninformatik - Medientechnik Sommersemester 2015 14

Farbkanal extrahieren Bild: Tobias Stockinger, CC-BY-NC LMU München - LFE Medieninformatik - Medientechnik Sommersemester 2015 15

Farbkanal extrahieren: Idee Wähle aus 3 Farbkanälen diejenigen, die übrig bleiben sollen, z.b. rot. Setze die anderen Farbwerte jeweils auf 0 kein Farbanteil am Pixel, rot : 100% - grün : 0% - blau: 0% Die angezeigten Pixel unterscheiden sich nur in der Helligkeit des roten Kanals! LMU München - LFE Medieninformatik - Medientechnik Sommersemester 2015 16

Farbkanal extrahieren: Code BufferedImage targetimage = new BufferedImage( image.getwidth(), image.getheight(), BufferedImage.TYPE_INT_RGB); for(int x = 0; x < image.getwidth(); x++){ for(int y = 0; y < image.getheight(); y++){ int pixel = image.getrgb(x, y); int red = (pixel >> 16) & 0xff; int targetpixel = red << 16; targetimage.setrgb(x,y,targetpixel); } } LMU München - LFE Medieninformatik - Medientechnik Sommersemester 2015 17

Wrap-up Quiz 1. Was ist eine Bit-Maske 2. Warum benötigen wir überhaupt Bit-Shift Operationen? 3. Was ist der Vorteil von Bit-Shift Operationen? 4. Wie ist die Grund-Idee zum Einfärben von Bildern? LMU München - LFE Medieninformatik - Medientechnik Sommersemester 2015 18

Übungsblatt 3 Bildfilter Funktionalität implementieren Bildverarbeitung (Theorie) LMU München - LFE Medieninformatik - Medientechnik Sommersemester 2015 19

Vielen Dank! WELCHE FRAGEN GIBT ES? LMU München - LFE Medieninformatik - Medientechnik Sommersemester 2015 20