• No results found

Dator- och laborationsmiljö

N/A
N/A
Protected

Academic year: 2022

Share "Dator- och laborationsmiljö"

Copied!
11
0
0

Loading.... (view fulltext now)

Full text

(1)

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!

(2)

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.

(3)

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.

(4)

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 du

load 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 skriva

phone = 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.

(5)

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 du

rawpic = 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, skriv

clear

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.

(6)

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

(7)

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,)

(8)

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.

(9)

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

(10)

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!

(11)

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.

References

Related documents

[r]

Organisationen kan ocks˚ a anv¨ anda sig av en kombination av flera recept d¨ ar de plockar olika delar fr˚ an flera olika recept och anv¨ ander dessa samtidigt.. Den sista id´ en

Denna utsl¨appta v¨atgas skulle kunna anv¨andas till att driva br¨anslecellsbilar, vilket eventuellt skulle kunna minska utsl¨appen fr˚ an transportindustrin utan att n˚ agon

Resonemang, inf¨ orda beteck- ningar och utr¨ akningar f˚ ar inte vara s˚ a knapph¨ andigt presenterade att de blir sv˚ ara att f¨ olja.. ¨ Aven endast delvis l¨ osta problem kan

Om alla bildformat jämförs ger resultaten upphov till att JPEG har högre eller lägre värde, beroende på mätningsverktyg, i de första testerna och utgör inte stora

Our staff member Jessica, who works with the digital repository Mountain Scholar, finished digitizing and adding the Tuberculosis and Consumption Materials from the [ … ].

Vi har sett hur man tar fram flera av dessa egenskaper enbart genom att anv¨ anda (ii), vilket var vad vi anv¨ ande f¨ or att definiera logaritmen tidigare.. Fr˚ an detta ser vi att

Denna studie kommer enbart fokusera på co-branding för homogena industrier, alltså företag inom modebranschen, där nya produkter och kollektioner tas fram mellan