Bildebehandling med Python og EzGraphics

Like dokumenter
Steg 0: Installere Pygame Zero

På tide med et nytt spill! I dag skal vi lage tre på rad, hvor spillerne etter tur merker ruter med X eller O inntil en av spillerne får tre på rad.

På tide med et nytt spill! I dag skal vi lage tre på rad, hvor spillerne etter tur merker ruter med X eller O inntil en av spillerne får tre på rad.

Tre på rad mot datamaskinen. Steg 1: Vi fortsetter fra forrige gang

I dag skal vi ved hjelp av ganske enkel Python-kode finne ut om det er mulig å tjene penger på å selge og kjøpe en aksje.

Tre på rad mot datamaskinen. Steg 1: Vi fortsetter fra forrige gang. Sjekkliste. Introduksjon

Fra Python til Java. En introduksjon til programmeringsspråkenes verden. Dag Langmyhr

IN1010. Fra Python til Java. En introduksjon til programmeringsspråkenes verden Dag Langmyhr

Mattespill Nybegynner Python PDF

Løpende strekmann Erfaren Videregående Python PDF

Stjerner og galakser Nybegynner Python PDF

Hangman. Level. Introduksjon

Bildebehandling i GIMP

IN1010. Fra Python til Java. En introduksjon til programmeringsspråkenes verden Dag Langmyhr

INF109 - Uke 1a

Brukermanual for TrackGrabber

Fra Python til Java, del 2

Hangman. Steg 1: Velg et ord. Steg 2: Gjett en bokstav. Sjekkliste. Sjekkliste. Introduksjon

Husk at du skal ha to vinduer åpne. Det ene er 'Python Shell' og det andre er for å skrive kode i.

Husk at du skal ha to vinduer åpne. Det ene er 'Python Shell' og det andre er for å skrive kode i.

Repetisjon Novice Videregående Python PDF

Slope-Intercept Formula

Først må vi få datamaskinen til å velge et tilfeldig ord, så la oss begynne. Lagre programmet ditt og kjør det. Hvilket ord skrives ut?

IN1000 Obligatorisk innlevering 7

Skilpaddefraktaler Erfaren Python PDF

IN1140, H2018 gruppetime oppgaver Introduksjon til Tekst i Python

Lyd og video på nettsider

I denne oppgaven skal vi repetere litt Python-syntaks, det er en god blanding av alle tingene du har lært i Python til nå.

Skilpaddetekst. Steg 1: Tekst på flere linjer. Sjekkliste. Introduksjon

Skilpadder hele veien ned

Steg 1: Tekst på flere linjer

AlgDat - Øvingsforelesning 1 Introduksjon til Python, lenkede lister og øving 1

HURTIGGUIDE: HVORDAN LAGE MEDIEFILER FOR ESPRECIOUS

Øvingsforelesning 5 Python (TDT4110)

Innleveringsoppgave 3

Inf109 Programmering for realister Uke 5. I denne leksjonen skal vi se på hvordan vi kan lage våre egne vinduer og hvordan vi bruker disse.

Sprettende ball Introduksjon Processing PDF

TDT4110 IT Grunnkurs Høst 2016

Oppsummering fra sist

Øvingsforelesning 5 Python (TDT4110)

Rendering - Lage 3D-bilde av prosjektet

TDT4110 IT Grunnkurs Høst 2015

Øvingsforelesning i Python (TDT4110)

Øvingsforelesning 1 Python (TDT4110)

Håndtere mange verdier

PUBLISERING AV INNHOLD TIL KVAMSSIDA.NO

Steg 1: Canvas-elementet

Kodetime for Nordstrand barneskole

Utførelse av programmer, metoder og synlighet av variabler i JSP

Skilpaddekunst. Steg 1: Møt skilpadden. Sjekkliste. Introduksjon. Turtles

I denne oppgaven skal vi bruke funksjoner for å gjøre programmene vi skriver enklere og mer oversiktlige.

3. obligatoriske innlevering, høsten 2014

Legg bort skilpaddene dine, i dag skal vi lære hvordan vi kan sende hemmelige beskjeder!

Kanter, kanter, mange mangekanter. Introduksjon: Steg 1: Enkle firkanter. Sjekkliste. Skrevet av: Sigmund Hansen

[36] Boiserie. Melamine and lacquered door handles. Optional metal handle. Standard ABS handle. Look _silver (J) Pop _silver (P) _chromed (K)

Steg 1: Regneoperasjoner på en klokke

Løsningsforslag Kontinuasjonseksamen i TDT4110 Informasjonsteknologi - grunnkurs

Hvor gammel er du? Hvor gammel er du? Del 1: Skrive ut til skjerm. Gjøre selv. Skrevet av: Sindre O. Rasmussen, Kodeklubben Trondheim

Steg 1: Klargjør og importerer bilioteker

Olaf Christensen Digitale Bilder

Fraktaler og datastrukturer

IN uke 1. Komme i gang med programmering

Skilpadder Introduksjon Python PDF

Merak Un-glazed Porcelain Wall and Floor Tiles

Kanter, kanter, mange mangekanter

Introduksjon til versjonskontroll av Ola Lie

TDT4105/TDT4110 Informasjonsteknologi grunnkurs:

Kap 2: Løkker og lister

Steg 1: Husker du skilpadden?

Bygg et Hus. Steg 1: Prøv selv først. Sjekkliste. Introduksjon. Prøv selv

TDT4110 IT Grunnkurs Høst 2016

Fraktaler og datastrukturer

Programmering i ActionScript 3.0 Flash CS3 Professional

Løse reelle problemer

Visuell Programmering: Kom i gang med Processing

UKE TEMA KOMPETANSEMÅL LÆRINGSMÅL INNHOLD METODE VURDERING 34 Numbers

Adobe Photoshop Elements (PSE) - Organizer. View and Organize Photos

Uheldig bildeutsnitt: Vesentlige deler av motivet blir dekket av tekstfeltet i bunnen av slideshowet

Finne ut om en løsning er helt riktig og korrigere ved behov

Skilpaddekunst. Introduksjon. Skrevet av: Geir Arne Hjelle

Hvis Python allerede er installert på maskinen din er det bare å begynne.

Skrevet av: Oversatt fra microbit-micropython.readthedocs.io (

Skilpadder. Introduksjon: Steg 1: Hei, Skilpadde! Sjekkliste. Skrevet av: Oversatt fra Code Club UK (//codeclub.org.uk)

Forkurs i informatikk Python. Andreas Færøvig Olsen

Legg bort skilpaddene dine, i dag skal vi lære hvordan vi kan sende hemmelige beskjeder!

Hvordan du kommer i gang med LOGO.

Hash-funksjoner. Introduksjon. Steg 1: Strekkoder. Eksempel. Skrevet av: Martin Strand

Installasjon InfoMediaPlayer:

Løse reelle problemer

TDT4102 Prosedyre og Objektorientert programmering Vår 2014

Transkript:

Bildebehandling med Python og EzGraphics I denne oppgaven skal dere jobbe med bildebehandling. På samme måte som vi jobbet med lyd tidligere, skal vi nå se på bilder. Vi kan bruke EzGraphics til alt vi trenger i disse oppgavene. Hvis du ikke får EzGraphics til å virke på din maskin, kan du legge EzGraphics-fila i samme mappe som python-fila. Du finner EzGraphics-fila i ei mappe på Fredagspython-sida. Du kan lese fra side 212 til side 217, men vi gjentar det viktigste her: #bildeanalyse #Her må vi importere GraphicsImage i tillegg til den vanlige GraphicsWindow. from ezgraphics import GraphicsWindow,GraphicsImage #Vi velger et filnavn. Dette er navnet på fila vi skal lese inn. filename = "hund.gif" #Oppretter en variabel som programmet kan bruke image = GraphicsImage(filename) #Vi har to metoder for å hente ut høyden og bredden til et bilde width = image.width() height = image.height() #Vi går igjennom ei todimensjonal liste #metodene getred(row,col), osv, henter fargen til en piksel på et gitt sted. for row in range(height): for col in range(width): red = image.getred(row,col) green = image.getgreen(row,col) blue = image.getblue(row,col) #for å invertere trekker vi den gamle verdien fra 255: newred = 255 - red newgreen = 255 - green newblue = 255 - blue #setter ny piksel: image.setpixel(row, col, newred, newgreen,newblue) #Vi lager et vindu og et lerret: win = GraphicsWindow() canvas = win.canvas() #Her tegner vi bildet vi har laget canvas.drawimage(image) #venter på brukeren win.wait()

#Vi kan også lagre bildet: image.save("redigert_" + filename) Her er et eksempel på bilde før(høyre) og etter(venstre) invertering. En annen morsom ting dere kan gjøre er å lage overføre verdier fra bildet til et canvas, slik som vi er vant til. Hvis vi for eksempel tegner hver syvende piksel som en stor sirkel fylt med fargen til pikselen, får vi følgende bilde på lerretet. Merk at dette kan vi ikke lagre (men vi kan ta skjermdump!) Noen oppgaver: -Snu bildet opp ned -Snu bildet 180 grader.

-gjør bildet svart-hvitt Utvalgte oppgaver fra boka: Oppgave P4.46: Implement a sunset effect by increasing the red level of each pixeø of an image by 30 percent (up to a value of 255). Oppgave P4.47 Add black vertical stripes to an image, each spaced five pixels from the next. The partial image below is enlarged to show the lines. Oppgave P4.48 Add black diagonal stripes to an image, each spaced five pixels apart. The partial image below is enlarged to show the lines. Oppgave P4.49 Rotate an image 90 degrees clockwise. Oppgave P4.50 Repeat an image four times. Oppgave P.4.51 Replicate each pixel of an image four times, so that the image is twice as arge and wide as the original, with blocky pixels. The partial image below is enlarged to show the pixels. Oppgave P4.53 Detect edges in an image, coloring each pixel black or white depending on whether it is significantly different from the neighbouring pixel to the east, south and south-east. Average the red, green and blue components of the three neighbours. The compute distance = red - red neighbours + green - green neighbours + green - red neighbours If that distance is < 30, color the pixel black, Otherwise, colour it white. Fjerne støy i bilde Et vanlig problem med bilder er det er støy (pixler som skiller seg veldig ut), og datamaskiner blir ofte brukt til å fjerne slik støy fra f. eks bilder fra overvåkingskameraer. Dette blir typisk gjort før man prøver å gjenkjenne objekter i bildet. Det finnes både veldig enkle og svært avanserte måter å fjerne støy på. Ideen bak alle er å forsøke å fjerne elementer fra bildet som er unaturlige. Ofte er dette finkornet støy, i form av enkelte pixler som skiller seg ut fra pixlene rundt. Oppgave Målet i denne oppgaven er å fjerne støy og skape et best mulig bilde ut av dette dette bildet (last ned fra http://folk.uio.no/ivargry/landscape_noisy_small.gif ).

Skriv kode som går gjennom hver pixel i bildet og forsøker å avgjøre om pixel-verdien er støy eller ikke. Dette kan typisk gjøres ved å sammenligne verdien med pixlene rundt. Hvis pixelen er støy, så kan du endre pixel-verdien. Du kan ta utgangspunkt i følgende kode: from ezgraphics import GraphicsWindow,GraphicsImage, ImageWindow from statistics import median image = GraphicsImage( "landscape_noisy_small.gif" ) width = image.width() height = image.height() def hent_pixelfarge(bilde, x, y, farge): if farge == "blue" : return bilde.getblue(y, x) elif farge == "red" : return bilde.getred(y, x) else : return bilde.getgreen(y, x) def fjern_noise(bilde, farge, x, y): verdier_rundt = [] for i in range (x- 2, x+ 3 ): for j in range (y- 2, y+ 3 ): if i < 0 or i >= width or j < 0 or j >= height: continue if i!= x and j!= y: verdier_rundt.append(hent_pixelfarge(bilde, i, j, farge)) return int (median(verdier_rundt)) for x in range (width): for y in range (height): image.setpixel(y, x, (fjern_noise( image, "red", x, y), fjern_noise( image, "green", x, y), fjern_noise( image, "blue", x, y))) win = GraphicsWindow(width, height) canvas = win.canvas() canvas.drawimage( image ) win.wait()

Bildet under er laget ved å kjøre denne koden med en veldig enkel løsning der hver pixel alltid settes til gjennomsnittet av pixlene rundt. Det gjør at all støyen blir borte, men i tillegg blir også bildet veldig smoothet. Prøv å få til en bedre løsning enn dette! Øke kontrast i bilde Målet i denne oppgaven er å øke kontrasten i bildet under og få et så bra resultat som mulig. Last ned bildet herifra: http://folk.uio.no/ivargry/landscape_low_contrast.gif Bilder med lav kontrast har gjerne pixelverdier som skiller seg lite fra hverandre. Vi ønsker å skape større skille mellom verdiene, f. eks ved å gjøre små verdier enda lavere og store verdier større. Denne kjernekoden prøver på en veldig enkel måte å gjøre bildet skarpere: from ezgraphics import GraphicsWindow,GraphicsImage, ImageWindow image = GraphicsImage( "landscape_low_contrast.gif" ) width = image.width() height = image.height() def hent_pixler( bilde, x, y): red = bilde.getred(y, x) green = bilde.getgreen(y, x)

blue = bilde.getblue(y, x) return (red, green, blue) def mer_kontrast(pixelverdi): if pixelverdi < 128 : return int (pixelverdi / 1.1 ) else : return int ( 256 - ( 256 - pixelverdi)/ 1.1 ) return ny_verdi for x in range (width): for y in range (height): red, green, blue = hent_pixler(image, x, y) image.setpixel(y, x, (mer_kontrast(red), mer_kontrast(green), mer_kontrast(blue))) win = GraphicsWindow(width, height) canvas = win.canvas() canvas.drawimage(image) win.wait() Funksjonen mer_kontrast tar her en pixel-verdi og deler verdien på 1.1 hvis den er under 128 (altså gjør den lavere) og gjør det omvendt hvis den er over 128 (gjør den høyere). Resultatet blir ikke så bra, men det gir et skarpere bilde: Oppgave Ta utgangspunkt i koden over, og skriv din egen funksjon for å øke kontrasten i bildet. Prøv å få et skarpt bilde som ser naturlig ut. Med en god funksjon bør resultatet kunne bli noe sånt som dette: