2D1422 Bildbehandling och Datorseende:
Allm¨ anna labanvisningar
Detta dokument ger en allm¨an bakgrundsinformation till laborationerna i datorseendekursen, samt specifik information avseende bildhantering i Mat- lab. L¨as genom texten och tillgodog¨or dig inneh˚allet innan du b¨orjar labo- rera.
Dator- och laborationsmilj¨ o
Laborationerna g˚ar ut p˚a att praktiskt studera ett antal grundl¨aggande tekniker i bildbehand- ling, bildanalys och datorseende samt att l¨osa enkla problem med hj¨alp av dessa. F¨or att und- vika att programmeringen tar alltf¨or mycket tid, har vi valt att anv¨anda Matlab som interaktiv programmeringsmilj¨o och visualiseringsverktyg. Eftersom laborationerna omfattar visning av gr˚atonsbilder, och i vissa moment ¨aven f¨arginformation, beh¨over du d¨armed ha tillg˚ang till Matlab p˚a en dator med s˚adana visningsm¨ojligheter.
L¨attast anv¨ander du dig av arbetsstationerna i CSCs terminalsalar. Du kan naturligtvis ocks˚a g¨ora laborationerna p˚a en annan dator d¨ar du har tillg˚ang till Matlab. I s˚a fall ¨ar det dock v¨art att notera att vissa av de testbilder som tillhandah˚alls i kursen ligger lagrade p˚a Matlabs interna bin¨ara format. Kursledningen kan ej garantera att dessa kommer att kunna anv¨andas p˚a andra datorer ¨an de SUN-datorer som finns i CSCs ordinarie UNIX-milj¨o. Vidare sker redovisningarna p˚a datorer i CSCs terminalsalar.
Dock finns ett antal andra bilder lagrade p˚a ett mer minneskr¨avande ASCII-format. Om du anv¨ander Matlab p˚a i en annan datormilj¨o och drabbas av inkompatibilitetsproblem med det bin¨ara formatet, kan dessa bilder vara l¨attare att ¨overf¨ora mellan olika datorsystem.
Om du vill ¨overf¨ora filer fr˚an CSCs datorsystem till din egen dator kan du f¨orslagsvis anv¨anda dig av ett ftp-program, och ansluta dig till CSCs ftp-server ftp.nada.kth.se med ditt anv¨andarnamn p˚a CSC, varefter du navigerar dig fram till kurskatalogen
/misc/info/NADA-kurser/datorseende-gk
och ¨overf¨or filerna i de aktuella underkatalogerna (f¨or mer detaljerad information om konton och kurskataloger, se kommande avsnitt).
Kurskonton
Om du har ett personligt konto p˚a CSCs datorer skall du anv¨anda detta f¨or kursen. Kontakta i annat fall CSCs servicecenter Delphi (tag med giltigt ID-kort).
Kursinformation
Pekare till all studentinformation om kursen finns samlad under /info/bildath06
Bl.a. finns h¨ar en modulfil
/info/bildath06/module/bildath06
som laddas automatiskt efter att du anslutit dig till kursen medelst course join bildath06
Anslut dig till kursen om du inte redan gjort detta!
Kursmapp
Till kursen finns en kursmapp
/info/NADA-kurser/datorseende-gk som inneh˚aller f¨oljande filer och mappar:
Functions
Ett litet bibliotek av Matlab-funktioner f¨or att bearbeta och visa bilder.
Images-mat
Testbilder lagrade p˚a Matlabs bin¨ara (och kompakta) format.
Bilden i en s˚adan fil thisimage.mat ¨ar lagrad som en Matlab-variabel och laddas fr˚an Matlab medelst
load thisimage
Efter att du laddat denna fil kan du variabelns namn t.ex. genom att anv¨anda kommandot who.
Images-m
Testbilder lagrade p˚a ett mer minneskr¨avande ASCII-format.
Bilden i en s˚adan fil thatimage.m representeras i form av en Matlab-funktion och laddas t.ex. genom
x = thatimage;
Om du r˚akar gl¨omma det avslutande semi-kolonet f¨orst˚ar du varf¨or du inte skall g¨ora det i forts¨attningen.
Images
Testbilder i JPEG- och TIFF-format.
Bilden i en s˚adan fil, animage.jpg eller animage.tiff, l¨ases in medelst hund1 = double(imread(’animage.jpg’));
hund2 = double(imread(’animage.tiff’));
Om s¨okv¨agslistan (omgivningsvariabeln $MATLABPATH p˚a CSCs UNIX-system) ¨ar korrekt satt till ditt Matlab-system (s¨atts av /info/bildath06/module/bildath06 p˚a CSCs datorer) s˚a skall du ha tillg˚ang till dessa funktioner och bilder efter att du startat upp Matlab. Innan du startar upp Matlab, kontrollera d¨arf¨or att f¨oljande s¨okv¨agar ing˚ar (eller motsvarande f¨or andra datorer):
/info/NADA-kurser/datorseende-gk/Functions /info/NADA-kurser/datorseende-gk/Images-m /info/NADA-kurser/datorseende-gk/Images-mat
OBS! Funktionsbiblioteket och bildkatalogerna kan komma att uppdateras under kursens g˚ang.
De filer som avser en viss laboration l˚ases dock (s˚a n¨ar p˚a eventuella bug-fixar) n¨ar denna laboration delats ut. Av denna anledning kan de kursdeltagare som v¨aljer att g¨ora laborationerna vid andra datorer beh¨ova uppdatera filer som de kopierat fr˚an kursmappen.
Redovisningskrav
En laboration bed¨oms antingen som godk¨and eller underk¨and. Om laborationen underk¨anns blir du ombedd att komplettera samt att redovisa (hela) laborationen vid ett senare tillf¨alle.
Under redovisningen skall du kunna svara p˚a fr˚agor av allm¨an och specifik natur ang˚aende den metodik som anv¨ands samt fr˚agor som inneb¨ar att du m˚aste reproducera (delar av) labo- rationsuppgifterna. L¨attast hanterar du det senare genom att spara dina Matlab-kommandon i ett Matlab-script (se nedan).
F¨ore redovisningen skall du ha dokumenterat dina svar p˚a fr˚agorna i laborationsanvisningar- na skriftligt (det finns plats att skriva svaren direkt i laborationsanvisningarna). Beskrivningen skall omfatta en sammanfattning av resultaten och slutsatserna d¨arav p˚a ett s˚adant s¨att att texten kan l¨asas rimligt frist˚aende fr˚an laborationsinstruktionen.
Den (kortfattade) labrapport som du p˚a detta s¨att sammanst¨aller fungerar som ett kom- pletterande inl¨arningsmoment och ger dig tr¨aning i att dokumentera experimentellt arbete. Kom v¨al f¨orberedd till redovisningen.
Bokning av redovisningstid
Vi anv¨ander programmet bok f¨or att administrera bokningen av redovisningstillf¨allen. Du bokar tid f¨or redovisning genom att p˚a CSCs UNIX-datorer skriva kommandot
bok new bildath06
och f¨olja instruktionerna. N¨ar du startar detta program f˚ar du bl.a. se en lista med vilka bok- ningstider som ¨ar tillg¨angliga. Notera att endast den f¨orsta lediga tiden kan bokas f¨or varje redovisningspass. Efter att du bokat en tid kan du kan du se vilka tider du bokat medelst
bok show bildath06
Om du beh¨over avboka en tid, g¨or du detta med bok remove bildath06
Registrering
Observera att du m˚aste ha registrerat dig p˚a kursen med programmet res f¨or att kunna boka redovisningstid med bok. Om du inte har gjort detta tidigare, registera dig genom att ange kommandot
res checkin bildath06
och avvakta att databasen i res uppdateras. (Denna uppdatering kan ta n˚agon dag. Inte bara av denna anledning ¨ar det d¨arf¨or viktigt att du registrerar dig snarast efter kursstarten!) N¨ar registeringen aktiverats, kan du anv¨anda bok.
Bonuspo¨ ang
Som angivits i p˚a f¨orel¨asningarna, kan du f˚a bonuspo¨ang p˚a tentamen om du redovisar labo- rationerna f¨ore vissa tidpunkter. Mer detaljerad information om detta finns i kursprogrammet och p˚a kursens WWW-sida.
Hantering av bilder i Matlab
Om du inte ¨ar bekant med Matlab sedan tidigare, kan du vilja l¨asa genom “Anv¨andarhandledning till Matlab”, vilken finns att k¨opa p˚a CSCs studentexpedition. Du kan ocks˚a l¨asa genom det f¨orsta avsnittet i kapitel 2 i “Matlab’s User’s Guide” samtidigt som du provar n˚agra av exemplen p˚a din dator. Notera dock att Matlab har en viss inbyggd hj¨alpfunktionalitet baserad p˚a kom- mandot help. D¨arf¨or kan det g˚a att anv¨anda systemet baserat enbart p˚a denna funktionalitet samt den kortfattade introduktion som f¨oljer nedan.
Uppstart
F¨or att kunna visa bilder med det Matlab-system som k¨ors p˚a CSCs UNIX-datorer, m˚aste du ha en arbetsstation eller en X-terminal med gr˚aniv˚a- eller f¨argsk¨arm. Om du har ett kurskonto, b¨or X-windows startas upp automatiskt.
Innan du startar Matlab f¨or f¨orsta g˚angen, skall du kontrollera s¨okv¨agarna. P˚a CSCs UNIX- system kontrollerar du att
echo $MATLABPATH
ger en utskrift som inneh˚aller de s¨okv¨agar som anges p˚a sida 2 i detta h¨afte. Om inte, skriv module load /info/bildath06/module/bildath06
D¨arefter startar du Matlab genom att skriva matlab
Efter en kort stund kommer ett f¨onster med en logotyp att snabbt visas p˚a din sk¨arm, medan du f˚ar ett h¨alsningsmeddelande i ditt terminalf¨onster med en prompt. Om s˚a inte ¨ar fallet, kontrollera att ovanst˚aende instruktioner f¨oljts.
Om du anv¨ander en sk¨armbaserad version av Matlab och om systemet ¨ar l˚angsamt i Unix- milj¨on, kan du snabba upp interaktiviteten genom att anv¨anda terminalbaserad interaktion ist¨allet. Starta d˚a upp Matlab medelst:
matlab -nojvm
L¨ asning och visning av bilder
Bilder p˚ a Matlabs bin¨ arformat.
F¨or att ladda en av de bin¨ara bilder som ligger i kursens bilddatabas skriver duload canoe256
Med kommandot who kan du nu se att f¨oljande variabler definierats i Matlab Canoe zmax zmin
H¨ar inneh˚aller variabeln Canoe en bild. Du kan titta p˚a denna genom att anv¨anda visningsfunk- tionen showgrey, vilken skrivits speciellt f¨or denna laborationskurs
showgrey(Canoe)
Bilder p˚ a kursens ASCII-baserade funktionsformat.
F¨or att ladda in en av de bilder som lagrats p˚a det ASCII-baserade textformatet, kan du skrivaphone = phonecalc256;
Denna operation tilldelar v¨ardet av bilden till variabeln phone, och semikolonet undertrycker utskriften av resultatet av tilldelningen. (Som du m¨arker, kr¨aver detta format betydligt l¨angre inl¨asningstid.) Om du vill kan du titta p˚a resultatet med
showgrey(phone)
Du kan ocks˚a titta p˚a en annan s˚adan bild med den kortare notationen showgrey(nallo128)
Som du ser ¨ar kontrasten d˚alig i den nedre delen av denna bild. I f¨orsta laborationen skall vi unders¨oka olika bildf¨orb¨attringsmetoder f¨or att framh¨ava information som annars kan vara sv˚ar att se.
Egna bilder.
Har du egna bilder som du vill bearbeta, kan du anv¨anda Matlabs inbyggda funktion “imread” som kan l¨asa ett antal vanliga bildformat, inkluderande tiff- och jpeg-formaten – se “help imread”. En s˚adan bild l¨aser durawpic = imread(’image.tif’);
floatpic = double(rawpic);
showgrey(floatpic);
Observera att en konverting kr¨avs med kommandot double innan du kan anv¨anda utdata fr˚an funktionen “imread” som en “vanlig” bild.
Konvertering mellan olika bildformat kan du i CSCs datormilj¨o genomf¨ora med programmet
“convert”, som kan konvertera bilder mellan en rad olika filformat helt enkelt genom att du anger ¨andelsen p˚a det filformat du vill konvertera till.1
module add gnome
convert image.gif image.tiff convert onepage.ps onepage.tiff
Du kan ocks˚a anv¨anda det interaktiva programmet “xv” till att konvertera mellan bildformat samt till att grabba bilder fr˚an sk¨armen (f¨olj menyinstruktionerna).
St¨ ada bort gamla bilder.
Om du anv¨ander m˚anga stora bilder, kan det finnas risk att du sl˚ar i minnestaket. F¨or att st¨ada bort alla gamla bilder, skrivclear
och kontrollera med who att samtliga variabler raderats. Du kan ta bort visningsf¨onstret med close
eller genom att avsluta Matlab med exit
P˚a de kommande sidorna f¨oljer en kort inledning till Matlab avsedd f¨or studenter som inte sedan tidigare ¨ar bekanta med detta system. F¨or en van anv¨andare ¨ar antagligen det mesta av denna information ¨overfl¨odig. ¨aven vana anv¨andare kan dock vara betj¨anta av informationen under avsnitten “Syntax och ber¨akningseffektivitet”, “Koordinatsystem” samt “Minnesanv¨andning”.
F¨or att underl¨atta laborationsredovisningarna, b¨or du speciellt f¨olja anvisningarna i avsnittet
“Skript”.
1Ifall den version av programmet convert som ligger p˚a CSCs vanliga system inte skulle fungerar tillfredsst¨allande, finns det en n˚agot f¨orb¨attrad version av detta program tillg¨anglig som /misc/cvap/local/bin/convert.
Kort introduktion till Matlab
Matlab ¨ar ett system som ursprungligen utvecklades f¨or att hantera matriser med en kompakt notation. I och med att man kan representera bilder som matriser, kan Matlab i detta avseende anv¨andas f¨or bildoperationer.
Matlab ¨ar dock mest l¨ampat f¨or bildoperationer som enkelt kan uttryckas i matrisform.
Som ni kanske kommer att m¨arka, har detta p˚averkat utformningen av laborationerna i denna kurs.
Inbyggd dokumentation
Matlabs inbyggda hj¨alpfunktionalitet fungerar i stort sett p˚a f¨oljande s¨att: Om du skriver help
f˚ar du en lista p˚a ett sjuttiotal ¨amnen under vilka alla inbyggda kommandon (och en kort beskrivning av vissa begrepp) ¨ar samlade. Denna lista ¨ar hierarkiskt organiserad. Om du skriver
help¨amne
d¨ar ¨amne ¨ar n˚agon av rubrikerna i den ¨oversiktliga listan, f˚ar du en lista p˚a kommandon asso- cierade till detta ¨amne. Slutligen skriver man
help kommando
f¨or specifik information om ett visst kommando. N˚agra av de kommandon/¨amnen som kommer att vara mest relevanta i denna kurs ¨ar arith, axis, clear, close, colon, color, colormap, diary, figure, for, function, help, if, image, input, keyboard, linspace, load, ones, paren, pause, plot, print, punct, relop, save, script, showgrey, size, slash, title, while, och zeros. Prova!
Lagring p˚ a fil
Variabler i Matlab kan sparas p˚a filer med kommandot save filnamn x y z
vilket leder till att en bin¨ar represention av variablerna x, y och z skrivs till filen filename.mat.
Dessa kan sedan l¨asas in till en annan Matlab-session genom load filnamn
Notera att tidigare variabler med samma namn skrivs ¨over (utan f¨oreg˚aende varning). F¨or att se vilka variabler som ¨ar definierade, anger man
who
Storleksinformation om alla definierade variabler erh˚alles via whos
Visning p˚ a sk¨ arm
Bilder visas p˚a sk¨armen via Matlabs inbyggda kommando image eller det mer anv¨andarv¨anliga gr¨anssnittet showgrey (f¨or svartvita bilder). De bilder som visas p˚a sk¨armen, liksom histogram och annan grafisk utmatning, visas i speciella grafikf¨onster. Det f¨orsta grafikf¨onstret skapas s˚a fort det beh¨ovs. Ytterligare f¨onster f¨or att samtidigt visa flera bilder kan ¨oppnas genom
figure
All grafisk utmatning visas i det aktuella f¨onstret. Detta ¨ar normalt sett det senast ¨oppnade f¨onstret, eller det f¨onster som senast aktiverats, t.ex. genom att du lyft fram det i f¨orgrunden.
Om du vill att ett visst f¨onster, s¨ag det med nummer id , skall bli det aktuella skriver du figure(id )
Kommandot close
tar bort det aktuella f¨onstret medan close(id )
tar bort f¨onstret med nummer id . Med kommandot subplot kan du montera flera illustrationer i samma figur, se
help subplot Med kommandot
title(sprintf(’Titel: (arg1, arg2) = (%d, %f)’, intarg, floatval))
kan du ge en illustrativ titel p˚a din figur inkluderande parameterv¨arden som anv¨ants f¨or att generera denna.
Utskrift p˚ a papper
Det som visas i ett grafikf¨onster kan skrivas ut p˚a en laserskrivare med namn skrivarnamn medelst
print -Pskrivarnamn
Du kan ocks˚a spara grafik i PostScriptformat p˚a en fil med filnamn genom print -deps filnamn
Innan man skriver ut en bild kan man vilja komplettera med en rubrik samt ta bort eller l¨agga till koordinataxlar. Kommandot
title textstr¨ang
tilldelar den aktuella figuren rubriken textstr¨ang . Koordinataxlar i aktuell figur utritas med axis on
samt tas bort med axis off
Loggbok
I vissa l¨agen kan det vara ¨onskv¨art att spara b˚ade inmatningen och utmatningen fr˚an en Matlab-session i en loggbok. Detta g¨ors genom att skriva
diary filnamn
vilket f˚ar Matlab att kopiera all inmatning och utmatning (synlig p˚a sk¨armen) till filen filnamn.
N¨ar v¨al en loggbok har ¨oppnats, kan du st¨anga av och ˚aterstarta utmatningen till denna medelst diary off och diary on.
Skript
Ett Matlab-skript ¨ar en fil best˚aende av en serie Matlab-kommandon. En skriptfil m˚aste ha ett namn av formen skriptnamn.m. N¨ar du skriver
skriptnamn
i Matlab-intepretatorn (eller i ett annat skript eller funktion) exekveras serien av kommandon i skriptfilen p˚a samma s¨att som om du skulle ha skrivit dessa kommandon direkt i Matlabs kom- mandointerpretator (efter prompten). Detta inneb¨ar att skriptet kan p˚averka (och ofta avsiktligt p˚averkar) variablerna i Matlabs arbetsutrymme.
F¨or att snabba upp redovisningsproceduren b¨or du skapa skript s˚a att de viktigaste stegen i laborationen l¨att kan reproduceras. I detta sammanhang kan du notera att exekveringen av skriptet b¨or avbrytas i strategiska l¨agen f¨or att till˚ata n¨armare inspektion av mellanresultat.
Detta kan du g¨ora med anrop av keyboard, pause och input. (I m˚anga l¨agen ¨ar det f¨orsta att f¨oredra, eftersom det ger tillg˚ang till Matlabs arbetsutrymme vid l¨aget f¨or avbrottet.)
Ett i m˚anga l¨agen praktiskt s¨att att skapa skriptfiler ¨ar genom att f¨orst unders¨oka meto- diken i den interaktiva interpretatorn med loggboken p˚aslagen, editera loggboken efter det att utmatningen till denna st¨angts av (anv¨and den editor du f¨oredrar, tex emacs) samt successivt uppdatera scriptet tills det kan k¨oras i sin helhet. (F¨or att undvika interferens med vissa globala variabler kan du beh¨ova ˚aterst¨alla dessa medelst clear variabelnamn f¨ore varje testk¨orning,)
Funktioner
Matlabs funktioner ser i m˚anga avseenden ut som skript. Skillnaden ¨ar att de
• anv¨ander lokala variabler,
• till˚ater anropsargument,
• returnerar (ett eller flera) utdata
En funktion med namn funktionsnamn m˚aste lagras i en fil med namn funktionsnamn.m. Vidare m˚aste funktionen deklareras i f¨orsta raden i denna fil.
En funktion som tar tv˚a argument som indata och returnerar ett argument som utdata har en funktionsdeklaration av formen
funktion utdata = funktionsnamn(indata1, indata2)
medan deklarationen av en funktion som returnera tre argument som utdata utan att anv¨anda n˚agot argument som indata skrivs
funktion [utdata1, utdata2, utdata3] = funktionsnamn()
I funktionsfilen behandlas argumenten som vanliga Matlab-variabler. Resultatet returneras genom att tilldela ett v¨arde till utdataargumentet (se nedan).
S¨ okv¨ agar
F¨or att Matlab skall kunna finna en viss fil, s˚asom en fil med sparade Matlab-variabler, ett Matlab-skript eller en Matlab-funktion, m˚aste denna fil finnas antingen p˚a Matlabs aktuella arbetsmapp eller ing˚a i Matlabs lista av s¨okv¨agar.
Du kan unders¨oka vilken som ¨ar Matlabs aktuella arbetsmapp med kommandot pwd samt st¨alla om denna med cd. Du kan ocks˚a inifr˚an Matlab se vilken som ¨ar systemets aktuella s¨okv¨ag samt st¨alla om denna med kommandot path. (Om du beh¨over hj¨alp, anv¨and help-funktionen.) Om du bygger ett eget bibliotek med Matlab-funktioner och Matlab-skript, kan du vilja inkludera mapparna med dessa bland Matlabs s¨okv¨agar. P˚a CSCs UNIX-datorer kan du g¨ora detta genom att uppdatera $MATLABPATH i din .login-fil eller genom att skapa en egen modulfil (se /info/bildath06/module/bildath06 f¨or ett exempel p˚a hur man skapar modulfiler).
Kommandoradseditor
Matlab har en enkel kommandoradseditor som g¨or att du kan editera din tidigare inmatning ist¨allet f¨or att skriva om varje kommandorad fr˚an b¨orjan. Bl.a. finns f¨oljande (emacs-liknande) kommandon
<ctrl>-P upp˚at till f¨oreg˚aende kommandorad
<ctrl>-N ned˚at till n¨asta kommandorad
<ctrl>-B en position bak˚at
<ctrl>-F en position fram˚at
<ctrl>-A till radens b¨orjan
<ctrl>-E till radens slut
<ctrl>-D radera aktuell position
<ctrl>-K radera till radens slut
H¨ar betyder <ctrl>-P att du trycker p˚a kontrolltangenten samtidigt som du skriver bokstaven
“p”. P˚ag˚aende ber¨akningar och utskrifter kan i allm¨anhet avbrytas med <ctrl>-C.
Om du vill hitta en speciell kommandorad, s¨ag den d¨ar du tilldelade variabel thisvar ett v¨arde genom att skriva ett l¨angre uttryck, kan du finna denna rad p˚a ett snabbare s¨att genom att f¨orst skriva in thisvar p˚a kommandoraden och d¨arefter anv¨anda <ctrl>-P upprepade g˚anger. D˚a genoml¨oper kommandoradseditorn endast de kommandorader som inleds med denna teckenkombination.
Undertryckande av utskrifter
Om ett kommando (vanligtvis en rad) avslutas med ett semikolon “;”, s˚a undertrycks utskriften av resultatet. Detta ¨ar praktiskt n¨odv¨andigt d˚a man hanterar stora bilder, vilka annars kommmer att fylla din sk¨arm och ta en avsev¨ard tid att skriva ut. Utan ¨overdrift ¨ar detta n¨odv¨andigt ocks˚a i skript och funktioner.
Kommentarer
Om en inmatningsrad (t.ex. i ett script eller en funktion) inleds med ett procenttecken % ignoreras resten av informationen p˚a denna rad, Bl.a. baseras Matlabs inbyggda help-funktion p˚a s˚adana kommentarrader. Kommandot
help matlabfil
d¨ar matlabfil.m ¨ar en skript- eller funktionsfil skriver ut den f¨orsta obrutna sekvensen av kom- mentarrader i denna fil. Du kan d¨armed anv¨anda help-funktionen ¨aven f¨or dina egna funktioner och skript. Kom dock bara ih˚ag att f¨orsta raden i en funktionsfil m˚aste inneh˚alla funktionsde- klarationen (se ovan).
L˚ anga kommandon och definitioner — multipla rader
Om ett kommando eller en definition str¨acker sig ¨over mer flera rader m˚aste du avsluta varje rad med tre punkter “...” f¨or att tala om att kommandot forts¨atter p˚a n¨asta rad. Om du missar detta, kan du f˚a sv˚artolkade felutskrifter.
Syntax och ber¨ akningseffektivitet
Notationen i Matlabs ¨ar fr¨amst avpassad f¨or att hantera matriser och vektorer med en kompakt notation. Det finns ett flertal speciella konstruktioner f¨or att undvika explicita loopar. Eftersom Matlab ¨ar ett interpreterande system, skall du d¨arf¨or anv¨anda dessa konstruktioner i st¨orsta m¨ojliga m˚an. N˚agra exempel:
• Aritmetiska talf¨oljder genereras med ett kolon : eller linspace, exempelvis x = (1 : 2 : 97)
x = linspace(1, 97, 48)
• Kolon kan ocks˚a anv¨andas f¨or att extrahera deluttryck ur vektorer och matriser x(1 : 5 : 16)
• konstanta matriser genereras l¨att med zeros och ones 17 * ones(3, 4)
• Matrismultiplikation skrivs med * och elementvis multiplikation med .*
ones(2 : 3) * ones(3 : 4)
• Matriser och vektorer s¨atts samman med fyrkantiga parenteser [ ]. Blanktecken separerar element inom en rad och kan (men m˚aste inte) f¨oreg˚as av kommatecken. Semikolon ; fungerar som separator mellan rader, medan transponering sker med en apostrof ’. Som exempel, kan matriser (och syntetiska bilder) skapas med operationer av dessa slag:
y = [[ones(1, 2), zeros(1, 2); linspace(1, 2, 4); 1 2 3, 4]’ ...
17*linspace(3, 81, 4)’ * [0.1 0.2]]
Som du ser g˚ar det, liksom i C, att v¨alja notation som kan vara mer eller mindre l¨asbar f¨or den mindre vane anv¨andaren. D¨arf¨or, v¨alj en programmeringsstil som ¨ar l¨attl¨ast!
Om du n˚agon g˚ang m˚aste skriva en explicit loop, kan du undvika att din rutin blir on¨odigt l˚angsam genom att (d¨ar s˚a ¨ar m¨ojligt) allokera det minne som beh¨ovs utanf¨or loopen. J¨amf¨or exempelvis f¨oljande tv˚a konstruktioner
clear x;
for n = 1:10000 x(n) = n*n;
end
for n = 1:10000 x(n) = n*n;
end
I detta fall kommer den f¨orsta loopen att kr¨ava betydligt mer CPU-tid ¨an den senare, eftersom vektorn x reallokeras i varje iteration i den f¨orsta loopen, medan den redan har tillr¨acklig l¨angd n¨ar den andra loopen g˚as genom.
Ingen av ovanst˚ande l¨osningar ¨ar naturligtvis bra. Det s¨att som denna typ av tilldelning b¨or genomf¨oras p˚a i Matlab ¨ar via den inbyggda funktionaliteten:
tmp = (1 : 1 : 10000);
x = tmp .* tmp;
Koordinatsystem
I bildbearbetningssammanhang anv¨ands flera konventioner f¨or koordinatsystem. P˚a f¨orel¨asningarna, liksom i boken av Sonka, anv¨ands ett Cartesiskt koordinatsystem med horisontell h¨ogerriktad x-axel och upp˚atriktad vertikal y-axel. Koordinatsystemet som anv¨ands i den kompletterande boken av Gonzalez och Woods samt i Matlab ¨ar dock roterat 90 grader medsols i f¨orh˚allande till detta, d.v.s. den f¨orsta koordinataxeln ¨ar ned˚atriktad och och den andra koordinataxeln ¨ar horisontellt riktad ˚at h¨oger.
Hur matriser definieras och accessas i Matlab framg˚ar av nedanst˚aende exempel. Det- ta exempel visar ocks˚a hur det ascii-baserade bildformatet ¨ar definierat som en funktion som returnerar en bildmatris som utdata
function pixels = matlabcoordimage()
% Test image with imax = 3, jmax = 4 and pixel values
% pixels(i, j) = 10*i + j
% where i and j are Matlab indeces as they
% are used for accessing matrix elements pixels = [11 12 13 14; ...
21 22 23 24; ...
31 32 33 34];
F¨or att skapa en motsvarande bild i matlab s˚a att v¨ardena ist¨allet avspeglar bildpositionerna i Cartesiska koordinater skriver man:
function pixels = cartesiancoordimage()
% Test image with xmax = 4, ymax = 3 and pixel values
% f(x, y) = 10*x + y
% where x and y are Cartesian coordinates
% as they appear on the screen pixels = [13 23 33 43; ...
12 22 32 42; ...
11 21 31 41];
Notera de goda f¨oruts¨attningarna f¨or sammanblandningar. I och med att man i vissa program- meringsmilj¨oer accessar vektorer med b¨orjan p˚a index noll, medan andra b¨orjar p˚a indexv¨arde ett (Matlab anv¨ander det senare), finns det ytterligare en frihetsgrad. Om du drabbas av problem, stanna upp och t¨ank till!
Minnesanv¨ andning
Bildinformation kr¨aver stora m¨angder datorminne, b˚ade vid extern lagring p˚a skivminne och i datorns interna arbetsminne. N¨ar du avlusar algoritmer, underl¨attas arbetet ofta v¨asentligt om du anv¨ander sm˚a testbilder.
Undvik i g¨orligaste m˚an att lagra st¨orre bilder p˚a din anv¨andararea i form av sparade Matlab-variabler, PostScript-bilder eller liknande. Grafer och bilder som kan regenereras med rimlig effektivitet “sparas” effektivast i termer av de Matlab-script som ursprungligen genererade dem.
Om du definierar m˚anga bilder i Matlab kommer din Matlab-process att anv¨anda en stor m¨angd internminne. Du kan frig¨ora minnet allokerat av en variabel x genom att skriva clear x. Om x ¨ar din senast definierade variabel, s˚a kommer storleken av din Matlab-process att minska omedelbart.