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:
Extragerea frontierelor
Reducerea numărului de culori
Reducerea zgomotului
Combinarea frontierelor și a imaginii cu culori reduse
În imaginea de mai joi puteți observa un exemplu de input și output:
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:
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.
Adăugați toți pixelii din imagine originală (RGB) într-o listă.
Alegeți la câte culori vreți să reduceți paleta de culori din imagine (de exemplu n = 16).
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ă).
Sortați pixelii din imagine după culoarea selectată la pasul anterior.
Împărțiți lista sortată în 2 intervale egale.
Pentru fiecare interval calculați valoarea medie.
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.
Î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)
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 Explorer → Clean 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.