This is an old revision of the document!
Tema 2 - Eliminarea marcajelor
Responsabili: Cristi Lambru, Anca Morar, Robert Caragicu
Lansare: 16 decembrie 2023
Termen de predare: 14 ianuarie 2024, 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 metoda de eliminare a unor elemente grafice dintr-o imagine. Elementele ce va trebui sa fie eliminate au scopul de a marca drepturile de autor asupra unei imagini si sunt cunoscute in limba engleza sub numele de “watermark”. Un exemplu de imagine ce contine astfel de marcaje se poate vizualiza mai jos:
Un set de imagini de test se poate descarca de la adresa urmatoare: .
Metoda implementata de voi primeste doua imagini, imaginea ce contine marcajul si cea din care trebuie eliminate aparitiile marcajului. Metoda de obtinere a celei de-a doua imagini este urmatoarea: La pozitii aleatorii in imagine, se introduce imaginea marcajului, dupa urmatoarea regula la nivel de pixel:
$$
(r',g',b') = (r,g,b) + (r_m,g_m,b_m)
$$
unde (r,g,b) reprezinta canalele de culoare ale unui pixel din imaginea initiala, inainte de aplicarea marcajului, iar (rm,gm,bm) reprezinta canelele de culoare ale unui pixel din imaginea ce contine marcajul.
Se garanteaza urmatoarele:
Dupa aplicarea formulei de mai sus, niciun canal de culoare al unui pixel modificat, (r',g',b') nu depaseste valoarea 255.
Orice pereche din multimea de aparitii ale marcajului in imaginea initiala nu se saprapun intre ele.
Orice aparitie a marcajului in imagine nu este partiala. Intotdeauna, marcajele apar in totalitate in imagine.
In rezolvarea temei sunt urmatoarele restrictii:
Tema trebuie implementata in limbajul de programare C/C++, in situatia in care se realizeaza o rezolvare ce se executa pe unitatea centrala de procesare, CPU, sau intr-un limbaj specializat pentru procesarea pe GPU, precum GLSL.
NU este permisa utilizarea niciunei biblioteci pentru realizarea metodelor de procesare si analiza de imagini in rezolvarea temei. Se pot utiliza biblioteci pentru alte aspecte ale rezolvarii, precum incarcarea si salvarea fisierelor de tip imagine.
NU este permisa utilizarea unui alt limbaj de programare in afara celor mentionate.
Metoda recomandata
Abordarea urmatoare este doar o recomandare. Se poate utiliza orice alta metoda ce obtine un rezultat corect si are o executie mai mica de 10 secunde pe imaginile de test mentionate mai sus.
Metoda recomandata este sa dete utilizati frontierele din imaginea ce contine marcajul si imaginea ce contin
La desenarea conturului în cubemap, de fiecare dată se va lua în considerare vectorul de vizualizare corespunzător feței curente a cubului (de exemplu, pentru fața X pozitivă se va considera vectorul $(1,0,0)$).
Notare (250)
Desenarea contururilor (90p in total)
Verificarea dacă un vârf este orientat sau nu către observator (20p)
Determinarea muchiilor triunghiului care conțin un punct de pe contur (20p)
Modificarea vectorului de vizualizare în funcție de fața curentă a cubemap-ului (10)
Determinarea poziției punctelor de pe contur prin interpolare și emiterea primitivelor (40p)
Sistemul de particule (80p in total)
Fiecare particulă are viteză și delay diferite (15p)
Fiecare particulă urmărește traiectoria unei curbe Bezier (50p)
Curbe Bezier diferite în funcție de ID-ul particulei (15p)
Desenarea pe fețele cubemap-ului din framebuffer (80p in total)
Generarea matricilor de vizualizare din perspectiva fiecarei fete a cubemap-ului din framebuffer (20p)
Desenarea si colorarea geometriei din directia fiecarei fete a cubemap-ului din framebuffer (30p)
Desenarea diferită (a mediului înconjurător, a conturului, a mediului + sistemul de particule) la apăsarea unei taste (10p)
Salvarea imaginilor rezultate in framebuffer (10p)
Aplicarea texturii cubemap-ului din framebuffer pe oglinda (10p)
Bonusuri posibile
Indicații suplimentare
Tema va fi implementată în OpenGL și C++. Este indicat să folosiți framework-ul și Visual Studio.
Pentru implementarea temei, in folderul src/lab_m2 puteti crea un nou folder, de exemplu Tema1, cu fisierele Tema1.cpp si Tema1.h (pentru implementare POO, este indicat sa aveti si alte fisiere). Pentru a vedea fisierele nou create in Visual Studio in Solution Explorer, apasati click dreapta pe filtrul lab_m2 si selectati Add→New Filter. Dupa ce creati un nou filtru, de exemplu Tema1, dati click dreapta si selectati Add→Existing Item. Astfel adaugati toate fisierele din folderul nou creat. In fisierul lab_list.h trebuie adaugata si calea catre header-ul temei. De exemplu: #include “lab_m2/Tema1/Tema1.h”
Arhivarea proiectului
In mod normal arhiva trebuie sa contina toate resursele necesare compilarii si rularii
inainte de a face arhiva asigurati-va ca ati curatat proiectul Visual Studio:
click dreapta pe proiect in Solution Explorer → Clean Solution
si stergeti folderul /build/.vs (daca nu il vedeti, este posibil sa fie ascuns)
SAU stergeti complet folderul /build
in cazul in care arhiva tot depaseste limita de 50MB (nu ar trebui), puteti sa stergeti si folderul /deps sau /assets intrucat se pot adauga la testare. Nu este recomandat sa faceti acest lucru intrucat ingreuneaza mult testarea in cazul in care versiunea curenta a librariilor/resurselor difera de versiunea utilizata la momentul scrierii temei.