Forelæsning Uge 3 Torsdag

Relaterede dokumenter
Forelæsning Uge 3 Torsdag

Forelæsning Uge 3 Torsdag

Forelæsning Uge 3 Torsdag

Billedbehandling. Processering af digitale billeder

Forelæsning Uge 3 Torsdag

Forelæsning Uge 4 Mandag

Forelæsning Uge 9 Mandag

Forelæsning Uge 4 Mandag

BILLEDREDIGERING (IMAGES)

Forelæsning Uge 3 Mandag

Forelæsning Uge 9 Mandag

Objektsamlinger med et fast (på forhånd kendt) antal elementer Velkendt fra mange andre programmeringssprog

Objektsamlinger med et fast (på forhånd kendt) antal elementer Velkendt fra mange andre programmeringssprog

Forelæsning Uge 4 Torsdag

Forelæsning Uge 4 Torsdag

Forelæsning Uge 3 Mandag

Forelæsning Uge 3 Mandag

Forelæsning Uge 3 Mandag

Forelæsning Uge 4 Mandag

Forelæsning Uge 2 Torsdag

Forelæsning Uge 2 Mandag

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 4

Forelæsning Uge 2 Torsdag

Forelæsning Uge 2 Torsdag

Forelæsning Uge 2 Torsdag

Forelæsning Uge 2 Mandag

Opfølgning på Dygtig Skildpadde (Michael) To algoritmeskabeloner

Forelæsning Uge 2 Mandag

Forelæsning Uge 5 Mandag

dintprog Manual Revision: 1241 August 24, 2010 I Introduktion 3 1 Notation 3 II Begreber 4 2 Grundbegreber om programmering 4

Forelæsning Uge 2 Mandag

Forelæsning Uge 4 Torsdag

Forelæsning Uge 2 Mandag

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 3

Forelæsning Uge 1 Torsdag

Forelæsning Uge 1 Torsdag

DANMARKS TEKNISKE UNIVERSITET

Har kun én enkelt abstract metode De steder, hvor man skal bruge et objekt, hvis type er et funktionelt interface, kan man i stedet bruge en lambda

dintprog Manual Revision: 731 September 30, Introduktion Notation... 3 I Begreber 4 2 Grundbegreber om programmering 4

Ugeseddel 4 1. marts - 8. marts

Datalogi OB, Efterår 2002 OH er, forelæsning 10/ Klasser og nedarvning

Klasser og objekter. (Afsnit i manualen)

Forelæsning Uge 6 Mandag

class Time { int hours, min; } } Time t1; // Erklær variabel af type Time class Time1 { public static void main(string[] args) { Time t1; t1.

Klasser og nedarvning

Forelæsning Uge 5 Mandag

Forelæsning Uge 5 Mandag

Virkefeltsregler i Java

DM01 DM Obl. Afl. Jacob Christiansen, , D12, Elias 18/ Side 1 af 11

Har kun én enkelt abstract metode De steder, hvor man skal bruge et objekt, hvis type er et funktionelt interface, kan man i stedet bruge en lambda

Abstrakte datatyper C#-version

DRONNINGER (QUEENS) Opgave 1

Algoritmeskabeloner: Sweep- og søgealgoritmer C#-version

Løsning af møntproblemet

class subklasse-navn extends superklasse-navn { } NorwaySpruce har superklassen Spruce, som igen har superklassen Tree.

Bilag 1 Rige billeder Ordremodtagelse

b) Udvid din implementation af forme til at understøtte.equals. To objekter af samme form er ens hvis de har samme værdier i felterne.

Videregående programmering i Java

Tabelbegrebet. Klassediagrammer (III) Oversigt. Anvendelse af Tabeller. Tabeller og qualified associations

Civilingeniøreksamen januar Skriftelig prøve den 12. januar 2001 Kursusnummer 49104

Tree klassen fra sidste forelæsning

Programmering 1999 KVL Side 5-4. Klassen Time: metoder. Metoder i objektet giver mulighed for at ændre tilstanden, eller kigge på tilstanden.

AAU, Programmering i Java Intern skriftlig prøve 18. maj 2007

Eksempel: Skat i år 2000

Kursus i OOP og Java. Kursus i Objektorienteret programmering i Java

Forelæsning Uge 5 Mandag

DM507 Algoritmer og datastrukturer

Introduktion til ActionScript

DM507 Algoritmer og datastrukturer

Forelæsning Uge 6 Mandag

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 2

Forelæsning Uge 10. Opremsningstyper. Forskellige teknikker til test og debugging. Afleveringsopgave: Debugging + Test.

Forelæsning Uge 12 Torsdag

Introduktion til ActionScript, fortsat

Forelæsning Uge 12 Mandag

Forelæsning Uge 6 Mandag

Indledning. Hvorfor det forholder sig sådan har jeg en masse idéer om, men det bliver for meget at komme ind på her. God fornøjelse med læsningen.

Forelæsning Uge 10 Torsdag

Kursusarbejde 3 Grundlæggende Programmering

Tabeller (I) Tabeller

DM01 DM Obl. Afl. Jacob Christiansen, , D12, Elias 13/ Side 1 af 7

Software Construction 1 semester (SWC) Spørgsmål 1

Serialization i Java

Kursus navn: Indledende programmering Kursus nr

Forelæsning Uge 6 torsdag repetition

Modern Concurrency Abstractions for C#

Hvad er Objekter - Programmering

Datalogi OB, Efterår 2002 OH er, forelæsning 3/ forstå datastrukturer og algoritmer (teoretisk forståelse og intuition)

BRP Tal. Om computer-repræsentation og -manipulation. Logaritmer

Programmering og Problemløsning, 2017

Forelæsning Uge 10 Mandag

Skriftlig eksamen i Datalogi

Grundlæggende Programmering ITU, Efterår Skriftlig eksamen i Grundlæggende Programmering

Databaseadgang fra Java

Videregående programmering i Java

Skriftlig eksamen i Datalogi

COMPUTERSPIL 1. Opgave 1. Opgave 2

Skriftlig eksamen i Datalogi

DM507 Algoritmer og datastrukturer

Fundamentale sprogbegreber

Transkript:

Forelæsning Uge 3 Torsdag Billedredigering (bl.a. brug af for-løkker) Gråtonebilleder (som er lidt simplere end farvebilleder) Arrays Kan "opbevare" et antal objekter (som ArrayList) Fast (på forhånd kendt) antal elementer Afleveringsopgave: Raflebæger 3 (DieCup 3)

Om programmering Programmering Anderledes Svær tankegang Faser Motivation Begejstring Tvivl? Frustration Eksistentiel krise Heureka! Fascination Indsigt Magt over teknologien Begejstring Tid 2

Billedredigering Lysere Mørkere Inverteret Uskarpt 3

Billedrepræsentation 0 0 x width Gråtoneværdi: Pixel (x,y) [0..255] hvor 0 ~ sort og 255 ~ hvid y height 4

Billedredigering Vi bruger to klasser Image repræsenterer et billede og har metoder som arbejder på billedet, bl.a. brighten, darken, invert og blur Pixel repræsenterer en pixel og har metoder til at aflæse og sætte pixlens gråtoneværdi Image * Pixel public class Pixel { én-til-mange relation // returnerer gråtonen for denne pixel public int getvalue() // opdaterer gråtonen for denne pixel public void setvalue(int value) 5

Class Image interface public class Image { // Returnerer billedets højde public int getheight() // Returnerer billedets bredde public int getwidth() // Returnerer pixlen på position (x,y) public Pixel getpixel(int x, int y) // Returnerer en liste med samtlige pixels i billedet public ArrayList<Pixel> getpixels() // Returnerer de op til ni naboer til (x,y) (inklusiv (x,y)) public ArrayList<Pixel> getneighbours(int x, int y) // Gentegner billedet public void pixelsupdated() 6

Skabelon for simpel billedbehandling image Vi bruger en for-each løkke til at gennemløbe samtlige pixels og opdatere dem en efter en Rækkefølgen er ligegyldig for os Pixel Arrayliste for ( Pixel p : image.getpixels() ) { int oldvalue = p.getvalue(); int newvalue =???; beregn newvalue ud p.setvalue(newvalue); fra oldvalue p 7

Brighten newvalue = oldvalue + 30 0 ~ sort, 255 ~hvid 8

Brighten, Javakode image for ( Pixel p : image.getpixels() ) { int oldvalue = p.getvalue(); int newvalue = oldvalue + 30 ; p.setvalue(newvalue); for ( Pixel p : image.getpixels() ) { p.setvalue(p.getvalue() + 30); p Kan I se et potentielt problem? 9

Invert newvalue = 255 - oldvalue 10

Invert, Javakode image for ( Pixel p : image.getpixels() ) { int oldvalue = p.getvalue(); int newvalue = 255 oldvalue ; p.setvalue(newvalue); for ( Pixel p : image.getpixels() ) { p.setvalue(255 - p.getvalue()); p 11

Eksempler på billedoperationer brighten darken invert blur mirror flip rotate resize Gør billedet lidt lysere Gør billedet lidt mørkere Inverterer hver gråtone Erstatter hver pixel med gennemsnittet af naboerne Spejler billedet om den vertikale midterakse Spejler billedet om den horisontale midterakse Roterer billedet 90 grader mod uret Skalerer billedet, så størrelsen ændres I den anden afleveringsopgave i uge 4 skal I implementere disse operationer 12

Arrays Arrays har et fast (på forhånd kendt) antal elementer Ligner Collections, men er bygget direkte ind i Java sproget Findes også i de fleste andre programmeringssprog 1. Erklæring (som feltvariabel) private int[] hourcounts; 2. Initialisering (ofte i konstruktør) hourcounts = new int[24]; Skal ikke importeres Kan også bruges på primitive typer Antal af elementer kan defineres via et udtryk Eksempler på brug count = hourtcounts[hour]; hourcounts[hour]++; Udtrykket i [ ] skal evaluere til et heltal i intervallet [0,23] Antal elementer i { bestemmer størrelsen Erklæring og initialisering med værdier kan slås sammen private int[] monthlength = {31,28,31,30,,30,31; 13

To metoder, der bruger et array // Analyserer antal events indtruffet i hver klokketime public void analyzehourlydata() { while (reader.hasmoreentries()) { LogEntry entry = reader.nextentry(); int hour = entry.gethour(); hourcounts[hour]++; // Udskriver antal events indtruffet i hver klokketime public void printhourlycounts() { System.out.println("Hr: Count"); for (int hour = 0; hour < hourcounts.length; hour++) { System.out.println(hour + ": " + hourcounts[hour]); 14

For løkker brugt på arrays Javas for-each løkke kan også bruges på arrays private String url; private String[] urls; for (String url : urls) { System.out.println(url); For-løkken giver adgang til at bruge indexet for (int hour = 0; hour < hourcounts.length; hour++) { System.out.println(hour + ": " + hourcounts[hour]); Det gør for-løkken ikke for (int value : hourcounts) { System.out.println(???? + ": " + value); 15

Forskelle på arrays og arraylister Arrays har et fast (på forhånd kendt) antal elementer Simplere syntax for erklæring private int[] hourcounts; i stedet for private ArrayList<Integer> hourcounts; Arrays kan bruges på primitive typer (uden brug af wrapper klasse) Simplere syntax for initialisering hourcounts = new int[24]; i stedet for hourcounts = new ArrayList<Integer>(); Simplere syntax for kald hourcounts[13]; i stedet for hourcounts.get(13); Meget nemmere at håndtere flerdimensionale strukturer minutecounts = new int[24][60]; secondcounts = new int[24][60][60]; Arrays er indbygget i Java sproget Giver mere effektiv implementering (hurtigere kode) og simplere syntax Kendt fra mange andre programmeringssprog Arrays er ikke en Collection type 16

Eksempler på brug af arrays Java API under ArrayList En arrayliste er en liste af elementer implementeret ved hjælp af et array I klassen Index har jeg Erklæret en feltvariabel Indsat fem Person objekter i arraylisten private ArrayList<Person> list; Klassen Person Feltvariabler: Klassen String private String name; private int age; En streng er en liste af tegn (char) Implementeret ved hjælp af et array 17

Lad os inspicere et objekt af klassen Index Objekt af klassen Index Kan I tænke på andre situationer, hvor det vil være naturligt at bruge arrays? 18

Billedrepræsentation via arrays 0 0 j width Pixel [ i ][ j ] [0..255] hvor 0 ~ sort og 255 ~ hvid i private Pixel[][] pixels; pixels = new Pixel[width][height]; height To dimensionalt array med width x height elementer 19

Skab et billede public class Image // Feltvariabler private int width, height; private String title; Reference til private Pixel[][] pixels; 2-dimensionalt... array (af Pixels) // Konstruktør public Image(int width, int height, String title){ this.width = width; j 0 this.height = height; 0 this.title = title; pixels = new Pixel[width][height]; // Lav alle pixels sorte i for(int i=0; i < height; i++) { for(int j=0; j < width; j++) { pixels[i][j] = new Pixel( 0 ); height Sort... 20 width

Metoder til at aflæse pixels // Returner pixlen i position(i,j) public Pixel getpixel(int i, int j){ return pixels[i][j]; // Returnerer arrayliste med alle pixels i billedet public ArrayList<Pixel> getpixels(){ ArrayList<Pixel> result = new ArrayList<Pixel>(); for(int i=0; i < height; i++){ for(int j=0; j < width; j++){ result.add(pixels[i][j]); return result; I en af afleveringsopgaver i uge 4 skal I arbejde med billedredigering I arbejder med arraylister Men "inde bagved" er billederne repræsenteret i 2-dimensionale arrays 21

Metode til at aflæse naboer // Returnerer en arrayliste med alle naboer public ArrayList<Pixel> getneighbours(int i,int j){ ArrayList<Pixel> result = new ArrayList<Pixel>(); for(int x = i-1; x <= i+1; x++){ for(int y = j-1; y <= j+1; y++){ addpixeltolist(x,y,result); return result; Vi skal tjekke om punktet (i,j) ligger indenfor billedet // Tilføj(i,j) til list, hvis (i,j) ligger indenfor billedet private void addpixel (int i, int j, ArrayList<Pixel> list){ if( 0 <= i && i < width && 0 <= j && j < height ){ list.add(pixels[i][j]); 22

Afleveringsopgave: Raflebæger 3 (DieCup 3) Vi skal endnu en gang arbejde videre med vores Raflebæger I skal lave noget mere aftestning Sammenligne slag fra to raflebægere, der har hhv. 3 og 4 terninger. Generalisere terningen, så den kan have et vilkårligt antal sider Skriv ny testmetode. 23

Opsummering Billedredigering Forberedelse til afleveringsopgave i Uge 4 Arrays Fast (på forhånd kendt) antal elementer Bygget direkte ind i Java Giver mere effektiv adgang til de enkelte elementer Simplere syntax (uden brug af de normale metode kald) Afleveringsopgave: Raflebæger 3 (DieCup 3) 24

Det var alt for nu.. spørgsmål 25