9.2.2 - Mosaic Thumb Resize

Denne øvelse udgør de indledende skridt til en endelig funktion, som skal kunne lave mosaikker af billeder; hver pixel i et brugerbestemt billede skal erstattes med en lille thumbnail, så fx det klassiske billede af Jack Nicholson fra The Shining kan opbygges af en masse portrætter af skuespillere; se nederst på siden.

I første omgang skal I opbygge en funktion, som kan læse et bibliotek af små billeder (thumbnails), og resize dem, så de allesammen har samme dimensioner. Derudover skal middelværdien for farven i billedet udregnes. Thumbnails og farveværdier skal derpå gemmes i en mat-file til senere brug.

Instruktioner:

  • Hent Mosaic filerne her
  • Lav et nyt bibliotek kaldet Mosaic og pak filerne ud heri. HUSK at gemme alle de dannede funktioner heri.
  • Lav en funktion og kald den resizeThumbs
    • Den skal ikke have noget output, men skal modtage to input argumenter:
      • En tekst-streng, som indeholder navnet på et bibliotek - kald den sti
      • En variabel til at indeholde den ønskede størrelse - kan den str
  • Lav en waitbar - gem et handle i en variabel ved navn wb. Giv den en relevant titel.
  • Lav en liste over jpg filer i den angivne sti
    • Hint: lav en concatenation af sti og \*.jpg
    • Fx thumbnails\actors\ac1.jpg
  • Lav en variabel, som indeholder antallet af filer - kald den num_filer
  • Lav to celle-strukturer, som skal indeholde thumbs og RGB_val - det er mest effektivt, når man bruger for løkker, at "præ-allokere" de variable, som ændrer størrelse under løkken
    • Brug kommandoen
      • cell(num_filer,1)
  • Lav en for løkke, som kører fra en til antallet af filer i num_filer
    • Indlæs det aktuelle billede (filer(i).name 
      • Brug concatenation til at klistre stien foran filnavnet
    • Skaler billedet til den ønskede størrelse:
      • res_im = uint8(imresize(im, [str str]));
    • Gem res_im i thumbs cellen, på den aktuelle position (husk hvilken variabel, som tæller positionen i for løkker)
    • Gem middelværdien for RGB værdierne i RGB_val variablen i den rigtige celle, jvnf. ovenstående, brug flg. kommando:
      • RGB_val{i} = mean(reshape(res_im, [], 3), 1);
    • Opdater waitbaren
      • Kald funktionen med to input argumenter; det første er en brøk mellem 0 og 1 (brug det aktuelle index divideret med antallet af filer), det andet er handle-navnet fra tidligere: wb
  • Afslut for løkken
  • Gem de skalerede thumbnails (thumbs) og RGB_val i en mat fil:
    • Brug en struct struktur til at gemme størrelsen (str), thumbnails (thumbs) og RGB_val
      • Syntaksen er som følger:
      • tiles.str = str;
      • tiles.thumbs = thumbs;
      • tiles.RGB_val = RGB_val;
    • Brug kommandoen save til at gemme filen
    • Første argument er filnavnet - brug stien påklistret underscore, størrelsen og .mat
      • Fx: Thumbnails\actors_20.mat
      • Hint: Størrelsen skal først konverteres til tekst med kommandoen num2str
    • Andet argument er den variabel vi skal gemme (tiles). Den skal angives som tekst, dvs. med omsluttende ''
  • Luk waitbaren via dens handle.
  • Gem funktionen - den skal bruges i en senere øvelse.
Created by Samuel Thrysøe © 2012