Digitale beeldverwerking

Slides:



Advertisements
Verwante presentaties
KINN 2010 •OOP •O Object •O Georiënteerd •P Programmeren.
Advertisements

Animaties maken met Monkeyjam
OOS Object geOrienteerd Software-ontwerp - 3
Examen bio-imaging Het examen zal bestaan uit een aantal theorievragen met een aantal oefeningen. De verdeling is 30% theorie en 70% oefeningen. Enkele.
Van domeinklasse tot implementatie
Objecten Hoofdstuk 6 Hoofdstuk 6 Hoofdstuk 6 1.
Het type int Tekenen met Java operatoren
Klassen en objecten.
Computervaardigheden en Programmatie Universiteit AntwerpenObjecten 4.1 Computervaardigheden en Programmatie 1rste BAC Toegepaste Biologische Wetenschappen.
Modula vs Java MODULE Show; CONST PI = ; TYPE PointRc = RECORD x,y : INTEGER; speed : REAL; angle : REAL; END; VAR a,b : PointRc; BEGIN.
Hoofdstuk 6: Controle structuren
Inleiding Informatica Prof. Dr. O. De Troyer Hoofdstuk 10: Omgaan met problemen.
Inleidend probleem Data structuur (hiërarchie van classes)
Static Keyword static voor functieleden functie niet voor een object aangeroepen class K {... static int minimum( int i, int j); } aanroep: K::minimum(
JAVA -- H51 CONSTRUCTOR –- COPY-CONSTRUCTOR 1Constructor: Dezelfde naam als de klasse Wordt uitgevoerd d.m.v. new Initialisatie van de (private) attributen.
Oefeningen Hoofdstuk 3.
Algoritmiek Object-georiënteerd Programmeren
1 Datastructuren Introductie tot de programmeeropgaven in C++ Jan van Rijn
JAVA UTILITIES PACKAGE EN BIT-MANIPULATIE
JAVA1 H 9. OBJECTGEORIENTEERD PROGRAMMEREN: OVERERVING 1. INLEIDING Wat is overerving (inheritance)? Overerving is een mechanisme waarbij software opnieuw.
Hogeschool HZ Zeeland 19 augustus 2003augustus 2003 Data Structuren & Algoritmen Week 3.
Opgave 2a nMet een InputStream lees je bytes uit een binare file nMet een Reader lees je characters uit een tekstfile.
Hoofdstuk 9 Objecten en klassen.
Arrays.
Deel XIV Eerste echte e-commerce applicatie Implementatie (vervolg) 1 Internetapplicaties Deel 15: Herhaling Java-programmatie en geautomatiseerd testen.
1 Syntax JavaLogo. 2 Hoofdstuk 1 Tekenen in Java.
Lokaliseren en volgen van personen en objecten met behulp van camera’s Informatie Scriptieprijs November 2007 Sofie De Cooman.
Inleiding tot programmeren
Variabelen Part deux.. Variabelen week 3 0. Herhaling 1. De NullPointerException (p101) 2. Primitieven 3. Scope en levensduur van variabelen 4. Meerdere.
Constructoren Genesis 1:1 Aarde a1 = new Aarde(“Adam”, “Eva”);
Animatie nAnimatie: “tekenfilm” programma toont automatisch veranderende beelden nGemakkelijk te programmeren met gebruik van de klasse Thread “draadje”
Datacommunicatie en netwerken
Hoofdstuk 11.3 Algoritmen: Zoeken in een netwerk.
Tircms03-p les 4 Klassen. Abstracte datatypes in C struct stack { char info[100]; int top; }; void reset(stack *s) { s->top = -1; } void push(stack *s,
Les 1: Zaterdag 10 mei 2014 Wim Peeters
Hoofdstuk 14.1 Algoritmen: Zoeken in een netwerk.
Encapsulatie: Every man is an island upon himself.
Hoofdstuk 3 Methoden om te tekenen.
Opgave 1a ncompiler: vertaalt broncode naar machine-uitvoerbare code ninterpreter: voert broncode direct uit.
Hoofdstuk 3 Tekenen en rekenen.
Java Objectgeoriënteerd Programmeren in Java met BlueJ
Java Objectgeoriënteerd Programmeren in Java met BlueJ Hoofdstuk 8: Gebruikersinterface © 2014, Gertjan Laan, versie 2.
Studiehouding Ergens verstand van krijgen kost tijd… Uren die je alleen in je boeken doorbrengt maken het verschil. Er is niets mis met onafhankelijkheid.
 C++ heeft een inheritance mechanisme  Manier om functionaliteit te ‘erfen’ van een parrent class ◦ Polymorphisme ◦ Zoals we het ook in C# kennen.
Java & het Web Programma: Contexts Listeners Scope/Attributes Thread safety.
Aangepaste timing nTheorie (16 colleges + 2 deeltentamens) nPraktijk (16 keer, 2 inleveropdrachten) college Tent. 1 Tent. 2 college prakt. 1 prakt. 2 prakt.
Java & het Web Programma: Sessies JSP. Stateless vs. Stateful(1) HTTP is stateless WAT IS STATELESS?
Herhaling: He who does not learn from history, is doomed to repeat it.
Eigen klassen maken A new way of thinking.. Wat? Zie voorbeeld. Zie voorbeeld.
Loops en errors Array's Random try catch for loop while loop do while loop.
GUI Graphical User Interface. Wat is een Graphical User Interface Mooi Gebruiksvriendelijk Veel denkwerk.
Bestanden Lezen Schrijven Afbeeldingen. Bestandstypen.txt.png eigen.
De definitie van een object. Een object is een verzameling van eigenschappen en bewerkingen. Veel voorkomende objecten zijn: D (display) Gui (user interface)
H01: Informatie Digitaal Toetsweek1 : VT41, 50 min.
Objectgeoriënteerd Programmeren (2)
ISensorEventListener
Gameprogrammeren: Objecten en geheugen
Letterfrequentie turven
Gameprogrammeren: Animatie
OOS Object geOrienteerd Software-ontwerp - 5
Gameprogrammeren: Game Basics
Tinpro015b-les4 Klassen.
TIMER STARTEN DE TIJD IS OM! TIJDSLIMIET: 30 seconden
Game: omgaan met tijd (Jewel-Jam)
Informatieverwerkende systemen
Omzetting van kleur naar zwart wit
Software Development fundamentals
Leren programmeren met Scratch
Gameprogrammeren: Sprite sheets
Software Development fundamentals
Transcript van de presentatie:

Digitale beeldverwerking Joeri Barbarien 6-11-2018 Herhaling titel van presentatie

Doel Gebruiker geeft stelhoogte in door de hand een aantal seconden op deze positie te houden. Webcam (resolutie 640x480 pixels) h1 (640 or 480) PC h3 h2 Instellen gewenste eindpositie ping-pong bal met behulp van een webcam en beeldverwerking Digitale beeldverwerking 6-11-2018

Digitale beelden Deze intensiteiten worden typisch opgeslagen als een 8-bit getal (0-255) Pixel Beeld = matrix van pixels 255 Voorbeelden: In een kleurenbeeld wordt elke pixel gekenmerkt door een rode, groen en blauwe lichtintensiteit (RGB) = 255,0,0 = 0,255,255 = 0,255,0 = 255,0,255 = 0,0,255 = 128,128,128 = 255,255,0 = 255,255,255 Digitale beeldverwerking 6-11-2018

Digitale beelden (Java) public class MyRGBImage { private int width; private int height; private int[] red; //red component private int[] green; //green component private int[] blue; //blue component private int[] alpha; //alpha component public MyRGBImage(Image im) {...} public Image getImage() {...} public int getWidth() {...} public int getHeight() {...} public int getSize() {...} public RGBPixel getPixel(int x, int y) {...} public void setPixel(int x, int y, RGBPixel pixel) {...} } x y Raster scan 1 2 3 4 5 6 7 W-1 1 2 3 4 … Height (H) … … … H-1 Width (W) Convert to 1D array … (0,0) (2,0) (4,0) … (W-1,0) (1,1) … … (1,0) (3,0) … (0,1) i = x+y*W Digitale beeldverwerking 6-11-2018

Digitale beelden (Java) public class RGBPixel { private int red; private int green; private int blue; //private int alpha; Transparantie public RGBPixel() {...} public RGBPixel(int red,int green,int blue,int alpha) {...} public int getRed() {...} public int getGreen() {...} public int getBlue() {...} public int getAlpha() {...} public void setPixel(int red,int green,int blue,int alpha) {...} public void setRed(int red) {...} public void setGreen(int green) {...} public void setBlue(int blue) {...} public void setAlpha(int alpha) {...} } public class MyRGBImage { private int width; private int height; private int[] red; //red component private int[] green; //green component private int[] blue; //blue component private int[] alpha; //alpha component public MyRGBImage(Image im) {...} public Image getImage() {...} public int getWidth() {...} public int getHeight() {...} public int getSize() {...} public RGBPixel getPixel(int x, int y) {...} public void setPixel(int x, int y, RGBPixel pixel) {...} } Digitale beeldverwerking 6-11-2018

Beelden ophalen van de webcam public class FrameGrabber implements ControllerListener { public FrameGrabber() throws FrameGrabberException {…}//Constructor public void startCapturing() throws FrameGrabberException {…}//Start ophalen beelden public void stopCapturing() {…}//Stop ophalen beelden public boolean capturingIsStarted(){…} public Image grabImage() throws FrameGrabberException {…}//Vraag het huidige beeld op //Enkele algemene instellingen ophalen public int getXResolution() {…} public int getYResolution() {…} public int getBitDepth() {…} //aantal bits per kleur public String getDevicenaam(){…} public class GrabberThread extends Thread { … } Digitale beeldverwerking 6-11-2018

Beelden tonen van de Webcam public class MainWindow extends JFrame { private Timer timer; ... public class MyListener extends WindowAdapter public void windowOpened(WindowEvent evt) try{theframegrabber.startCapturing();} catch(FrameGrabberException exception) {...} } public class TimerListener implements ActionListener public void actionPerformed(ActionEvent e) getCurrentImage(); detectLevel(); public MainWindow() { timer = new Timer(delay, new TimerListener()); } ... private void getCurrentImage() try currentimage=theframegrabber.grabImage(); repaint(); catch(FrameGrabberException exception) {...} public void detectLevel() MyRGBImage image = new MyRGBImage(currentimage, pSettings); int newlevel = image.detectLevel(...); In de constructor van het window wordt een timer object aangemaakt Digitale beeldverwerking 6-11-2018

Beelden tonen van de Webcam public class MainWindow extends JFrame { private Timer timer; ... public class MyListener extends WindowAdapter public void windowOpened(WindowEvent evt) try{theframegrabber.startCapturing();} catch(FrameGrabberException exception) {...} } public class TimerListener implements ActionListener public void actionPerformed(ActionEvent e) getCurrentImage(); detectLevel(); public MainWindow() { timer = new Timer(delay, new TimerListener()); } ... private void getCurrentImage() try currentimage=theframegrabber.grabImage(); repaint(); catch(FrameGrabberException exception) {...} public void detectLevel() MyRGBImage image = new MyRGBImage(currentimage, pSettings); int newlevel = image.detectLevel(...); bij openen van het window (windowOpened event) wordt de webcam capturing gestart Digitale beeldverwerking 6-11-2018

Beelden tonen van de Webcam public class MainWindow extends JFrame { private Timer timer; ... public class MyListener extends WindowAdapter public void windowOpened(WindowEvent evt) try{theframegrabber.startCapturing();} catch(FrameGrabberException exception) {...} } public class TimerListener implements ActionListener public void actionPerformed(ActionEvent e) getCurrentImage(); detectLevel(); public MainWindow() { timer = new Timer(delay, new TimerListener()); } ... private void getCurrentImage() try currentimage=theframegrabber.grabImage(); repaint(); catch(FrameGrabberException exception) {...} public void detectLevel() MyRGBImage image = new MyRGBImage(currentimage, pSettings); int newlevel = image.detectLevel(...); Elke keer de timer afloopt (na delay ms) wordt een frame gecaptured (getCurrentImage) en wordt de detectie uitgevoerd (detectLevel) Digitale beeldverwerking 6-11-2018

Beelden tonen van de Webcam public class MainWindow extends JFrame { private Timer timer; ... public class MyListener extends WindowAdapter public void windowOpened(WindowEvent evt) try{theframegrabber.startCapturing();} catch(FrameGrabberException exception) {...} } public class TimerListener implements ActionListener public void actionPerformed(ActionEvent e) getCurrentImage(); detectLevel(); public MainWindow() { timer = new Timer(delay, new TimerListener()); } ... private void getCurrentImage() try currentimage=theframegrabber.grabImage(); repaint(); catch(FrameGrabberException exception) {...} public void detectLevel() MyRGBImage image = new MyRGBImage(currentimage, pSettings); int newlevel = image.detectLevel(...); “detectLevel” zet het gecapturede beeld om naar een MyRGBImage zodat de pixelwaarden toegankelijk worden. De eigenlijke detectie wordt uitgevoerd in image.detectLevel() (zelf te implementeren) Digitale beeldverwerking 6-11-2018

Algoritme voor detectie Frame differencing Thresholding if(value>th) set to 1 (white) else set 0 (black) Referentie frame (opgenomen bij initialisatie) SAD TH Absolute waarde van het verschil tussen de pixelwaarden (SAD – sum of absolute differences) in de twee frames berekenen Niveau detectie Huidig frame RightLight en Autogain van de camera afzetten voor beste resultaten. Digitale beeldverwerking 6-11-2018

Algoritme voor detectie Frame differencing Niveau detectie a) Verwijder ruis (bvb): Verdeel beeld in blokken van 4x4 or 8x8 pixels Als een blok >x% witte pixels bevat, verander dan alle pixels in het blok naar witte pixels, anders verander alle pixels in het blok naar zwarte pixels Als er een rij van ten minste y aaneensluitende witte blokken overblijft kan het niveau gedetecteerd worden. b) Niveau detectie Door zwaartepunt van de witte blokken te bepalen Als het niveau stabiel blijft over meerdere frames, geef dan door aan de controller via USB Digitale beeldverwerking 6-11-2018