Igenkänning av handskrivna siffror med hjälp av basbilder
|
|
- Ulla-Britt Andersson
- för 9 år sedan
- Visningar:
Transkript
1 Igenkänning av handskrivna siffror med hjälp av basbilder Klas Josephson F-00 Magnus Bjernstad F-00 Handledare: Jacob Sternby Sammanfattning I den här artikeln visar vi ett exempel på en Matlabimplementation av identifiering av handskrivna siffror genom att utnyttja basbilder skapade från ett inlärningsmaterial. Dessutom visas en algoritm för identifiering av hur rader löper i en sida med okända tecken. 1 Nyckelord OCR, handskrivna siffror, basbilder, raddetektion 2 Introduktion Vid många tillfällen är det intressant att kunna tolka handskrivna tecken och överföra dessa på textform, till exempel vid inmatning av text och siffror i handdatorer. Det finns flera metoder för att konstruera ett program som utför denna uppgift. Vi har använt oss av basbilder och jämför sedan de okända objekten med dessa för att avgöra vilken siffra som tecknet ska identifieras som. 3 Metod Segmentering av siffror Inledningsvis trösklas inbilden så att en binär bild erhålls. Ströpixlar tas bort med hjälp av att morfologiskt öppna bilden med ett 2 2-pixlars strukturelement. För att koppla samman siffror som består av mer än ett sammanhängande område dilateras därefter bilden med ett kvadratiskt strukturelement med åtta pixlars bredd. Nästa delproblem består i att från en bild med siffror identifiera sammanhängande områden som vardera innehåller en siffra. Genom att söka linjärt pixel för pixel i bilden hittas en punkt där en siffra finns. Utgåe från denna punkten lokaliseras alla andra punkter i en 8-sammanhängande väg. För att inte behöva arbeta vidare med den morfologiskt modifierade bilden maskas motsvarande pixlar ut från originalbilden. För att förenkla sökningen efter nästa siffra raderas den utsegmenterade siffran från originalbilden. På så sätt kan nästa siffra också hittas genom linjär sökning. Homogenisering av siffror Att göra de olika utsegmenterade siffrorna så lika som möjligt torde bidra till ett bättre resultat. Särskilt med avsee på basbildsmetoden finns det vissa fördelar med att göra bilderna invarianta under lutning i originalbilden. Två ettor som skrivits med olika lutning rätas därför upp. Detta kan uppnås genom att låta nedre vänstra hörnet av siffran motsvara origo. För att avgöra hur mycket siffran ska roteras identifieras masscentrum varpå bilden translateras så att masscentrum hamnar i origo. Därefter bildas matrisen A med två kolonner och med lika många rader som antal pixlar som är icke-noll. Varje rad innehåller koordinaterna till motsvarande pixel. Egenvektorerna till A T A ger då två huvudriktningar för bilden med tillhörande egenvektorer. Bilden vrids så mycket att egenvektorn som hör till det största egenvärdet blir vertikal. För att de segmenterade siffrorna ska kunna jämföras krävs att de är lika stora. Varje inbild skalas till pixlar oberoe om inbilden inte har dessa proportioner. Resultat av olika skalningsmetoder ses i figur 1. Om denna skalning inte utförs innan bilden roteras så riskeras att en felaktig huvudriktning för platta bilder identifieras Figur 1: Skillnaden mellan skalning då proportionerna bibehålls (vänstra halvan) och då proportionerna inte bibehålls (högra halvan).
2 Generering av basbilder De m stycken bilderna varifrån basbilder ska genereras läses in i en matris x 11 x x m1 A x 12 x x m2 =......, x 1n x 2n... x mn där varje kolumn är en radstaplad bild med n pixlar. För att kunna generera relevanta basbilder måste alla inbilder viktas lika, dvs. varje kolonn i A ska normeras enligt A i = A i A i. 1 Kovariansmatrisen C = AA T beskriver variationen mellan de enskilda pixlarna i bilderna. Egenbilderna är egentligen egenvektorer till denna kovariansmatris. Denna är dock av storlek n n vilket för stora inbilder är alltför tungt att beräkna numeriskt. Istället beräknas egenvektorerna till L = A T A som ast är av storlek m m - i de flesta fall ett numeriskt betydligt enklare problem. Låt V vara en matris med egenvektorerna till matrisen L i dess kolonner. Då kan m stycken egenvektorer u i till kovariansmatrisen C, hörande till de m största egenvärdena, beräknas som en linjärkombination av de radstaplade bilderna i A. Detta låter sig lätt göras med en matrismultiplikation U = AV, där kolonnerna i U är egenvektorerna u i. Efter en normering fås de sökta basbilderna. De mest intressanta basbilderna är de med störst tillhörande egenvärde. Med hjälp av ast ett fåtal av dessa kan bilderna i A approximativt återskapas med gott resultat. Huvudsyftet med utnyttjandet av basbilder är att oidentifierade siffror kan approximeras med dessa basbilder. Figur 2 visar fyra basbilder för tvåor. Där syns det att de sista bilderna är betydligt brusigare än de första. Figur 2: Basbild nummer ett, två, 99 och 100 för tvåor. Identifikation av okända siffror När väl basbilderna är konstruerade är det enkelt att avgöra vilken siffra en viss bild innehåller. Skalärprodukterna mellan en okänd bild och alla basbilderna för en viss siffra beräknas. Normen av dessa koordinater blir då ett mått på hur lik bilden är denna siffra. Raddetektion För att kunna använda sifferigenkänningen krävs en presentation av identifikationen som tar hänsyn till siffrornas inbördes placering. Detta innebär i praktiken att en rimlig raddetektion måste utföras. Figur 3 visar principen för en sådan algoritm. Steg ett Figur 3: Princip för raddetektion. är att genom linjär sökning hitta en pixel i den högst belägna siffran på första raden. Detta motsvaras att den mittersta siffran i figuren. Utgåe från denna siffra söks sedan inledningsvis åt vänster i dess förlängning till dess att nästa pixel påträffas. Proceduren upprepas fram till vänsterkanten på bilden. Samma sak utförs åt höger utgåe från startsiffran. När en siffra är behandlad raderas den från urbilden så att den inte påträffas igen. 4 Experiment Implementation av ett program som identifikation av handskrivna siffror var den praktiska delen av vårt projekt. Programmet är skrivet i Matlab förutom en beräkningstung funktion skriven i C. Programkoden är bifogad i appix A. Användning av programmet Programmet kan använda sig av olika användare för att kunna identifiera siffror skrivna av en viss person med särskilda särdrag i sin handstil. För att kunna använda programmet måste inledningsvis basbilder genereras från ett inlärningsmaterial. Dessa inlärningsbilder innehåller vardera ast en typ av siffra och ska vara i PNG-format med namn enligt formen img0001.png, img0002.png,.... Bilder med en typ av siffror placeras under motsvarande underkatalog till respektive användare (se figur 4). För att skapa basbilder från inlärningsbilderna till en viss användare körs kommandot setupuser(user), där user är en sträng med användarnamnet. Basbilderna som skapas läggs i filerna baseimages/user/baseimages0.dat, baseimages/user/baseimages1.dat,....
3 --sourceimages/ --user1/ --0/ : --9/ --user2/ --0/ : --9/ --segmentedimages/ --user1/ --user2/ : --baseimages/ --user1/ --user2/ : Figur 4: Katalogstruktur för programmet. Att identifiera okända siffror görs med kommandot identifyimage(image, user, plot ). image anger en sökväg till en bildfil med siffror. Siffrorna måste vara mörka och bakgrunden ljus. Anges det frivilliga argumentet plot visas identifikationen grafiskt i realtid. Med programmet bifogas kompilerade versioner av getcontiguous.c för Sun (getcontiguous.mexol) och för Windows (getcontiguous.dll). Om programmet ska köras på en annan plattform behöver getcontiguous.c kompileras med Matlabkommandot mex getcontiguous.c. Testresultat I våra testar har vi använt tre olika användare; Magnus, Klas och Both. Basbilderna till användaren Both är genererade från både Magnus och Klas siffror. Tabell 1 och tabell 2 visar hur stor procentandel rätt som fås vid identifiering av cirka 200 siffror av varje slag. Resultaten visar att det är en framkomlig väg att identifiera siffrorna med hjälp av basbilder. Vid identifikation av användarens egna siffror erhölls en träffsäkerhet på nästan 100%. Noteras bör att denna träffsäkerhet knappt sjunker när basbilder som skapats från bådas siffror används. Intressant vore att undersöka hur dessa resultat förändras med fler samtidiga användare. Att identifiera siffror med basbilder skapade från en annan persons siffror ger överlag mycket dåligt resultat. Detta är väntat eftersom det inte krävs särskilt stor förändring av en handstil för att basbildernas mest signifikanta delar ska förskjutas till områden med tidigare mycket låg signifikans. Raddetektionen ger i allmänhet korrekta resultat. Även kraftigt lutande rader hanteras väl. I vissa extremfall kan ordningen på raderna kastas om. Magnus Klas Both Totalt Tabell 1: Procentandel rätt vid test på Magnus siffror med basbilder genererade med de tre användarna Magnus, Klas och Both, där Both använder bådas inlärningsbilder. Klas Magnus Both Totalt Tabell 2: Procentandel rätt vid test på Klas siffror med basbilder genererade med de tre användarna Klas, Magnus och Both, där Both använder bådas inlärningsbilder. Möjliga förbättringar Önskvärt vore att ha en metod för att avgöra om ett tecken inte är en siffra. Det a vi använder oss av för att urskilja felaktiga tecken är en storlekskontroll för att hindra alltför små områden att tolkas som siffror. En möjligt förbättring vad gäller klassificeringen är att utveckla en mer sofistikerad metod för att analysera de koordinater som får efter skalärprodukt mellan den okända bilden och basbilderna. I nuläget avgörs vilken siffra det är av normen av koordinaterna. En utveckling av detta är att även ta hänsyn till hur koordinaterna varierar mellan de olika möjliga siffrorna. Vidare skulle man kunna göra noggrannare undersökningar på siffror som ofta ger resultat nära varandra, främst fyror och nior. Detta skulle kunna ske genom att man även tittar på specifika särdrag för siffror. Ett sådant exempel är att studera hur många hål en siffra har. Där skulle fyror i normalfallet ge noll hål, nior ge ett hål och åttor ge två hål. Om man skulle använda sig av flera metoder är en
4 idé att vikta dessa vid klassificeringen så att metoder som är bra på att till exempel skilja mellan två specifika siffror ast har signifikans i detta fall. Sammanfattning Vi har i denna rapport gett ett exempel på hur en implementation av identifiering av handskrivna siffror kan se ut. Våra resultat visar på goda resultat när basbildsmetoden används. Bra resultat erhålls även när antalet personer som basbilderna bygger på utökas till två. Hur detta utvecklas med ännu fler personer är något som skulle vara intressant att undersöka. Speciellt hur bra det då skulle fungera på en person som inte varit med och genererat basbilderna.
5 A m-filer setupuser function utbild = setupuser(user) % Segmentera alla bilder som ligger i katalogen % sourceimages/{user/[0:9] samt skapa basbilder % från dessa. t = cputime; for number=0:9 % Segmentera ut siffrorna savesegmentedimages(user, number); % Spara motsvarande basbilder savebaseimages(user, number); disp(sprintf( Total tid: %.2f s, cputime-t)); savesegmentedimages function savesegmentedimages(user, number) % Segmentera ut siffrorna som finns i bilderna som ligger i % katalogen sourceimages/{user/{number/. Bilderna sparas i filen % segmentedimages/{user/segmentedimages{number.dat % Sätt filnamn imagename = sprintf( sourceimages/%s/%d/img0001.png, user, number); imagenumber = 1; % Öppna fil för lagring av segmenterade bilder fid = fopen(sprintf( segmentedimages/%s/segmentedimages%d.dat,... user, number), w ); % Skriv storleken på varje segmenterad bild fwrite(fid, [30, 20], ubit8 ); fclose(fid); fid = fopen(sprintf( segmentedimages/%s/segmentedimages%d.dat,... user, number), a ); % Går igenom alla bilder som tillhör user while (exist(imagename)) originalimage = imread(imagename); % Tröskla originalimage = originalimage < 200; % Ta bort små skräp samt dilatera ihop siffror currentimage = imopen(originalimage, ones(2)); currentimage = imdilate(currentimage, ones(8)); % Koordinater för var nästa bild att extrahera finns imageposition = findfirst(currentimage, [1 1]); % Extrahera denna bilden och uppdatera ursprungsbilden [founddigitimage, currentimage] =... getimage(currentimage, imageposition, originalimage); % Gå igenom alla siffror i nuvarande bild while imageposition ~= -1 % Spara aktuell bild till fil om bilden är tillräckligt stor if (founddigitimage ~= -1)
6 fwrite(fid, founddigitimage(:), ubit1 ); % Hitta första icke-nollpositionen i bilden imageposition = findfirst(currentimage, imageposition); % Segmentera ny siffra om det finns någon if (isempty(imageposition) == 0) [founddigitimage, currentimage] =... getimage(currentimage, imageposition, originalimage); % Sätt namn på nästa fil imagenumber = imagenumber + 1; imagename =... sprintf( sourceimages/%s/%d/img%0.4d.png, user, number, imagenumber); % Stäng filen för lagring av segmenterade siffror fclose(fid); disp(sprintf( Segmenteringen för %d:orna klara, number)); function updatedposition = findfirst(inpic, currentposition) % Hittar index [row, col] för första elementet i inpic % vars värde är icke-noll. Returnerar en tom matris om % alla element är noll. [nrows ncols] = size(inpic); for i = currentposition(1):nrows for j = 1:nCols if (inpic(i,j) ~= 0) updatedposition = [i j]; return; updatedposition = []; savebaseimages function savebaseimages(user, number) % Skapa basbilder för siffra number till de segmenterade % siffrorna som tillhör user. % Läs in bilderna som basbilderna ska baseras på. Varje bild lagras % som en (radstaplad) kolonnvektor i matrisen A. fid = fopen(sprintf( segmentedimages/%s/segmentedimages%d.dat,... user, number), r ); % Konrollera om bilder finns if fid == -1 disp( Inga segmenterade siffror finns ) return imagesize = fread(fid, 2, ubit8 ); A = fread(fid, [prod(imagesize), inf], ubit1 ); fclose(fid); % Normera kolonnerna i A i 1-normen A = A./ repmat(sum(a), size(a, 1), 1);
7 % Att hitta egenvektorer till kovariansmatrise C=A*A är får svårt % -> studera istället egenvektorer till A *A (som bara är av % storlek npictures*npictures). L = A *A; [V, eigvalues] = eig(l); % Gör egenvärdena till en vektor istället för en matris eigvalues = diag(eigvalues); % Egenvektorerna U till C kan nu bildas som en linjärkombination av % bilderna i kolonnerna hos A U = A*V; % Sortera egenvektorerna efter storleken på motsvarande egenvärde [sortedeig eigorder] = sort(eigvalues); eigorder = flipud(eigorder); U=U(:,eigOrder); % Normera egenvektorerna U = U./ repmat(sqrt(sum(u.^2)), size(u, 1), 1); % Spara basbilderna. % Basbilderna sparas i en fil där de första två talen anger % storleken på varje bild. fid = fopen(sprintf( baseimages/%s/baseimages%d.dat, user, number),... w, ieee-be ); % Skriv storleken på varje basbild fwrite(fid, imagesize, ubit8 ); % Skriv basbilderna och stäng filen fwrite(fid, U(:), float32 ); fclose(fid); getimage function [digit, updatedimage, digitrect] = getimage(inpic, startpos, originalpic) % Hittar sammanhängande bild i inpic med början i startpos. % Bilden lagras i digit och den funna siffran raderas i % ursprungsbilden och den nya, uppdaterade bilden sparas i % updatedimage. digit blir -1 om en för liten bild hittats. % Extrahera pixlar i ett 8-sammanhängande område kring startpos. % updatedimage är en bild med detta område satt till noll. % digit är en {antal pixlarx2-vektor som innehåller koordinater % för pixlarna som utgör siffran. [updatedimage, digit] = getcontiguous(inpic, startpos(1), startpos(2)); % Konvertera listan över ingåe pixlar till en sparse-matris digit = sparse(double(digit(:,1)), double(digit(:,2)), 1); % Plocka ut motsvarande pixlar ur originalbilden [row,col]=find(digit); orgdigit=originalpic(min(row):max(row), min(col):max(col)); dilatdigit=digit(min(row):max(row), min(col):max(col)); digit = full(orgdigit & dilatdigit); % Spara koordinatinformation om den funna bilden digitrect = [min(row) max(row) min(col) max(col)]; % Skala om bilden till 30x20 om den är tillräckligt stor
8 if (max(size(digit)) > 20) digit = resizedigitimage(digit); else digit = -1; return % Rotera bilden så att egenriktningen pekar rakt uppåt digit = rotateimagealongeigendirection(digit); % Ändra storlek igen till 30x20 pixlar digit = resizedigitimage(digit); function outpic = resizedigitimage(inpic) % Skala om inpic så att den täcker 30x20 pixlar. Ta inte hänsyn % till bildförhållandet. outpicsize = [30 20]; [row col] = find(inpic); digitrect = [min(row) max(row) min(col) max(col)]; inpic = inpic(digitrect(1):digitrect(2), digitrect(3):digitrect(4)); outpic = imresize(inpic, outpicsize, nearest ); function outpic = rotateimagealongeigendirection(inpic) % Rotera bilden inpic så att huvudriktningen går vertikalt. % Skifta origo till masscentrum av bilden [nrows ncols] = size(inpic); [ARows ACols] = find(inpic); centerom = centerofmass(inpic); ARows = ARows - centerom(1); ACols = ACols - centerom(2); A = [ARows ACols]; % Beräkna egenvektorerna och egenvärdena. Plocka ut egenvektorn % hörande till det största egenvärdet. [eigvec eigvalue] = eig(a *A); [maxeigenvalue maxindex] = max(diag(eigvalue)); eigvec = eigvec(:,maxindex); % Räkna ut vilken vinkel bilden ska vridas if (abs(eigvec(1)) < eps) theta = pi/2; else theta = atan(eigvec(2)/eigvec(1)); % Rotera bilden outpic = imrotate(inpic, -rad2deg(theta)); function centerofmass = centerofmass(inpic) [M, N] = size(inpic); weightx = sum(inpic, 1);
9 weighty = sum(inpic, 2); meanx = weightx *(1:N) /sum(weightx); meany = weighty *(1:M) /sum(weighty); centerofmass = [meany meanx]; getcontiguous #include <stdio.h> #include "mex.h" #include "matrix.h" struct list { int row; int col; struct list *next; struct list *prev; ; typedef struct list item; mxarray *getcontiguous(mxlogical *image, int nrows, int ncols, int startrow, int startcol) { /* Variabeldeklarationer */ item *pixel, *pixelhead; item *tocheck, *tocheckhead, *tochecktail; int currrow, currcol; int i,j, npixels; mxarray *pixels; int pixelsdim[2]; int *data; /* Initiera den nuvarande positionen till startpositionen */ currrow = startrow; currcol = startcol; npixels = 0; pixelhead = NULL; tocheck = (item *)mxcalloc(1, sizeof(item)); tocheck->row = startrow; tocheck->col = startcol; tocheck->next = NULL; tocheck->prev = NULL; tocheckhead = tocheck; tochecktail = tocheck; while(tochecktail) { /* Utgå från första pixeln i listan över pixlar att gå igenom */ currrow = tochecktail->row; currcol = tochecktail->col; /* Stega igenom alla grannar till den nuvarande positionen */ for (i = currcol-1; i <= currcol+1; i++) { for (j = currrow-1; j <= currrow+1; j++) { /* Om vi hittat en vit granne till currentpos... */ if (j>=0 && j < nrows && i >= 0 && i < ncols && image[nrows*i + j] == 1) { /*...gör den svart,... */ image[nrows*i + j] = 0;
10 /*...spara pixelpositionen för den vita pixeln... */ pixel = (item *)mxcalloc(1, sizeof(item)); pixel->row = j; pixel->col = i; pixel->next = pixelhead; pixel->prev = NULL; pixelhead = pixel; npixels++; /*...samt spara den nya pixeln som kand. för ytterligare utvidgning. */ tocheck = (item *)mxcalloc(1, sizeof(item)); tocheck->row = j; tocheck->col = i; tocheck->next = NULL; tocheck->prev = tocheckhead; tocheckhead->next = tocheck; tocheckhead = tocheck; /* Ta bort den precis kontrollerade pixeln från kandidater till ytterligare utvidgning */ tochecktail = tochecktail->next; pixelsdim[0] = npixels; pixelsdim[1] = 2; pixels = mxcreatenumericarray(2, pixelsdim, mxint32_class, mxreal); data = mxcalloc(npixels*2, sizeof(int)); i = 0; pixel = pixelhead; while (pixel) { data[i] = pixel->row + 1; data[npixels + i] = pixel->col + 1; pixel = pixel->next; i++; mxsetdata(pixels, data); return pixels; void mexfunction(int nlhs, mxarray *plhs[], int nrhs, const mxarray *prhs[]) { unsigned int *pixellist; mxlogical *image; mxlogical *updatedimage; int i,n; double *startrow, *startcol; image = mxgetlogicals(prhs[0]); startrow = mxgetpr(prhs[1]); startcol = mxgetpr(prhs[2]);
11 /* Skapa en array som innehåller en uppdaterad bild med den utsegmenterade delen raderad */ plhs[0] = mxcreatenumericarray(mxgetnumberofdimensions(prhs[0]), mxgetdimensions(prhs[0]), mxlogical_class, mxreal); updatedimage = mxgetdata(plhs[0]); /* Konvertera alla element i inbilden till heltal */ n = mxgetnumberofelements(prhs[0]); for (i=0; i < n; i++) { updatedimage[i] = (bool) image[i]; plhs[1] = (mxarray *) getcontiguous(updatedimage, mxgetm(prhs[0]), mxgetn(prhs[0]), (int)*startrow, (int)*startcol); identifyimage function result = identifyimage(file, user, doplot) % Identifierar siffror i bilden file med basbilder som tillhör % användaren user. Om doplot sätts till plot fås en bild där % identifikationen överlagras på bilden file. % Sätt doplot till false ifall den ej initieras vid anrop if (nargin < 3) doplot = false; % Kontrollera att användaren finns if (exist(sprintf( baseimages/%s/baseimages0.dat, user)) == false) disp( Användaren finns inte ); return; % Intitiera nödvändiga variabler result = ; digitrect = [ ]; % Kotrollera om filen existerar if (exist(file) == false) disp( Filen ej funnen ) return; % Läser in bild originalimage = imread(file);
12 % Konvertera till gråskala if (size(originalimage, 3) == 3) originalimage = rgb2gray(originalimage); % Tröskla, öppna, dilatera originalimage = originalimage < 200; currentimage = imopen(originalimage, ones(2)); currentimage = imdilate(currentimage, ones(8)); % Plotta bilden om det är valt if (doplot == plot ) close; imshow(not(originalimage)); pause(0.1); hold on; % Koordinater för var nästa bild att extrahera börjar imageposition = findfirst(currentimage); % Stega igenom inbilden tills inga fler rader påträffas while (imageposition ~= -1) % Initiera raden med identifierade siffror identifiedrow = []; % Stega åt vänster direction = -1; % Gå igenom en rad i ursprungsbilden while (imageposition ~= -1) % Extrahera siffran [founddigitimage, currentimage, newdigitrect] =... getimage(currentimage, imageposition, originalimage); % Behandla bara bilder som är tillräckligt stora if (founddigitimage ~= -1) digitrect = newdigitrect; % Spara första identifierade siffran i raden if (isempty(identifiedrow)) rowstartrect = digitrect; % Normalisera intensiteten founddigitimage = founddigitimage/sum(founddigitimage(:)); % Identifiera siffran idnumber = identifyimagebybaseimages(founddigitimage, user); % Plotta identifikationen om det valts if (doplot == plot ) text(imageposition(2),imageposition(1),num2str(idnumber),... color, k, backgroundcolor, c ); pause(0.0001) % Uppdatera raden med identifierade siffror
13 if (direction == -1) identifiedrow = [idnumber identifiedrow]; else identifiedrow = [identifiedrow idnumber]; % Leta upp nästa siffra i raden imageposition = findnextinrow(currentimage, digitrect, direction); % Om det inte finns fler siffror åt vänster - ändra % sökriktning if (isequal(imageposition, -1) && direction == -1 &&... isequal(founddigitimage,-1) == false) direction = 1; imageposition = findnextinrow(currentimage, rowstartrect, direction); % Spara den identifierade raden (om den inte är tom) if (isempty(identifiedrow) == false) result = sprintf( %s%s\n, result, num2str(identifiedrow)); % Hitta nästa siffra (som nu är på en ny rad) imageposition = findfirst(currentimage); function firstindex = findfirst(inpic) % Hittar index [row, col] för första elementet i inpic % vars värde är icke-noll. Returnerar en tom matris om % alla element är noll. nrows = size(inpic,2); % Hitta första icke-noll elementet. Linjärt index. firstindex = min(find(inpic )); % Konvertera linjärt index till [row col]-format firstindex = [ceil(firstindex/nrows) mod(firstindex,nrows)]; function updatedposition = findnextinrow(inpic, digitrect, direction) % Söker i riktningen direction efter nästa pixel som är % icke-noll. Index för denna pixel lagras i updatedposition. % direction == 1 => höger % direction == -1 => vänster % Kontrollera riktning if (direction == 1) col = digitrect(4); else col = digitrect(3); % Sök efter nästa till man nått kanten på bilden while (sum(inpic(digitrect(1):digitrect(2), col)) == 0) col = col + direction;
14 % Kolla om vi gått utanför bilden if (col == 0 col > size(inpic, 2)) % Reurnera -1 då raden är slut updatedposition = -1; return % Returnera position för nästa siffra updatedposition =... [min(find(inpic(digitrect(1):digitrect(2), col))) + digitrect(1) col]; identifyimagebybaseimages function idnumber = identifyimagebybaseimages(inpic, user) % Avgör vilken siffra bilden inpic innehåller baserat på % jämförelse med basbilder tillhörande användaren user. maxnorm = 0; nusedbaseimages = 20; for number = 0:9; % Läs in basbilderna fid = fopen(sprintf( baseimages/%s/baseimages%d.dat, user, number),... r, ieee-be ); % Kontrollera om basbilder finns if fid == -1 disp( Basbilder saknas ); return baseimagesize = fread(fid, 2, ubit8 ); baseimages = fread(fid, [prod(baseimagesize), nusedbaseimages], float32 ); fclose(fid); % Radstapla currentimage = inpic(:); % Beräkna skalärprodukterna mellan currentimage och alla % basebilderna för en given siffra. coordinates = currentimage *baseimages; % Identifiera siffran som den som har störst 2-norm av % koordinaterna normcoords(number + 1) = norm(coordinates); if norm(coordinates) > maxnorm maxnorm = norm(coordinates); idnumber = number;
Ett enkelt OCR-system
P r o j e k t i B i l d a n a l y s Ett enkelt OCR-system av Anders Fredriksson F98 Fredrik Rosqvist F98 Handledare: Magnus Oskarsson Lunds Tekniska Högskola 2001-11-29 - Sida 1 - 1.Inledning Många människor
Miniprojekt: MEX och molekyldynamik
4 september 2013 Miniprojekt 1 (5) Beräkningsvetenskap DV Institutionen för informationsteknologi Beräkningsvetenskap Besöksadress: Polacksbacken, hus 2 Lägerhyddsvägen 2 Postadress: Box 337 751 05 Uppsala
Ansiktsigenkänning med MATLAB
Ansiktsigenkänning med MATLAB Avancerad bildbehandling Christoffer Dahl, Johannes Dahlgren, Semone Kallin Clarke, Michaela Ulvhammar 12/2/2012 Sammanfattning Uppgiften som gavs var att skapa ett system
Övning från förra gången: readword
(9 september 2010 T4.1 ) Övning från förra gången: readword /** readword.c * * int readword(char w[], int n) { * * Läser tecken tills en bokstav påträffas. * Läser och lagrar sedan högst n-1 bokstäver
Beräkningsvetenskap föreläsning 2
Beräkningsvetenskap föreläsning 2 19/01 2010 - Per Wahlund if-satser if x > 0 y = 2 + log(x); else y = -1 If-satsen skall alltid ha ett villkor, samt en då det som skall hända är skrivet. Mellan dessa
Laboration 4: Digitala bilder
Objektorienterad programmering, Z : Digitala bilder Syfte I denna laboration skall vi återigen behandla transformering av data, denna gång avseende digitala bilder. Syftet med laborationen är att få förståelse
TANA17 Matematiska beräkningar med Matlab
TANA17 Matematiska beräkningar med Matlab Laboration 1. Linjär Algebra och Avbildningar Namn: Personnummer: Epost: Namn: Personnummer: Epost: Godkänd den: Sign: Retur: 1 Introduktion I denna övning skall
BINÄRA TRÄD. (X = pekarvärdet NULL): struct int_bt_node *pivot, *ny; X X X 12 X X 12 X X -3 X X
Algoritmer och Datastrukturer Kary FRÄMLING/Göran PULKKIS (v23) Kap. 7, Sid 1 BINÄRA TRÄD Träd används för att representera olika slags hierarkier som ordnats på något sätt. Den mest använda trädstrukturen
Matematisk modellering fortsättningskurs Visuell variation
Matematisk modellering fortsättningskurs Visuell variation Johan Hedberg, Fredrik Svensson, Frida Hansson, Samare Jarf 12 maj 2011 1 1 Sammanfattning I denna rapport undersöker vi en modell för att beskriva
Laboration: Grunderna i MATLAB
Laboration: Grunderna i MATLAB 25 augusti 2005 Grunderna i MATLAB Vad är MATLAB? MATLAB är ett interaktivt program för vetenskapliga beräkningar. Som användare ger du enkla kommandon och MATLAB levererar
Programmeringsuppgift Game of Life
CTH/GU STUDIO TMV06a - 0/0 Matematiska vetenskaper Programmeringsuppgift Game of Life Analys och Linär Algebra, del A, K/Kf/Bt Inledning En cellulär automat är en dynamisk metod som beskriver hur komplicerade
Datorlära 6. Arbeta med strängar Inmatning med tangentbordet Bygga ett program med inmatning, funktioner, osv
Datorlära 6 Arbeta med strängar Inmatning med tangentbordet Bygga ett program med inmatning, funktioner, osv 1 Arbeta med Strängar Strängar skapas med text inom citattecken, enkla eller dubbla.!>> str=
Programmeringsteknik med C och Matlab
Programmeringsteknik med C och Matlab Kapitel 6: Filhantering Henrik Björklund Umeå universitet 13 oktober 2009 Björklund (UmU) Programmeringsteknik 13 oktober 2009 1 / 22 Textfiler Filer är sekvenser
Tentamen, Programmeringsteknik för BME, F och N
LUNDS TEKNISKA HÖGSKOLA 1(6) Institutionen för datavetenskap Tentamen, Programmeringsteknik för BME, F och N 2015 06 03, 14.00 19.00 Anvisningar: Preliminärt ger uppgifterna 7 + 11 + 16 + 11 = 45 poäng.
MATLAB the Matrix Laboratory. Introduktion till MATLAB. Martin Nilsson. Enkel användning: Variabler i MATLAB. utvecklat av MathWorks, Inc.
Introduktion till MATLAB Martin Nilsson Avdelningen för teknisk databehandling Institutionen för informationsteknologi Uppsala universitet MATLAB the Matrix Laboratory utvecklat av MathWorks, Inc. Matematisk
Vektorgeometri för gymnasister
Vektorgeometri för gymnasister Per-Anders Svensson http://homepage.lnu.se/staff/psvmsi/vektorgeometri/gymnasiet.html Fakulteten för teknik Linnéuniversitetet Diagonalisering av linjära avbildningar III
Exempel :: Spegling i godtycklig linje.
c Mikael Forsberg oktober 009 Exempel :: Spegling i godtycklig linje. abstract:: I detta dokument så är vårt uppdrag att beräkna matrisen för spegling i en godtycklig linje y = kx som går genom origo.
MATLAB. Python. Det finns flera andra program som liknar MATLAB. Sage, Octave, Maple och...
Allt du behöver veta om MATLAB: Industristandard för numeriska beräkningar och simulationer. Används som ett steg i utvecklingen (rapid prototyping) Har ett syntax Ett teleskopord för «matrix laboratory»
MMA132: Laboration 2 Matriser i MATLAB
MMA132: Laboration 2 Matriser i MATLAB Introduktion I den här labben skall vi lära oss hur man använder matriser och vektorer i MATLAB. Det är rekommerad att du ser till att ha laborationshandledningen
HI1024, Programmering, grundkurs, 8hp KTH STH TENTAMEN. HI1024:TEN2 - Praktisk tentamen Tid: Fredagen den 21 oktober 2011,
KTH STH TENTAMEN HI1024:TEN2 - Praktisk tentamen Tid: Fredagen den 21 oktober 2011, 8.15-13.15 Gamla kurskoder: HI1900, 6E2950, etc. Examinator: Johnny Panrike Rättande lärare: Nicklas Brandefelt, Johnny
Robotarm och algebra
Tekniska Högskolan i Linköping Institutionen för Datavetenskap (IDA) Torbjörn Jonsson 2010-12-07 Robotarm och algebra I denna laboration skall du lära dig lite mer om möjlighetera att rita ut mer avancerade
Matriser och linjära ekvationssystem
Linjär algebra, AT3 211/212 Matematiska vetenskaper Matriser och linjära ekvationssystem Matriser En matris är som ni redan vet ett rektangulärt talschema: a 11 a 1n A = a m1 a mn Matrisen ovan har m rader
Länkade listor kan ingå som en del av språket, dock ej i C Länkade listor är ett alternativ till:
Länkade listor i C Länkade listor kan ingå som en del av språket, dock ej i C Länkade listor är ett alternativ till: Dynamiskt allokerad array Arrayer allokerade på stacken Kan alltså användas till att
Exempel :: Spegling i godtycklig linje.
INNEHÅLL Exempel :: Spegling i godtycklig linje. c Mikael Forsberg :: 6 augusti 05 Sammanfattning:: I detta dokument så är vårt uppdrag att beräkna matrisen för spegling i en godtycklig linje y = kx som
12. SINGULÄRA VÄRDEN. (u Av) u v
. SINGULÄRA VÄRDEN Vårt huvudresultat sen tidigare är Sats.. Varje n n matris A kan jordaniseras, dvs det finns en inverterbar matris S sån att S AS J där J är en jordanmatris. Om u och v är två kolonnvektorer
Per-Emil Eliasson, Claes Fälth, Manne Gustafson, Andreas Gustafsson
ANVÄNDARHANDLEDNING FÖR MÄTNING AV ACCELERATION HOS BILBANEBIL Per-Emil Eliasson, Claes Fälth, Manne Gustafson, Andreas Gustafsson 6 juni 2003 INNEHÅLL Industriprojekt ISY Innehåll 1 Inledning 2 2 Allmänt
Laboration 0: Del 2. Benjamin Kjellson Introduktion till matriser, vektorer, och ekvationssystem
Laboration 0: Del 2 Benjamin Kjellson 2016 03 21 Introduktion till matriser, vektorer, och ekvationssystem I den här filen får ni en kort introduktion till hur man hanterar och räknar med matriser i R,
Teknisk dokumentation MCIV
Segmentering av MR-bilder med ITK 2006-05-16 Teknisk dokumentation MCIV Version 1.0 Granskad Godkänd Status Bilder och grafik projektkurs, CDIO MCIV LIPs 1 Segmentering av MR-bilder med ITK 2006-05-16
Tentamen TANA17 Matematiska beräkningar Provkod: DAT1 Godkänd: 8p av totalt 20p Tid: 14:e januari klockan
MAI/Linköpings universitet Fredrik Berntsson Tentamen TANA17 Matematiska beräkningar Provkod: DAT1 Godkänd: 8p av totalt 20p Tid: 14:e januari klockan 8.00-12.00 Redovisning Lös först uppgifterna i Matlab.
Lösningar Datastrukturer TDA
Lösningar Datastrukturer TDA416 2016 12 21 roblem 1. roblem 2. a) Falskt. Urvalssortering gör alltid samma mängd av jobb. b) Sant. Genom att ha en referens till sista och första elementet, kan man nå både
TANA17 Matematiska beräkningar med MATLAB för M, DPU. Fredrik Berntsson, Linköpings Universitet. 9 november 2015 Sida 1 / 28
TANA17 Matematiska beräkningar med MATLAB för M, DPU Fredrik Berntsson, Linköpings Universitet 9 november 2015 Sida 1 / 28 Föreläsning 3 Linjära ekvationssystem. Invers. Rotationsmatriser. Tillämpning:
Enklast att skriva variabelnamn utan ; innehåll och variabelnamn skrivs ut
F5: Filhantering in- och utmatning (kap. 2 och 8) 1 Utskrift på skärm, inläsning från tangentbord (kap. 2) Spara och hämta variabler med save och load (kap. 2) Kommandot textread Mer avancerad filhantering:
Laboration: Vektorer och matriser
Laboration: Vektorer och matriser Grundläggande om matriser Begreppet matris är en utvidgning av vektorbegreppet, och det används bl a när man löser linjära ekvationssystem. Namnet Matlab står för MATrix
6. Matriser Definition av matriser 62 6 MATRISER. En matris är ett rektangulärt schema av tal: a 11 a 12 a 13 a 1n a 21 a 22 a 23 a 2n A =
62 6 MATRISER 6 Matriser 6 Definition av matriser En matris är ett rektangulärt schema av tal: A a a 2 a 3 a n a 2 a 22 a 23 a 2n a m a m2 a m3 a mn Matrisen A säges vara av typ m n, där m är antalet rader
Laboration 1. Grafisk teknik (TNM059) Introduktion till Matlab. R. Lenz och S. Gooran (VT2007)
Laboration 1 Grafisk teknik (TNM059) Introduktion till Matlab R. Lenz och S. Gooran (VT2007) Introduktion: Denna laboration är en introduktion till Matlab. Efter denna laboration ska ni kunna följande:
Datastrukturer och Algoritmer D0041D
Luleå Tekniska Universitet 19 mars 2014 Laborationsrapport Laboration 3 Datastrukturer och Algoritmer D0041D Primms Algoritm Namn E-mail Magnus Björk magbjr-3@ltu.student.se Handledare Felix Hansson Primms
MMA132: Laboration 1 Introduktion till MATLAB
MMA132: Laboration 1 Introduktion till MATLAB De flesta numeriska metoder låter oss få en tillräckligt bra lösning på ett matematiskt problem genom att byta ut komplexa matematiska operationer med kombinationer
Laboration 3. Redovisning Uppgifterna skall vara demonstrerade och godkända av en handledare senast måndag 22/2.
Programmerade system I. Syfte Syftet med denna laboration är att få övning i att strukturera sina program genom att använda metoder och klasser, samt att få övning i att använda sig av fält och for-satsen.
Tentamen OOP 2015-03-14
Tentamen OOP 2015-03-14 Anvisningar Fråga 1 och 2 besvaras på det särskilt utdelade formuläret. Du får gärna skriva på bägge sidorna av svarsbladen, men påbörja varje uppgift på ett nytt blad. Vid inlämning
Datalogi för E Övning 3
Datalogi för E Övning 3 Mikael Huss hussm@nada.kth.se AlbaNova, Roslagstullsbacken 35 08-790 62 26 Kurshemsida: http://www.csc.kth.se/utbildning/kth/kurser/2d1343/datae06 Dagens program Att skapa egna
Introduktion till MATLAB
29 augusti 2017 Introduktion till MATLAB 1 Inledning MATLAB är ett interaktivt program för numeriska beräkningar med matriser. Med enkla kommandon kan man till exempel utföra matrismultiplikation, beräkna
Linjär algebra. 1 Inledning. 2 Matriser. Analys och Linjär Algebra, del B, K1/Kf1/Bt1. CTH/GU STUDIO 1 TMV036b /2013 Matematiska vetenskaper
CTH/GU STUDIO 1 TMV06b - 2012/201 Matematiska vetenskaper Linjär algebra Analys och Linjär Algebra, del B, K1/Kf1/Bt1 1 Inledning Vi fortsätter även denna läsperiod att arbete med Matlab i matematikkurserna
Tentamen TANA17 Matematiska beräkningar Provkod: DAT1 Godkänd: 9p av totalt 20p Hjälpmedel: MATLAB
MAI/Linköpings universitet Fredrik Berntsson Tentamen TANA17 Matematiska beräkningar Provkod: DAT1 Godkänd: 9p av totalt 20p Hjälpmedel: MATLAB Redovisning Lös först uppgifterna i Matlab. Då du har en
Skriv i mån av plats dina lösningar direkt i tentamen. Skriv ditt kodnummer längst upp på varje blad.
5(16) Tentamen på kurserna Programmeringsteknik med C och Matlab Programmering i C Tid: 2/11-11, kl. 9-13 Lärare: Jonny Pettersson Totalt: 60 poäng Betyg 3: 30 poäng Betyg 4: 39 poäng Betyg 5: 48 poäng
Textsträngar från/till skärm eller fil
Textsträngar från/till skärm eller fil Textsträngar [Kapitel 8.1] In- och utmatning till skärm [Kapitel 8.2] Rekursion Gränssnitt Felhantering In- och utmatning till fil Histogram 2010-10-25 Datorlära,
Matriser och linjära ekvationssystem
Linjär algebra, I1 2011/2012 Matematiska vetenskaper Matriser och linjära ekvationssystem Matriser En matris är som ni vet ett rektangulärt talschema: a 11 a 1n A = a m1 a mn Matrisen ovan har m rader
TDIU01 - Programmering i C++, grundkurs
TDIU01 - Programmering i C++, grundkurs Sammanfattning period 1 Eric Elfving Institutionen för datavetenskap 1 oktober 2013 Översikt Ett C++-programs uppbyggnad Variabler Datatyper Satser Uttryck Funktioner
Inlämningsuppgift : Finn. 2D1418 Språkteknologi. Christoffer Sabel E-post: csabel@kth.se 1
Inlämningsuppgift : Finn 2D1418 Språkteknologi Christoffer Sabel E-post: csabel@kth.se 1 1. Inledning...3 2. Teori...3 2.1 Termdokumentmatrisen...3 2.2 Finn...4 3. Implementation...4 3.1 Databasen...4
Medicinska Bilder, TSBB31. Lab: Mätvärden på Medicinska Bilder
Medicinska Bilder, TSBB3 Lab: Mätvärden på Medicinska Bilder Maria Magnusson, 22 Senaste updatering: september 25 Avdelningen för Datorseende, Institutionen för Systemteknik Linköpings Universitet Introduktion
SP:PROG3 HT12 Tenta 2013-01-19
DSV SU/KTH sid 1 (5) SP:PROG3 SP:PROG3 HT12 Tenta 2013-01-19 Tentan består av tre uppgifter. Max poäng är 30. För betyget E (godkänd) krävs minst 18 poäng och minst en poäng på varje uppgift. Betygskriteria
Frågorna 1 till 6 ska svaras med ett kryss för varje korrekt påstående. Varje uppgift ger 1 poäng. Använd bifogat formulär för dessa 6 frågor.
TM-Matematik Mikael Forsberg 74-4 Matematik med datalogi, mfl. Linjär algebra ma4a 6 Skrivtid: 9:-4:. Inga hjälpmedel. Lösningarna skall vara fullständiga och lätta att följa. Börja varje ny uppgift på
Föreläsning 4. Kö Implementerad med array Implementerad med länkad lista Djup kontra bredd Bredden först mha kö
Föreläsning 4 Kö Implementerad med array Implementerad med länkad lista Djup kontra bredd Bredden först mha kö Kö (ADT) En kö fungerar som en kö. Man fyller på den längst bak och tömmer den längst fram
Magnus Nielsen, IDA, Linköpings universitet
Föreläsning 7 Introduktion till sortering TDDC91,TDDE22,725G97: DALG Utskriftsversion av föreläsning i Datastrukturer och algoritmer 24 september 2018 Magnus Nielsen, IDA, Linköpings universitet 7.1 1
Algoritmer, datastrukturer och komplexitet
Algoritmer, datastrukturer och komplexitet Övning 6 Anton Grensjö grensjo@csc.kth.se 4 oktober 2017 1 Idag Algoritmkonstruktion (lite blandat) Redovisning och inlämning av labbteori 3 2 Uppgifter Uppgift
public static void mystery(int n) { if (n > 0){ mystery(n-1); System.out.print(n * 4); mystery(n-1); } }
Rekursion 25 7 Rekursion Tema: Rekursiva algoritmer. Litteratur: Avsnitt 5.1 5.5 (7.1 7.5 i gamla upplagan) samt i bilderna från föreläsning 6. U 59. Man kan definiera potensfunktionen x n (n heltal 0)
Histogram över kanter i bilder
Histogram över kanter i bilder Metod Både den svartvita kanstdetekteringen och detekteringen av färgkanter följer samma metod. Först görs en sobelfiltrering i både vertikal och horisontell led. De pixlar
MATLAB Laboration problem med lokala extremvärden
MATLAB Laboration problem med lokala extremvärden Sonja Hiltunen, sohnya@gmail.com Sanna Eskelinen, eskelinen.sanna@gmail.com Handledare: Karim Daho Flervariabelanalys 5B1148 Innehållsförteckning Problem
Transformationer i R 2 och R 3
Linjär algebra, I / Matematiska vetenskaper Inledning Transformationer i R och R 3 Vi skall se på några geometriska transformationer; rotation, skalning, translation och projektion. Rotation och skalning
KPP053, HT2016 MATLAB, Föreläsning 2. Vektorer Matriser Plotta i 2D Teckensträngar
KPP053, HT2016 MATLAB, Föreläsning 2 Vektorer Matriser Plotta i 2D Teckensträngar Vektorer För att skapa vektorn x = [ 0 1 1 2 3 5]: >> x = [0 1 1 2 3 5] x = 0 1 1 2 3 5 För att ändra (eller lägga till)
Övervakningssystem. -skillnader i bilder. Uppsala Universitet Signaler och System ht Lärare: Mathias Johansson
Uppsala Universitet Signaler och System ht 02 2002-12-07 Övervakningssystem -skillnader i bilder Lärare: Mathias Johansson Gruppen: Jakob Brundin Gustav Björcke Henrik Nilsson 1 Sammanfattning Syftet med
BMI = (vikt i kg) / (längd i m) 2. Lösningsförslag
HI1024 TEN2 2013-10-28 Betygsgränser: Fx-8, E-9, D-11, C-12, B-14, A-16 (MAX-18) Generella rättningsnormer: Mycket dåliga variabelnamn ger -1p totalt på provet vid andra tillfället Inga eller dåliga kommentarer
Projekt i bildanalys Trafikövervakning
Projekt i danalys Trafikövervakning F 99 F 00 Handledare : Håkan Ardö Hösten 3 vid Lunds Tekniska Högskola Abstract Using traffic surveillance cameras the authorities can get information about the traffic
Datorlära 3 Octave Workspace ovh mijlö Skriva text på skärmen Värdesiffror Variabler och typer Strängar Makro Vektorer
Datorlära 1 Introduktion till datasystemet, epost konto, afs hemkonto Introduktion till datorer och datasalar Open Office Calculator Beräkningar med Open Office Calc Diagram med OO Calc Datorlära 2 Utforma
Matematisk Modellering
Matematisk Modellering Föreläsning 1 Anders Heyden Matematikcentrum Lunds Universitet Matematisk Modellering p.1/37 Denna föreläsning (läsvecka 1) Vad handlar kursen om, mål, kurskrav, ide. Matematisk
Programmering, grundkurs, 8.0 hp HI1024, HI1900 etc., Tentamen TEN1. Måndagen den 10 januari 2011,
Programmering, grundkurs, 8.0 hp HI1024, HI1900 etc., Tentamen TEN1 Måndagen den 10 januari 2011, 8.15 12.15 Tentamen består av två delar, del A och del B. Del A innehåller 10 kryssfrågor på olika teman
Värmedistribution i plåt
Sid 1 (6) Värmedistribution i plåt Introduktion Om vi med konstant temperatur värmer kanterna på en jämntjock plåt så kommer värmen att sprida sig och temperaturen i plåten så småningom stabilisera sig.
Lösningar till tentauppgifterna sätts ut på kurssidan på nätet idag kl 19. Omtentamen i Programmering C, 5p, fristående, kväll, 040110.
1(8) ÖREBRO UNIVERSITET INSTITUTIONEN FÖR TEKNIK Lösningar till tentauppgifterna sätts ut på kurssidan på nätet idag kl 19. Denna tenta kommer att vara färdigrättad On 14/1-04 och kan då hämtas på mitt
TAIU07 Matematiska beräkningar med Matlab
TAIU07 Matematiska beräkningar med Matlab Laboration 3. Linjär algebra Namn: Personnummer: Epost: Namn: Personnummer: Epost: Godkänd den: Sign: Retur: 1 Introduktion 2 En Komet Kometer rör sig enligt ellipsformade
Variabler. TANA81: Beräkningar med Matlab. Matriser. I Matlab skapas en variabel genom att man anger dess namn och ger den ett värde:
TANA81: Beräkningar med Matlab - Variabler och Matriser - Logiska uttryck och Villkor - Repetitionssatser - Grafik - Funktioner Variabler I Matlab skapas en variabel genom att man anger dess namn och ger
Tentamen i Grundläggande Programvaruutveckling, TDA548
Tentamen i Grundläggande Programvaruutveckling, Joachim von Hacht/Magnus Myreen Datum: 2016-12-20 Tid: 08.30-12.30 Hjälpmedel: Engelskt-Valfritt språk lexikon Betygsgränser: U: -23 3: 24-37 4: 38-47 5
Matriser och vektorer i Matlab
CTH/GU LABORATION 3 TMV206-2013/2014 Matematiska vetenskaper 1 Inledning Matriser och vektorer i Matlab I denna laboration ser vi på hantering och uppbyggnad av matriser samt operationer på matriser En
Syftet med den här laborationen är att du skall bli mer förtrogen med följande viktiga områden inom matematisk statistik
LUNDS TEKNISKA HÖGSKOLA MATEMATIKCENTRUM MATEMATISK STATISTIK DATORLABORATION 4 MATEMATISK STATISTIK, AK FÖR I, FMS 01, HT-07 Laboration 4: Stora talens lag, Centrala gränsvärdessatsen, enkla punktskattningar
Algoritmer, datastrukturer och komplexitet
Algoritmer, datastrukturer och komplexitet Övning 6 Anton Grensjö grensjo@csc.kth.se 9 oktober 2015 Anton Grensjö ADK Övning 6 9 oktober 2015 1 / 23 Översikt Kursplanering Ö5: Grafalgoritmer och undre
Medicinska Bilder, TSBB31. Lab3: Mätvärden på Medicinska Bilder
Medicinska Bilder, TSBB3 Lab3: Mätvärden på Medicinska Bilder Maria Magnusson, Avdelningen för Datorseende Institutionen för Systemteknik Linköpings Universitet Introduktion I denna laboration ska vi göra
Enkla datatyper minne
Enkla datatyper minne 143.56 sant Sonja A falskt 18 1999-10-29 Bertil Gralvik, KTH Ingenjörsskolan 1 Addera två tal Algoritmen Summera tal Mata in två tal Beräkna Skriv ut resultat Mata in tal 1 Mata in
Uppgift 1 (grundläggande konstruktioner)
Uppgift 1 (grundläggande konstruktioner) a) Skriv ett program som låter användaren mata in 7 heltal och som gör utskrifter enligt nedanstående körexempel. Mata in 7 heltal: 1 0 0 3 1 1 1 Tal nr 2 var en
Dagens program. Programmeringsteknik och Matlab. Administrativt. Viktiga datum. Kort introduktion till matlab. Övningsgrupp 2 (Sal Q22/E32)
Programmeringsteknik och Matlab Övning Dagens program Övningsgrupp 2 (Sal Q22/E2) Johannes Hjorth hjorth@nada.kth.se Rum 458 på plan 5 i D-huset 08-790 69 02 Kurshemsida: http://www.nada.kth.se/kurser/kth/2d2
Tentamen TEN1 HI1029 2014-05-22
Tentamen TEN1 HI1029 2014-05-22 Skrivtid: 8.15-13.00 Hjälpmedel: Referensblad (utdelas), papper (tomma), penna Logga in med tentamenskontot ni får av skrivvakten. Det kommer att ta tid att logga in ha
Tentamen, EDAA10 Programmering i Java
LUNDS TEKNISKA HÖGSKOLA 1(6) Institutionen för datavetenskap Tentamen, EDAA10 Programmering i Java 2017 04 20, 14.00 19.00 Anvisningar: Preliminärt ger uppgifterna 4 + 6 + 13 + 7 + 15 = 45 poäng. För godkänt
Matematisk Modellering
Matematisk Modellering Föreläsning 1 Magnus Oskarsson Matematikcentrum Lunds Universitet Matematisk Modellering p.1/34 Denna föreläsning (läsvecka 1) Vad handlar kursen om, mål, kurskrav, ide. Matematisk
Programmera i C Varför programmera i C när det finns språk som Simula och Pascal??
Programmera i C Varför programmera i C när det finns språk som Simula och Pascal?? C är ett språk på relativt låg nivå vilket gör det möjligt att konstruera effektiva kompilatorer, samt att komma nära
String [] argv. Dagens Agenda. Mer om arrayer. Mer om arrayer forts. String [] argv. argv är variabelnamnet. Arrayer och Strängar fortsättning
Dagens Agenda String [] argv String [] argv Arrayer och Strängar fortsättning Booleska operatorer if, for, while satser Introduktion till algoritmer public static void main(string [] argv) argv är variabelnamnet
Numeriska Metoder och Grundläggande Programmering för P1, VT2014
Numeriska Metoder och Grundläggande Programmering för P1, VT2014 Föreläsning 5: Filhantering i Matlab Mer om datatyper: celltabeller, gles lagring (Kap. 7 & 8 i MATLAB Programming for Engineers, S. Chapman)
Instruktion för laboration 1
STOCKHOLMS UNIVERSITET MATEMATISKA INSTITUTIONEN Avd. för matematisk statistik MD, ANL, TB (rev. JM, OE) SANNOLIKHETSTEORI I Instruktion för laboration 1 De skriftliga laborationsrapporterna skall vara
Geometriska transformationer
CTH/GU LABORATION 5 TMV6/MMGD - 7/8 Matematiska vetenskaper Inledning Geometriska transformationer Vi skall se på några geometriska transformationer; rotation, skalning, translation, spegling och projektion.
Innehåll. Föreläsning 12. Binärt sökträd. Binära sökträd. Flervägs sökträd. Balanserade binära sökträd. Sökträd Sökning. Sökning och Sökträd
Innehåll Föreläsning 12 Sökträd Sökning Sökning och Sökträd 383 384 Binärt sökträd Används för sökning i linjära samlingar av dataobjekt, specifikt för att konstruera tabeller och lexikon. Organisation:
TMV206: Linjär algebra
Matematiska vetenskaper Lösningsförslag till tentamen Chalmers tekniska högskola 2018-06-07, 14:00 18:00 TMV206: Linjär algera Uppgift 1 Linjerna skär varandra om det finns någon punkt (x,y, z) som uppfyller
Labb i Datorsystemteknik och programvaruteknik Programmering av kalkylator i Visual Basic
Labb i Datorsystemteknik och programvaruteknik Programmering av kalkylator i Visual Basic Inledning Starta Microsoft Visual Studio 2005. Välj create Project Välj VB + Vindows Application och välj ett nytt
Föreläsning 3-4 Innehåll. Diskutera. Metod. Programexempel med metod
Föreläsning 3-4 Innehåll Diskutera Vad gör programmet programmet? Föreslå vilka satser vi kan bryta ut till en egen metod. Skriva egna metoder Logiska uttryck Algoritm för att beräkna min och max Vektorer
Laboration 3. I1 Programmerade system, HT15
Programmerade system I. Syfte Syftet med denna laboration är att få övning i att strukturera sina program genom att använda metoder och klasser, samt att få övning i att använda sig av fält och for-satsen.
Lösningar till uppgifterna sätts ut på kurssidan och på WebCT (Gamla Tentor) i dag kl 19. Tentamen i Programmering C, 5p, Distans, övriga, 051119
1(8) ÖREBRO UNIVERSITET INSTITUTIONEN FÖR TEKNIK Lösningar till uppgifterna sätts ut på kurssidan och på WebCT (Gamla Tentor) i dag kl 19. Denna tenta kommer att vara färdigrättad On 23/11 och kan då hämtas
Exempelsamling Assemblerprogrammering
Exempelsamling Assemblerprogrammering I uppgifterna nedan utgå från följande programskelett: #include.data var1:.word 12 var2:.word 19 sum: prod:.float 0.set noreorder.text.globl start.ent start
DIAGNOSTISKT PROV. Tid. Hjälpmedel. Antaganden. Rättning. Övrigt. Diagnostiskt Prov. Klockan Inga
203-03-9 203-03-9 DIAGNOSTISKT PROV Tid Klockan 09.00-2.00 Hjälpmedel Inga Antaganden Om förutsättningar saknas I en uppgift skall rimliga antaganden göras och nedtecknas. Rättning Tentamen omfattar 6
Linjära ekvationssystem
CTH/GU STUDIO 1 LMA515c - 2016/2017 Matematiska vetenskaper 1 Inledning Linjära ekvationssystem Denna studioövning börjar med att vi påminner oss om matriser i Matlab samtidigt som vi börjar se på matriser
Lösningar till uppgifterna sätts ut på kurssidan på nätet i dag kl 13.00. Omtentamen i Programmering C, Fri, Kväll, 050108.
1(8) ÖREBRO UNIVERSITET INSTITUTIONEN FÖR TEKNIK Lösningar till uppgifterna sätts ut på kurssidan på nätet i dag kl 13.00. Denna tenta kommer att vara färdigrättad Fr 14/1 och kan då hämtas på mitt tjänsterum,
Digitalitet. Kontinuerlig. Direkt proportionerlig mot källan. Ex. sprittermometer. Elektrisk signal som representerar ljud.
Analog Digitalitet Kontinuerlig Direkt proportionerlig mot källan Ex. sprittermometer Elektrisk signal som representerar ljud Diskret Digital Representation som siffror/symboler Ex. CD-skiva Varje siffra
TANA17 Matematiska beräkningar med Matlab
TANA17 Matematiska beräkningar med Matlab Datorlektion 2. Linjär Algebra, Villkor och Logik 1 Linjär Algebra Programsystemet Matlab utvecklades ursprungligen för att underlätta beräkningar från linjär
Objektorienterad programmering E. Algoritmer. Telefonboken, påminnelse (och litet tillägg), 1. Telefonboken, påminnelse (och litet tillägg), 2
Objektorienterad programmering E Algoritmer Linjär sökning Binär sökning Tidsuppskattningar Föreläsning 9 Vad behöver en programmerare kunna? (Minst) ett programspråk; dess syntax och semantik, bibliotek
Bildmosaik. Bilddatabaser, TNM025. Anna Flisberg Linne a Mellblom. linme882. Linko pings Universitet
Bildmosaik Bilddatabaser, TNM025 Linko pings Universitet Anna Flisberg Linne a Mellblom annfl042 linme882 28 maj 2015 Innehåll 1 Introduktion 2 2 Metod 2 2.1 Features..............................................
Programmering i C++ En manual för kursen Datavetenskaplig introduktionskurs 5p
Programmering i C++ En manual för kursen Datavetenskaplig introduktionskurs 5p Skriven av Michael Andersson Introduktion Programmering I högnivåspråk fokuserar på själv problemet (algoritmen) istället