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


Jonny Karlsson 2010