Tema 2 - Photo to Cartoon

  • Responsabili: Anca Băluțoiu, Andrei Lăpușteanu
  • Lansare: 19 decembrie 2022
  • Termen de predare: 15 ianuarie 2023, ora 23:55
  • Notă: Orice informație ce nu a fost acoperită în acest document este la latitudinea voastră!

În cadrul acestei teme va trebui să implementați o aplicație prin care să convertiți o poză din lumea reală într-un desen animat. Algoritmul pe care îl veți folosi va folosi următorii pași:

  1. Extragerea frontierelor
  2. Reducerea numărului de culori
  3. Reducerea zgomotului
  4. Combinarea frontierelor și a imaginii cu culori reduse

În imaginea de mai joi puteți observa un exemplu de input și output:

Extragerea frontierelor

Frontierele din imaginea inițială vor fi folosite pentru a nuanța și pentru a scoate în evidență obiectele din imaginea “desen”. Pentru a obține frontierele, veți aplica detectorul Canny. Ați învățat la curs pașii pentru implementarea detectorului:

  • Netezirea imaginii: Grayscale + Blur
  • Detectorul Sobel
  • Non-maxima suppression
  • Hysteresis thresholding

Reducerea numărului de culori

O diferență majoră dintre un desen și o poză reală este numărul de culori distincte din imagine. Un desen are mult mai puține culori diferite decât o poză reală. Pentru a putea reduce numărul de culori dintr-o imagine, puteți folosi algoritmul median cut. Acesta presupune sortarea tuturor pixelilor din imaginea inițială și împărțirea lor pe intervale.

  1. Adăugați toți pixelii din imagine originală (RGB) într-o listă.
  2. Alegeți la câte culori vreți să reduceți paleta de culori din imagine (de exemplu n = 16).
  3. Din cele trei canale de culoare, alegeți culoarea cuprinsă în cel mai mare interval (diferența între pixelul cu cea mai mare valoare pe canalul respectiv și pixelul cu cea mai mică valoare este maximă).
  4. Sortați pixelii din imagine după culoarea selectată la pasul anterior.
  5. Împărțiți lista sortată în 2 intervale egale.
  6. Pentru fiecare interval calculați valoarea medie.
  7. Repetați pașii 3 - 6 pe intervalele nou obținute până ați obținut n (numărul de culori la care dorim să ajungem) intervale.
  8. Înlocuiți culorile din imaginea inițială cu noile culori calculate.

Reducerea zgomotului

Rezultatul pasului anterior este destul de zgomotos. Pentru a elimina zgomotul, puteți aplica filtrul median.

Obținerea imaginii finale

Pentru a obține imaginea finală, mai aveți un pas de făcut: combinarea frontierelor calculate anterior cu imaginea obținută prin reducerea culorilor (dorim să se vadă în final imaginea cu mai puține intervale de culoare peste care adăugăm frontierele imaginii inițiale).

Notare (100p)

  • Extragerea frontierelor (40p)
    • Grayscale (5p)
    • Blur (5p)
    • Detectorul Sobel (10p)
    • Non-maxima supression (10p)
    • Hysteresis thresholding (10p)
  • Reducerea numărului de culori (40p)
  • Filtrul median (10p)
  • Combinarea a două imagini (10p)

Bonusuri posibile

Orice îmbunătățire pe care o puteți aduce temei poate fi considerată bonus. Exemple de îmbunătățiri:

  • Utilizarea algoritmului K-Means pentru a reduce numărul de culori
  • Pentru a obține rezultate mai bune vizual, utilizarea filtrării bilaterale în locul median cut
  • Implementarea unor filtre adiționale care îmbunătățesc rezultatul final, potrivite temei în cauză (un posibil exemplu: filtru Kuwahara)

Indicații Suplimentare

Tema se poate implementa în orice limbaj sau framework. Dacă folosiți biblioteci ajutătoare (de exemplu OpenCV), acestea pot fi utilizate numai pentru încărcarea/afișarea imaginii sau pentru operații de citire/scriere pe pixelii imaginii. Nu se pot folosi funcții deja implementate în biblioteci pentru:

  • implementarea blur/grayscale/Sobel/Canny
  • implementarea median cut
  • implementarea filtrului median
  • combinarea a două imagini

Arhivarea proiectului

Arhiva trebuie să conțină toate resursele necesare compilării și rulării. Dacă folosiți framework-ul de la laborator, realizați următorii pași:

  • înainte de a face arhiva asigurați-vă că ați curățat proiectul Visual Studio:
    • click dreapta pe proiect în Solution ExplorerClean Solution
    • și ștergeți folderul /build/.vs (dacă nu îl vedeți, este posibil să fie ascuns)
  • SAU ștergeți complet folderul /build
  • în cazul în care arhiva tot depășește limita de 50MB (nu ar trebui), puteți să ștergeți și folderul /deps sau /assets întrucât se pot adăuga la testare. Nu este recomandat sa faceți acest lucru întrucât îngreunează mult testarea în cazul în care versiunea curentă a bibliotecilor/resurselor diferă de versiunea utilizată la momentul scrierii temei.

spg/teme/2022/02.txt · Last modified: 2023/01/09 10:12 by maria_anca.balutoiu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0