OEFENINGEN PYTHON REEKS 5

Vergelijkbare documenten
Vectoren, matrices en beeld. Figuur: Lena. Albert-Jan Yzelman

Oefeningenles beeldverwerking

Oefeningenles beeldverwerking

OEFENINGEN PYTHON REEKS 5

Inhoud college 5 Basiswiskunde Taylorpolynomen

OEFENINGEN PYTHON REEKS 4

Tentamen Beeldverwerking TI2716-B Woensdag 28 januari

Wetenschappelijk Rekenen

Creeër een 3D effect met

Functies van vectoren

Je mag Zorich deel I en II gebruiken, maar geen ander hulpmiddelen (zoals andere boeken, aantekeningen, rekenmachine etc.)!

Beeldcompressie. VWO Masterclass oktober 2008

aan te wijzen? Zo ja, noem de naam/namen en regelnummer(s).

OEFENINGEN PYTHON REEKS 6

WELKOM BIJ UNICODING PROCESSING. Unicoding 1. Handleiding docent LES 1 DEEL A: Vormen, coördinaten en kleuren

Informatica: C# WPO 9

DSP Labo 3&4: Fourier

Bijsluiter Presets 2014 t.b.v. NLT-module Sound Design

3. Structuren in de taal

Opgaven Functies en Reeksen. E.P. van den Ban

Bij elkaar behorende instructies die een probleem oplossen of een taak uitvoeren.

Uitwerkingen Lineaire Algebra I (wiskundigen) 22 januari, 2015

Workshop XIMPEL TV Winoe Bhikharie Vrije Universiteit Amsterdam / info@ximpel.net

Aanvullingen bij Hoofdstuk 8

Python. Informatica. Renske Smetsers

1. Een van mijn collega s, liet een mooi verhaal zien: De opgave was: Los op ln(x + 2) ln(x + 1) = 1.

Gemaakt door Santy Nicole

PhotoShop. Les 1 - Werken met lagen, kleuren en transparantie

OEFENINGEN PYTHON REEKS 1

Digitale Image Processing

TENTAMEN WISKUNDIGE BEELDVERWERKINGSTECHNIEKEN

TENTAMEN WISKUNDIGE BEELDVERWERKINGSTECHNIEKEN

In Photoshop kun je afbeeldingen bewerken en aanpassen door de diverse toevoegingen en effecten die je wilt toepassen op aparte lagen uit te voeren.

TRILLINGEN EN GOLVEN HANDOUT FOURIER

Lineaire Algebra en Vectorcalculus 2DN60 College 5.a Basis en dimensie

Handleiding BreakEven Calculator Door Thomas Vulsma

Informatica: C# WPO 12

Algemeen. Opgemaakte tekst: de stringmethode format

Proef-tentamen Algoritmiek Datum en tijd

Beweging. De beginvoorwaarden voor het numerieke programma zijn als volgt: x(0) = 0 m y(0) = 2,0 m. Plaats: vx(0) = 4,0 m/s vy(0) = 0 m/s.

Beknopte handleiding voor Derive 5.0 for Windows

Opdracht 3: Baanintegratie: Planeet in een dubbelstersysteem

Arrays. Complexe datastructuren. Waarom arrays. Geen stijlvol programma:

Tentamen Lineaire Algebra 1 (Wiskundigen)

Hertentamen 8D040 - Basis beeldverwerking

Wetenschappelijk Rekenen

Informatica: C# WPO 6

Informatica: C# WPO 13

Voor deze tutorial heb je een aantal afbeeldingen nodig. Deze afbeeldingen kan je downloaden via de site maureensphotoshoptutorials.wordpress.

Informatica: C# WPO 5

Informatica: C# WPO 6

. Maak zelf een ruwe schets van f met A = 2, ω = 6π en ϕ = π 6. De som van twee trigonometrische polynomen is weer een trigonometrisch polynoom

Face detection in color images Verslag. Domien Nowicki Bjorn Schobben

TECHNISCHE UNIVERSITEIT EINDHOVEN FACULTEIT DER TECHNISCHE NATUURKUNDE

Banner. Bannerformaten. Een banner is een reclame-uiting (met doorklikmogelijkheid)

Economische topper 4 Opdracht pag. 42 nr. 2

Het installatiepakket haal je af van de website

Selectie. Famous Faces

(x x 1 ) + y 1. x x k+1 x k x k+1

Informatica: C# WPO 4

Inhoudsopgave Voorwoord 5 Blijf op de hoogte 5 Hoe werk je met dit boek? 5 De website en aanvullende materialen 6 Voor docenten

Informatica: C# WPO 10

Informatica: C# WPO 7

TECHNISCHE UNIVERSITEIT EINDHOVEN Faculteit Wiskunde en Informatica

6. Lineaire operatoren

10.0 Voorkennis. Herhaling van rekenregels voor machten: a als a a 1 0[5] [6] Voorbeeld 1: Schrijf als macht van a:

De Sense HAT heeft een temperatuursensor waarmee je de temperatuur. #lees de temperatuur van de sensor en sla op als temp

De Sense HAT heeft een temperatuursensor waarmee je de temperatuur. #lees de temperatuur van de sensor en sla op als temp

Examen Complexe Analyse (September 2008)

COLOURMANAGEMENT BASISINSTRUCTIE

DEC DSP SDR 5 Dicrete Fourier Transform

Tentamen Functies en Reeksen

{neem f(x) = 3} {haakjes uitwerken} {vereenvoudig}

Computer Vision: Hoe Leer ik een Computer Zien?

Opgaven bij de cursus Relativiteitstheorie wiskunde voorkennis Najaar 2018 Docent: Dr. H. (Harm) van der Lek

ALGEMENE STATISTIEK VOOR BWI COMPUTEROPGAVEN 2009/2010. A.W. van der Vaart en F. Bijma

Examenvragen Hogere Wiskunde I

Instructie toetsresultaten ESIS overzetten naar Excel.

DEC SDR DSP project 2017 (2)

UITWERKINGEN d. Eliminatie van a geeft d. Eliminatie van b,

College WisCKI. Albert Visser. 16 januari, Department of Philosophy, Faculty Humanities, Utrecht University. Loodrechte Projectie

INFOGRAPHIC. Witte lijnen of vlakken Om het voorwerp een duidelijk en afwisselend beeld te geven voegen we nog een witte lijn toe

11.0 Voorkennis V

Hertentamen WISN101 Wiskundige Technieken 1 Do 5 jan :30 16:30

Aanvullingen van de Wiskunde

DEEL 1. Voorwoord Over dit boek en de auteurs...ix

Objectgeoriënteerd Programmeren: WPO 1

Programmeermethoden NA. Week 5: Functies (vervolg)

Basiskennis lineaire algebra

Lineaire afbeeldingen

Analyse I. 1ste Bachelor Ingenieurswetenschappen Academiejaar ste semester 31 januari 2006

Programmeermethoden NA. Week 5: Functies (vervolg)

Een database gebruiken

x cos α y sin α . (1) x sin α + y cos α We kunnen dit iets anders opschrijven, namelijk als x x y sin α

mailgroep photoshop Copyright

0.0 Berekenen code. ID Berekenaar downloaden. ID Berekenaar kopiëren

Het is niet toegestaan om een formulekaart of rekenmachine te gebruiken. f(x) = 9x(x 1) en g(x) = 9x 5. Figuur 1: De grafieken van de functies f en g.

Om een leveranciersbestand in te lezen kunnen de volgende stappen aangehouden worden:

PYTHON REEKS 1: BASICS. Mathias Polfliet

Transcriptie:

Signaal- en beeldverwerking OEFENINGEN PYTHON REEKS 5 In deze oefeningenreeks gaan we enkele eenvoudige toepassingen bestuderen in het domein van signaal- en beeldverwerking. In de eerste oefeningen beschouwen we een 1-dimensionaal signaal dat essentieel gewoon een lijst van getallen is. Daarna gaan we naar grijswaarde afbeeldingen, dit zijn matrices van getallen (in Python: een lijst in een lijst). In de laatste oefening gaan we op een kleuren afbeelding werken, dit zijn ook matrices maar elke pixel wordt nu beschreven met 3 getallen (in Python heb je dus een lijst van 3 getallen in een lijst in een lijst). Alle bestanden die je nodig hebt, zitten in het zip-bestand (reeks5_data.zip) dat je kan downloaden van de website. Pak dit zip-bestand uit op je computer en zorg dat alle python code die je schrijft wordt opgeslagen in diezelfde map zodat je eenvoudig de juiste bestanden kan inlezen).

Vraag 1: Ruis verwijderen in een 1-dimensionaal signaal Zet bovenaan je programma de volgende import: from pylab import figure,title,subplot,plot,show a) Lees de gegevens van het bestand sig1.txt als een lijst sig1 van floats. Plot dit signaal met behulp van de volgende code: plot(sig1) Dit signaal bevat ruis en we gaan proberen deze te verwijderen door het signaal te filteren. Formeel kunnen we de filter operatie schrijven als y[n] = i=0 x[n i] f[i] In deze vergelijking is y[n] de n de sample in het gefilterde signaal, x[n-i] de (n-i) de sample van het signaal en f[i] is de i de waarde in het filter dat we toepassen. Voor deze oefening kiezen we een filter-grootte h (bijvoorbeeld h = 7) en stellen f[i] = 1/h. Als h = 4, dan ziet f eruit als f = [0.25, 0.25, 0.25, 0.25]. Als we dan de filter toepassen dan is in het gefilterde signaal de waarde op plaats n gelijk aan het gemiddelde van de niet-gefilterde waarde op plaats n en de (h-1) voorgaande niet gefilterde waarden. Implementeer dit filter, plot het gefilterde signaal en test het voor verschillende waarden van h. b) Lees de gegevens van het bestand sig2.txt weer als een lijst sig2 van floats en plot dit signaal weer. Zoals je kan zien is ook hier weer ruis aanwezig, maar de ruis is hier van een ander type. Voer je code uit deel a weer uit en sla dit resultaat op in de variabele filt1. Schrijf nu een 2 de filter dat de mediaan gebruikt in plaats van het gemiddelde en creëer zo een gefilterd signaal filt2. Met behulp van de volgende code en het originele ruisvrije signaal noiseless in noiseless.txt, vergelijk de resultaten van filt1 en filt2 voor h = 7. (Heb je enig idee waarom een van de filters beter zou werken dan het ander?) plot(sig2) title('signaal met ruis') subplot(2,1,1) plot(filt1) plot(noiseless,color='r') title('filtering met gemiddelde') subplot(2,1,2) plot(filt2) plot(noiseless,color='r') title('filtering met mediaan') h 1

Vraag 2: Afgeleiden In signaalverwerking en voornamelijk in beeldverwerking benaderen we vaak de afgeleide van een signaal door simpelweg het verschil tussen 2 opeenvolgende samples/pixels te berekenen. Herinner je dat de afgeleide van een functie wordt gedefinieerd als: df(t) dt = lim h 0 f(t) f(t h) h De volgende code genereert 5 seconden van een sinus-signaal sin (2πf t) en tegelijk ook de afgeleide van dit signaal 2πf cos (2πf t) met een frequentie f = 2Hz. Beide signalen zijn continu, maar worden gesampled aan fs samples per seconde. Hoe groter deze sample-frequentie, hoe nauwkeuriger we het signaal kunnen plotten. from math import sin,pi,cos from pylab import figure,subplot,plot,show,legend t_end = 5 fs = 100 f = 2 sig = [] dsig = [] t_sig = [] t = 0 while t <= t_end: x = sin(2*pi*f*t) dx = 2*pi*f*cos(2*pi*f*t) sig.append(x) dsig.append(dx) t_sig.append(t) t += 1.0/fs Bereken nu de afgeleide door het signaal sig te filteren met het filter d = [+1,-1] zoals in de vorige oefening. Het gefilterde sample op index n is dus gelijk aan het originele sample op index n min het originele sample op index (n-1). Dit stuk geeft je de teller in de formule voor de afgeleide. De h in de noemer is de tijd die tussen 2 opeenvolgende samples zit en is dus gelijk aan 1/fs. Plot je resultaat met behulp van de volgende code en kijk hoe de waarde van fs de nauwkeurigheid van het resultaat beïnvloedt door ze kleiner te maken: plot(t_sig,sig,label="f(t)") plot(t_sig,dsig,color='g',label="f'(t)") plot(t_sig,filt,color='r',label="gefilterd") legend()

Vraag 3: Grijswaarde afbeeldingen Zet de volgende imports bovenaan je code: from pylab import figure,imread,imshow,show Lees de coins.png afbeelding gebruik makende van de imread funtie: I = imread( coins.png ) Deze afbeelding is 300x246 pixels groot en bevat enkel grijswaarden (geen kleur). Deze grijswaarden worden normaal gezien opgeslagen in 8 bits en kunnen dus waarden aannnemen tussen 0 en 255. In de bibliotheek die wij gebruiken zijn deze 8 bit waarden herschaald naar float waarden tussen 0 en 1. Deze pixels zijn per rij opgeslagen in een geneste lijst. len(i) zou 246 moeten teruggeven: onze afbeelding bevat 246 rijen. len(i[0]) zou 300 moeten teruggeven: elke rij in de afbeelding bevat 300 pixels. I[0][0] is dus de pixel helemaal links bovenaan in de afbeelding. We kunnen deze afbeelding tonen via de imshow functie. Hier moeten we ook nog zeggen dat de afbeelding met grijswaarden getekend moet worden: imshow(i,cmap= gray ) We gaan nu een edge detector schrijven die automatisch de randen in een afbeelding kan zoeken. Een rand definiëren we als de posities in de afbeelding waar de grijswaarde plots sterk verandert. Herinner je dat de mate van verandering wiskundig wordt gegeven door de afgeleide. Voor een 2- dimensionale functie f(x,y), zoals onze afbeelding, door de gradiënt f = ( f, f x y oefening hebben we gezien hoe we 1-dimensionale afgeleiden konden berekenen. ). In de vorige Schrijf een programma dat de randen in een afbeelding kan herkennen door de volgende stappen uit te voeren: (Hint: Om snel een matrix van nullen met h rijen en w kolommen te creëren kan je gebruik maken volgend stukje code: nullen = [[0 for j in range(w)] for i in range(h)]) a) Bereken de afgeleide volgens x, door voor elke rij de afgeleide te berekenen en sla dit resultaat op in een nieuwe afbeelding Ix. b) Doe hetzelfde per kolom om zo de afgeleide Iy volgens y te berekenen. c) Je hebt nu 2 afbeeldingen Ix en Iy. De gradiënt voor een pixel op coordinaten (i,j) is nu de vector f = (I x, I y ). Bereken voor alle pixels f 2 = I x 2 + I y 2 en schrijf dit weg naar een nieuwe afbeelding I_grad. d) Maak nu een nieuwe afbeelding edges die 0 bevat voor elke pixel waarvoor I_grad kleiner is dan een threshold van 0.05 en 1 voor de pixels waarvoor I_grad groter is.

RGB Images Een RGB kleurenafbeelding kan je beschouwen als een matrix in 3 dimensies. De eerste twee dimensies zijn de hoogte en de breedte van de afbeelding. De derde dimensie zorgt er voor dat we een kleurenafbeelding hebben: elke pixel uit de afbeelding heeft een waarde 0-255 voor ROOD, een waarde 0-255 voor GROEN en een waarde 0-255 voor BLAUW. Zo kan elke pixel dus meer dan 16.000.000 (256x256x256) verschillende kleuren krijgen. Vraag 4: Overlay & Mask Open de afbeeldingen I1 = python.bmp en I2 = bugs.bmp. Maak nu een nieuwe afbeelding I_out waarin we deze twee afbeeldingen gaan overlappen: We kiezen een blending factor alpha = 0.5 en we creëeren I_out door een gewogen gemiddelde te nemen van de twee input afbeeldingen: I_out[i][j] = alpha * I1[i][j] + (1-alpha) * I2[i][j] Toon het resultaat dat je verkrijgt door verschillende waarden voor alpha te gebruiken. Feitelijk zou het beter zijn als we uit de afbeelding bugs.bmp enkel het konijn zouden knippen en dit overzetten naar de andere afbeelding. Dit kunnen we doen door gebruik te maken van een masker. Als masker neem je de afbeelding bugs_masker.bmp. Kopieer nu de pixels van I2 naar I1 maar enkel als de overeenkomende pixel in masker een zwarte kleur heeft.

Vraag 5: De toverstaf uit Photoshop We gaan een programma maken dat meet hoeveel pixels van een bepaalde kleur er in een afbeelding aanwezig zijn. Dit gebeurt in het algemeen als volgt: 1. Open de afbeelding en lees de pixels in. 2. Open één van de afbeeldingen met homogene kleur en lees de pixels in. Hiermee kan je de te zoeken kleur bepalen (= de pixelwaarde op plaats (0,0)). 3. Definieer een threshold-waarde die bepaalt hoe ver een pixel uit de originele afbeelding van de targetkleur mag afwijken om al dan niet geselecteerd te worden. 4. Maak een nieuwe image die voor elke pixel uit de originele afbeelding aantoont hoe ver deze van de targetkleur verwijderd is. Open hiervoor een nieuwe grijswaarden-afbeelding van dezelfde grootte als de originele afbeelding: newim = [[0 for j in range(w)] for i in range(h)] Om de pixelwaarden van deze nieuwe afbeelding te berekenen gebruik je de volgende regel: Hoe dichter de R, de G en de B waarden van de originele pixel bij de targetwaarden liggen, hoe lichter de kleur van de overeenkomstige pixel in de nieuwe afbeelding. Een witte pixel betekent dus een perfecte match met de targetkleur. 5. Nu gaan we de grijswaarden-afbeelding die we hebben aangemaakt thresholden zodat we enkel witte en zwarte pixels overhouden. Witte pixels betekenen dat er slechts een klein verschil bestond tussen de originele R, G en B waarden en de targetwaarden (dus de grijswaarde valt binnen de threshold). In het andere geval zijn de pixels zwart. 6. Bepaal het kleurpercentage door te kijken naar het aantal witte/zwarte pixels in het bekomen resultaat. Test je code door gebruik te maken van afbeelding mario.bmp en targetkleuren kleur.bmp en kleur2.bmp. Varieer de threshold-waarde en vergelijk de bekomen resultaten. KLEUR