LAB 3: Operationer på gråskalebilder

Relevanta dokument
Lab 1: Operationer på gråskalebilder

Medicinska Bilder, TSBB31. Lab: Mätvärden på Medicinska Bilder

Medicinska Bilder, TSBB31. Lab: Mätvärden på Medicinska Bilder

Bildbehandling, del 1

Bildförbättring i spatial domänen (kap. 3) Bildförbättring (enhancement) Spatial domän. Operatorer. Tröskling (threshold) Gråskale-transformationer

Signaler, information & bilder, föreläsning 14

Medicinska Bilder, TSBB31. Lab3: Mätvärden på Medicinska Bilder

Signaler, information & bilder, föreläsning 14

Index. Vektorer och Elementvisa operationer. Summor och Medelvärden. Grafik i två eller tre dimensioner. Ytor. 20 januari 2016 Sida 1 / 26

Grafisk Teknik. Rastrering. Övningar med lösningar/svar. Sasan Gooran (HT 2013)

TANA17 Matematiska beräkningar med MATLAB för M, DPU. Fredrik Berntsson, Linköpings Universitet. 9 november 2015 Sida 1 / 28

Flerdimensionella signaler och system

MR-laboration: design av pulssekvenser

TANA17 Matematiska beräkningar med Matlab

TEM Projekt Transformmetoder

Laboration 4: Digitala bilder

Laboration 1. Grafisk teknik (TNM059) Introduktion till Matlab. R. Lenz och S. Gooran (VT2007)

TAIU07 Matematiska beräkningar med Matlab

Lågpassfiltrering. Signal- och Bildbehandling FÖRELÄSNING 8. Lågpassfiltrering

Signal- och Bildbehandling FÖRELÄSNING 7. En bild är en 2D signal. För en digital bild gäller. Fig. 2.1

TANA17 Matematiska beräkningar med MATLAB för M, DPU. Fredrik Berntsson, Linköpings Universitet. 2 november 2015 Sida 1 / 23

Institutionen för matematik och datavetenskap Karlstads universitet. GeoGebra. ett digitalt verktyg för framtidens matematikundervisning

MMA132: Laboration 2 Matriser i MATLAB

Linjär Algebra, Föreläsning 2

Spektrala Transformer för Media

Signaler, information & bilder, föreläsning 12

När man vill definiera en matris i MATLAB kan man skriva på flera olika sätt.

Spektrala Transformer för Media

MATLAB Laboration problem med lokala extremvärden

TSBB14 Laboration: Intro till Matlab 1D

Förkortning och förlängning av rationella uttryck (s. 27 Origo 3c)

M0043M Integralkalkyl och Linjär Algebra, H14, Matlab, Föreläsning 1

LAB 3. INTERPOLATION. 1 Inledning. 2 Interpolation med polynom. 3 Splineinterpolation. 1.1 Innehåll. 3.1 Problembeskrivning

Bildbehandling i spatialdomänen och frekvensdomänen

3.0. Tips och Trix Sida 1 av 18

Introduktion till programmering SMD180. Föreläsning 9: Tupler

Ansiktsigenkänning med MATLAB

Tentamen Bildanalys (TDBC30) 5p

LABORATION cos (3x 2 ) dx I =

TANA17 Matematiska beräkningar med Matlab

TSBB31 Medicinska bilder Föreläsning 3

KPP053, HT2016 MATLAB, Föreläsning 1. Introduktion till MATLAB Skript Inläsning och utskrift av variabler Ekvationssystem Anonyma funktioner

TANA17 Matematiska beräkningar med MATLAB för M, DPU. Fredrik Berntsson, Linköpings Universitet. 27 oktober 2015 Sida 1 / 31

Robotarm och algebra

STOCKHOLMS UNIVERSITET VT 2011 Avd. Matematisk statistik GB DATORLABORATION 1: TIDSSERIER.

Laboration: Grunderna i MATLAB

MATLAB. Python. Det finns flera andra program som liknar MATLAB. Sage, Octave, Maple och...

Signal- och Bildbehandling, TSBB14. Laboration 2: Sampling och rekonstruktion. DFT.

Logik och Jämförelser. Styrsatser: Villkorssatsen if och repetitonssatsen for. Scriptfiler. Kommentarer. Tillämpningar: Ett enkelt filter.

Matlabövning 1 Funktioner och grafer i Matlab

DATORÖVNING 3: EXPERIMENT MED

Projekt 3: Diskret fouriertransform

SF1625 Envariabelanalys Lösningsförslag till tentamen

HI1024 Programmering, grundkurs TEN

Laboration: Grunderna i Matlab

Uppgift 1 ( Betyg 3 uppgift )

Förkortning och förlängning av rationella uttryck (s. 29 Origo 3b)

Linjär algebra med tillämpningar, lab 1

Introduktion till MATLAB

Laboration 2, M0043M, HT14 Python

GeoGebra i matematikundervisningen - Inspirationsdagar för gymnasielärare. Karlstads universitet april. Liten introduktionsguide för nybörjare

TAIU07 Matematiska beräkningar med MATLAB för MI. Fredrik Berntsson, Linköpings Universitet. 15 januari 2016 Sida 1 / 26

Matlabövning 1 Funktioner och grafer i Matlab

Språket Python - Del 1 Grundkurs i programmering med Python

Instruktion för laboration 1

Newtons metod och arsenik på lekplatser

Signaler, information & bilder, föreläsning 15

Innehåll. Vad är MATLAB? Grunderna i MATLAB. Informationsteknologi. Informationsteknologi.

Variabler. TANA81: Beräkningar med Matlab. Matriser. I Matlab skapas en variabel genom att man anger dess namn och ger den ett värde:

Medicinska bilder. Programkurs 6 hp Medical Images TSBB31 Gäller från: 2018 VT. Fastställd av. Fastställandedatum

Tekniska Högskolan i Linköping Institutionen för Datavetenskap (IDA) Torbjörn Jonsson Plot och rekursion

15 februari 2016 Sida 1 / 32

Introduktion till Matlab

Laboration 2: Styrkefunktion samt Regression

Gemensamt projekt: Matematik, Beräkningsvetenskap, Elektromagnetism. Inledning. Fysikalisk bakgrund

6 Derivata och grafer

Fingerprint Matching

Uppsala Universitet Matematiska Institutionen Thomas Erlandsson

Obligatoriska uppgifter i MATLAB

Simulering med ModelSim En kort introduktion

SF1905 Sannolikhetsteori och statistik: Lab 2 ht 2011

7 Extremvärden med bivillkor, obegränsade områden

2301 OBS! x används som beteckning för både vinkeln x och som x-koordinat

TNM030 Tentasammanfattning (frågor) Nathalie Ek, Sammanfattning. TNM030 - Bildbehandling och bildanalys

Grundredigering i Photoshop Elements. Innehåll. Lennart Elg Grundredigering i Elements Version 2, uppdaterad

Tynker gratisapp på AppStore

Envariabelanalys 5B1147 MATLAB-laboration Derivator

Analys av funktioner och dess derivata i Matlab.

LABORATION 2. Trapetsregeln, MATLAB-funktioner, ekvationer, numerisk derivering

Extramaterial till Matematik Y

Signal- och bildbehandling TSBB14

Tentamen TANA17 Matematiska beräkningar Provkod: DAT1 Godkänd: 8p av totalt 20p Tid: 14:e januari klockan

Uppgift 1 - programmet, Uppg6.m, visade jag på föreläsning 1. Luftmotståndet på ett objekt som färdas genom luft ges av formeln

Introduktion till Matlab

Dagens program. Programmeringsteknik och Matlab. Administrativt. Viktiga datum. Kort introduktion till matlab. Övningsgrupp 2 (Sal Q22/E32)

Att skapa en bakgrundsbild och använda den i HIPP

Trepoängsproblem. Kängurutävlingen 2011 Cadet. 1 Vilket av följande uttryck har störst värde? 1 A: B: C: D: E: 2011

DN1240, Numeriska metoder. Laboration 0 (frivilliga delar) (dvs uppgifterna behöver inte redovisas) Introduktion till UNIX och MATLAB

SF1672, Linjär Algebra med Matlab för F1 Lab0

Transkript:

LAB 3: Operationer på gråskalebilder Maria Magnusson, uppdaterad av Michael Felsberg Avdelningen för Datorseende, Institutionen för Systemteknik, Linköpings Universitet Februari 2016 1 Introduktion En datorsymbol innebär att en l ska skapas och skickas till läraren. Kopiera bilderna baboon.tif, circle.tif, pirat.npy, pattern.npy från /site/edu/bb/siginfbild/imagelab/ till ditt hembibliotek. Starta sedan en lämplig editor (t.ex. emacs) och ipython. 2 Grundläggande om bilder i Python För att kunna jobba med bilder i Python, följande paket måste importeras: import numpy as np from scipy import signal, misc from matplotlib import pyplot as plt plt.rcparams['image.interpolation'] = 'nearest' Det första paketet (numpy) är ett Python paket för att hantera matriser. De andra två paketen är Python paket för att tillhandhålla mer avancerade vetenskapliga operationer (scipy) och plottar (pyplot). Fjärde raden behövs bara för matplotlib med äldre version än 2. Alla Python skript måste innehålla denna preambeln. Det rekommenderas att spara dessa rader in en l preambel.py som sedan exekveras med execfile('preambel.py'). 1

2.1 Visa bilder Det nns ett ertal kommandon för att visa bilder i Python, men enklaste varianten (som dessutom liknar Matlab) är plt.imshow(): plt.imshow(im,'gray') I detta exempel innehåller Im själva (gråskala) bilden. Dessa kommandon automatiskt skalerar bilden så att pixlarna blir kvadratiska och att minsta bildvärdet blir svart och högsta blir vit i en linjär färgkarta med gråvärden. Det nns andra färgskalor, t.ex. jet, eller kan man skapa egna färgskalor. Om man vill mappa värdena till ett annat intervall, kan man ange detta som plt.imshow(im,'gray',clim=(min,max)) så att bilden visas med en linjär färgkarta mellan värdena min och max. Med kommandot får man en legend bredvid bilden som anger vilka färger som motsvarar vilka pixelvärden. I Python måste man avsluta alla plottkommandon med för att skapa eller uppdatera aktuella plotten. 2.2 Egna övningar Skapa en l VisaApan.py med preambeln och nedanstående innehåll och exekvera den. execfile('preambel.py') Im = np.double(misc.imread('baboon.tif')) plt.subplot(121) plt.imshow(im,'gray',clim=(0,255)) plt.title('original image') Kommandot plt.subplot(121) delar in fönstret i 1 rad och 2 kolumner, 2

dvs 2 rutor och visar bilden i den första av dem. Bilden Im innehåller bara en färgkanal och det behövs en färgkarta+värdesområde för att kunna visa bilden med plt.imshow(). Om bilden innehåller tre kanaler, uppfattas detta som RGB-värden utan mappning med hjälp av färgkartan. Mata in nedanstående kommandon. Im gör att bildmatrisen skrivs ut på skärmen. Då matrisen är mycket stor, kommer Python automatiskt plocka bort största delen av den. Det ger ändå en bra känsla för att en bild faktiskt bara är en matris. >> Im >> np.min(im) >> np.max(im) FRÅGA 1: Vad är min och max-värdet på baboon? I kontrast till Matlab, behöver Python bara ett enkelt np.min() anrop. Om man vill få ut minimalvärdet för varje kolumn, anger man att operation ska användas på dimension 0: np.min(im,0). Om man vill få minimalvärdet för varje kolumn och färgkanal, anger man en tupel med dimensionerna 0 och 2: np.min(im,(0,2)). Utvidga len VisaApan.py så att apan visas till höger med högre kontrast, t ex mellan 50 och 200. Ge också bilden en lämplig titel. FRÅGA 2: Lägg till följande rader innan : def on_press(event): print(im[round(event.ydata),round(event.xdata)]) fig = plt.gcf() fig.canvas.mpl_connect('button_press_event',on_press) Obs: det är viktig med antal mellanslag innan print (4) och tomma raden därefter. Nu går det att klicka på bilden och få ut värdet på aktuella positionen. Klicka mitt emellan apans ögon. Vilken koordinat (X,Y) och vilket gråskalevärde (Index) får du? Kontrollera också att du får samma värden i den vänstra och högra bilden. 3

3 Färgtabeller Ge kommandona graycmap = plt.get_cmap('gray',256) gray_vals = graycmap(np.arange(256)) FRÅGA 3: set Titta på gray_vals och jämför med den vanliga gråskalefärgtabellen som visas i Föreläsningen. Principen är densamma, men det skiljer lite - vadå? Ge kommandona gray_vals[200:] = [1, 0, 0, 1] plt.register_cmap('ngray',graycmap.from_list('ngray', gray_vals)) FRÅGA 4: Titta på gray_vals och ge kommandot plt.imshow() med 'ngray'. Förklara hur denna färgtabell påverkar bilden till vänster. Gör en egen färgtabell, baserad på gråskalefärgtabellen, men låt värden 200 visas blå och värden 50 visas gröna. FRÅGA 5: Testa till sist färgtabellen 'jet' på apan. Vilken färg får apans nos? 4

4 Faltning (English: Convolution) 4.1 Viktat medelvärdesbildande lter (Lågpass-lter) Skapa en l FaltaApan.py med nedanstående innehåll och exekvera den. execfile('preambel.py') Im = np.double(misc.imread('baboon.tif')) plt.subplot(121) plt.imshow(im,'gray',clim=(0,255)) plt.title('original image') I föreläsningen har vi byggt olika lterkärnor från dem två basltren b = 1 1 /2 och d = 1-1. Notera att dessa två lter har sin origo på kanten i mitten, d.v.s. förskjuta signalen med 1/2 sampel. FRÅGA 6: Motivera varför b divideras med normaliseringsfaktorn 2. Anta att normaliseringsfaktorn har ett lägre värde. Vad händer med signalen? Filterkärnan aver = 1 2 1 2 [4] 2 1 2 1 /16 kan skapas i Python på följande sätt: b = np.array([0.5,0.5]) b2 = np.convolve(b,b).reshape(1,-1) aver = np.kron(b2,b2.t) Kommandon reshape behövs för att skapa en 1 3 matris från faltningsresultatet, vilken behövs för Kroneckerprodukten kron. Kör koden och veriera att kärnan är korrekt. Titta även på mellanresultaten. Applicera sedan kärnan på apan med koden: Imaver = signal.convolve2d(im,aver,'same') Utvidga len FaltaApan.py med denna kod och visa den ltrerade apan Imaver till höger om original-apan. 5

FRÅGA 7: Medelvärdesbildande lter används ofta för brusreduktion, men vad händer med na detaljer, såsom kanter och linjer, i bilden? FRÅGA 8: Vad innebär same i signal.convolve2d()-kommandot? Kontrollera genom att skriva help(signal.convolve2d). Testa sedan att falta er gånger med aver för att få en kraftigare eekt. Visa den 3ggr faltade apan till höger. Var noga med att ha samma kontrastfönster på båda bilderna, så att det blir pedagogiskt att jämföra de båda bilderna. FRÅGA 9: Vad händer när ltret aver appliceras upprepade gånger? 4.2 Derivering i x- och y-led, gradient Filterkärnan d beräknar nita dierensen. För att undvika föryttningen med 1/2 sampel, används i många fall centrala dierensen istället: cd = 1 [0] -1 /2 FRÅGA 10: Använd faltningen av b och d för att beräknar cd. Skriv ner motsvarande Python kod och veriera att resultatet blir cd. Obs: använd för värden 1.0 istället för 1, så att lterkärnan får yttalformat. För beräkningen av partiella derivatorna av en bild måste man välja ett koordinatsystem. Ett vanligt val är att identiera kolumnindexen med x- koordinaten och radindexen med y-koordinaten. Derivatan i x-led av en bild f(x, y) kan sedan beräknas enligt f(x, y) x = f(x, y) sobelx f(x, y). x På liknande sätt kan derivatan i y-led, f(x,y) y, beräknas. Sobel-ltren visas nedan. 6

sobelx = 1 0-1 2 [0] -2 1 0-1, sobely = 1 2 1 0 [0] 0-1 -2-1. FRÅGA 11: Valet av koordinatsystemet resulterar i sobely = sobelx T. Vad händer med sobely om man placerar bildens origo längs ner till vänster? Skapa en l DeriveraCirkeln.py med nedanstående innehåll, komplettera och exekvera den. execfile('preambel.py') Im = np.double(misc.imread('circle.tif')) plt.subplot(221) plt.imshow(im,'gray',clim=(0,255)) plt.title('original image') b = np.array([0.5,0.5]) b2 = np.convolve(b,b).reshape(1,-1) d =... cd =... sobelx =... Imsobelx = signal.convolve2d(im,sobelx,'same') plt.subplot(223) plt.imshow(imsobelx,'gray',clim=(-128,127)) plt.title('sobel image') Lägg till kod i DeriveraCirkeln.py för att visa resultatet av sobely faltat med cirkeln. Visa resultatbilden nere till höger. När en bild bara innehåller positiva värden från 0 till 255, fungerar gray färgtabellen så här: color: black gray white pixel value: 0 128 255 De sobelltrerade bilderna innehåller negativa värden. När en bild bara innehåller värden i intervallet [-128 127], fungerar gray färgtabellen så här: 7

color: black gray white pixel value: 128 0 127 Följaktligen visas negativa värden mörka och positiva värden ljusa. Värden nära 0 visas grå. FRÅGA 12: Titta på dina bilder och tala om varför kanten i originalbilden ibland blir mörk, ibland ljus, och ibland grå i de sobelltrerade bilderna. Gradienten ( f(x,y) x ), f(x,y) y är en tvådimensionell vektor som pekar i den riktning där intensiteten i bilden f(x, y) ökar snabbast. FRÅGA 13: Skriv upp det matematiska uttrycket för magnituden av gradienten i bilden f(x, y)! (Alternativa benämningar på magnituden är längden eller absolutbeloppet.) Lägg till kod i DeriveraCirkeln.py så att magnituden av gradienten på cirkeln visas uppe till höger. Skriv också ett liknande skript för apan, DeriveraApan.py, alternativt ha lnamnet som argument till skriptet, och studera bilderna. Ofta duger det bra att använda centrala dierenser cd (i x- och y-led) istället för sobel, men om man vill vara noggrann är sobel bättre. För cirkeln gäller det ju att dess kant är lika stark runtom. Därmed bör också magnituden av gradienten vara lika stark runtom. Detta uppfylls bättre för sobel än cd. Visa detta med skriptet MagnitudeComp.py. För att se tydligt behöver man ändra kontrastintervallet. Ett tips är att börja med att sätta kontrasten mellan 0 och 160 enligt nedan och sedan justera 0 uppåt till ett värde L. I gure(1) ska visas: I gure(2) ska visas: sobelmagnitude centraldimagnitude kontrast:[0 160] kontrast:[0 160] sobelmagnitude centraldimagnitude kontrast:[l 160] kontrast:[l 160] 8

4.3 Laplace-lter (negativt Högpass-lter) Laplace-operatorn denieras ( ) 2 2 = x 2 + 2 y 2 = x x + y y FRÅGA 14: Konstruera ett Laplace-lter genom att fylla i rutorna nedan. Som synes är Laplace-ltret givet. Dess centrum är markerat med en tjockare ram. För deriveringsoperatorerna är deras centrum faktiskt mittemellan pixlarna. 1 1 1 1 0 1 0 1 4 1 0 1 0 Skapa en l LaplaceCirkeln.py med nedanstående innehåll, komplettera och exekvera den. execfile('preambel.py') Im = np.double(misc.imread('circle.tif')) plt.subplot(121) plt.imshow(im,'gray',clim=(0,255)) plt.title('original image') d =... d2 =... laplace =... Imlaplace = signal.convolve2d(im,laplace,'same') plt.subplot(122) plt.imshow(imlaplace,'gray',clim=(-200,200)) plt.title('laplace image') Laplace-operatorn estimerar alltså en slags 2-D andraderivata. Nedan visas hur en 1-D andraderivata reagerar på en (approximativ) 1D rektangulär funktion f(x). 9

f(x) f (x) f (x) x x x FRÅGA 15: Stämmer bilden Imlaplace överens med skissen? ditt svar. Motivera Skapa en l SharpenPirate.py med liknande innehåll som LaplaceCirkeln.py. Raden med misc.imread() byts ut mot: Im = np.load('pirat.npy') FRÅGA 16: Du kan också behöva justera gränserna (-200,200). Vad blir eekten av att ändra gränserna till (-100,100)? FRÅGA 17: Studera bilden (Imlaplace) och jämför med originalbilden (Im). Hur stor är ltersvaret på jämna ytor (kinden t ex) jämfört med ltersvaret i regioner med snabba förändringar (fjädern t ex)? Hur påverkas kanter? Laplace-ltret förstärker alltså snabba förändringar i bilden. Man talar om ett högpass-lter (HP). Egentligen ska detta ha omvänt tecken, bilda därför ImHP = -Imlaplace Komplettera sedan SharpenPirate.py med en bild som är summan av originalbilden och högpassbilden, dvs Imsharp = Im + ImHP Skapa också ImSharp2 = Im + 2*ImHP FRÅGA 18: Kommentera resultatet! 10

5 Vikning (English: aliasing) Skapa en l SamplaNed.py med nedanstående innehåll och exekvera den. execfile('preambel.py') Im = np.load('pattern.npy') plt.subplot(121) plt.imshow(im,'gray',clim=(-1,1)) plt.title('original pattern') Sampla ned mönstret med faktor 2 i båda dimensioner med Im[::2,::2] och visa resultatet till höger. FRÅGA 19: Hur skiljer sig bilderna? Hur kan man förklara det som händer med den övre delen av högra bilden? Den observerade eekten är oönskad och beror på att bilden inte förbehandlades på rätt sätt. FRÅGA 20: Hur ska bilden förbehandlas? Upprepa behandlingen enligt fråga 9 innan nedsamplingen och visualisera resultatet. Variera antal upprepningar. FRÅGA 21: Hur många upprepningar behövs ungefär för att undvika artefakterna? Vilken nakdel har metoden? 11

6 Visualisering av fourierspektrumet I föreläsningen nämndes np.fft.fftshift() och np.fft.ifftshift() för visualisering. Båda funktioner ger samma resultat för ett jämn antal sampler, men olika för udda antal sampler. FRÅGA 22: Komplettera följande bild genom att testa i Python Skapa en l FourierVis.py och exekvera den: execfile('preambel.py') Im = np.load('pirat2.npy') IM = np.fft.fftshift(np.fft.fft2(np.fft.ifftshift(im))) plt.subplot(221), plt.imshow(np.abs(im),'gray'), plt.subplot(222), plt.imshow(np.angle(im),'gray'), plt.subplot(223), plt.imshow(np.real(im),'gray'), plt.subplot(224), plt.imshow(np.imag(im),'gray'), FRÅGA 23: Varför visar bild 1 och 3 bara en vit punkt i mitten? Ändra bild 1 till logaritmisk skala (OBS: undvik log(0) genom att addera 1) och visa bild 3 så att minsta värdet blir svart och 0 hamnar precis i mitten av färgskalan. Visa bild 2 bara där amplituden är större än dess medelvärde. FRÅGA 24: Vad händer med bild 1 & 2 utan ifftshift()? Varför? 12