2008-10-24

Vecka 43

18 veckor har gått och 2 är kvar nu! Tiden går faktiskt snabbt ibland, som under de sista veckorna av ett större projekt.. utöver att beskriva några kvarvarande koncept teoretiskt i rapporten (Morfologi och snakes, för att vara exakt) har jag under veckan också testat hur pass bra hudklassificeringen givet färgmodellen egentligen är. Den här gången tränade jag först hudmodellen under bra ljusförhållanden, sen tog jag några statiska bilder med handgester och segmenterade manuellt (vilket var snabbare än det låter tack vare roipoly i Matlab) ut händerna:
Bakgrunden var sedan helt enkelt den inversa masken (efter en liten dilation för att slippa eventuella missade handpixlar):
Det enda som återstod var nu att faktiskt klassificera alla pixlar i bilden vid olika tröskelvärden för Mahalanobisavstånd som räknades som hud. Resultatet kan plottas i en ROC-kurva där andelen korrekta positiva klassificeringar (hudpixlar som identifieras mot hud) plottas mot andelen falska positiva (bakgrundspixlar som klassificeras som hud):
För alla klassificerare är det en avviktning mellan hur många falska positiva man är villig att leva med, men säkerheten är bättre ju närmare det övre vänstra hörnet linjen går. I detta fallet är den något vilseledande, eftersom jag nämnt tidigare räcker färg i regel inte till för någon säker klassificering. Jag upprepade samma försök med bilden som nedanstående mask segmenterades från:
Bakgrund:
Samt ROC-kurva, som visar aningen andra resultat den här gången:
Linjen lyckas till och med dyka under den streckade diagonalen som svarar mot ren chans vid ett tillfälle, vilket är ganska imponerande. Anledningen till de vitt spridda resultaten var att
formen på handen och därmed det registrerade färgvärdet och utseendet var helt annorlunda än den första bilden, som kraftigt liknade de bildrutor som färgmodellen tränats på.

Jag implementerade också Hotelling-transformen (aka PCA) under veckan, men det är fortfarande något som krånglar. Det jag har hittils är en metod som givet en binär mask bildar en positions- och avståndsoberoende representation, vilket förenklat beskrivit ger resultatet att föremålet roteras längst sin huvudaxel, trycks ihop så att den minsta rektangel som innesluter föremålet blir en kvadrat och skalas om till en bestämd storlek. Så långt är allt väl, men tanken är också att representationen ska vara rotationsinvariant, vilket inte är läget just nu (i vissa vinklar förvrids istället formen). Min gissning är att min egenvektorsberäkning har ett teckenfel eller liknande någonstans som bara uppstår ibland, men förhoppningsvis kan jag fixa det.

Nästa vecka är det inte oväntat en slutspurt som gäller, i form av att försöka få PCA att fungera korrekt, extrahera klassificeringsfeatures och med passande (simpel) metod försöka klassificera några bilder. I rapporten ska jag beskriva min implementation av snakes och PCA, samt strukturera om lite saker (som vanligt).

Inga kommentarer: