|
Projekt 2
- Bildidentifiering (image recognition)
Gör ett grafiskt Java-program (t.ex. en JFrame) som
upprätthåller en databas över bilder. En användare
skall kunna ladda in en bild i programmet som sedan
jämförs med bilderna i
databasen. Idén är att programmet skall klara av att hitta
likheter mellan bilden som laddats in av användaren och de bilder
som finns i databasen och visa vilken bild som är mest lik.
BEDÖMNING
Bedömningen av projektet görs
på basen hur avancerad algoritm du använt för att hitta
likheter i bilder och hur effektivt ditt program är
parallelliserat. Ditt projekt bedöms i stora drag enligt hur du
löst följande "problem":
Problem 1 (basen): 8 poäng
Skapa ett grafiskt Java-program som:
- tillåter användaren att ladda in en
"sample bild" från en fil (bilden visas i programfönstret).
Ladda in bilden t.ex. i ett objekt av BufferedImage
- klarar av att hitta m.h.a. en
bildidentifieringsalgoritm en exakt likadan bild som "sample bilden" ur
en databas bestående av minst 10 bilder (kan vara en katalog
innhållande bildfiler) samt visa den hittade bilden med filnamn i
programfönstret (intill "sample bilden")
- bildidentifieringsalgoritmen som
jämför "sample bilden" med en bild ur databasen går
igenom bilderna pixel för pixel och jämför likheter
- bildidentifieringsalgoritmen är
parallelliserad i två delar (klarar av att exekveras parallellt
på två processerkärnor) 4 poäng!
Problem
2:
+4
poäng (välj
antingen problem 2 eller 3, går ej att få poäng
för båda)
Vidareutveckla bildidentifieringsalgoritmen så att den klarar av
att på basen av en "sample bild" hitta ett en bild ur databasen
som innehåller samma grafikobjekt som finns på "sample
bilden". Sample-bilden är alltså mindre än motsvarande
bild i databasen och kan t.ex. vare ett ansikte som är klippt ur
ett större foto bestående av en grupp av mänskor.
Problem
3:
+6
poäng (välj antingen problem 2 eller 3, går ej
att få poäng för båda)
Vidareutveckla bildidentifieringsalgoritmen så att den klarar av
att hitta likheter mellan "sample bilden" och bilderna i databasen. Den
bild i databasen som är mest lik "sample bilden" visas sedan i
programfönstret. I detta fall skall alltså
bildidentifieringsalgoritmen klara av att hitta en bild ur databasen
även om "sample bilden" inte är exakt lika. T.ex. om
databasen
innhåller en bild av en boll skall skall den kunna kopplas ihop
med en "sample bild" som inte innehåller en exakt lika stor boll.
Bilderna får i detta fall bestå av svarta objekt på
vitt botten. Bildidentifieringsalgoritmen skall även klara av att
hitta rätt bild ur databasen även om grafikobjektet i "sample
bilden" inte är placerat på sama ställe som objektet
på motsvarande bild i databasen (t.ex. om "sample bilden"
innehåller en boll uppe i vänstra hörnet och
databasbilden innehåller en boll nere i högra hörnet).
Det gäller alltså då att få algoritmen att
identifiera var grafikobjektet finns i "sample bilden" och i
databasbilden och sedan jämföra dessa grafikobjekt med
varandra.
Problem 4: +4 poäng
Vidareutveckla parallelliseringen av av bildidentifieringsalgoritmen
så att algoritmen körs parallellt på N
processorkärnor. Parallelliseringen skall m.a.o. vara dyanamisk.
Problem
5:
+4
poäng
Vidareutveckla parallelliseringen så att alla "hotspots"
(flaskhalsar) i programmet parallelliseras (inte enbart
bildidentifieringsalgoritmen). En "hotspot" i programmet förutom
identifieringsalgoritmen är inladdningen av bilder från
databasen (hårdskivan) till minnet (speciellt om databasen
innehåller många bilder). Undersök hur du optimerar
filhämtningen och bildidentifieringsalgoritmen på bästa
sätt genom att parallellisera. Är det t.ex. möjligt att
läsa in följande bild samtidigt som den parallelliserade
bildidentifieringsalgoritmen analyserar föregående bild
för att undvika att filhämtningen och identifieringen skall
behöva vänta på varandra? Dokumentera din lösning noggrant.
OBS! Ett program som
saknar parallellisering ger maximalt 8 poäng!
Ladda upp alla källkodsfiler
(hela Netbeans projektet) och en dokumentation
för din lösning på
BLS senast 26.12.2010
|
|
|
|
|