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:
Marcajul introdus pentru imaginea de mai sus este urmatorul:
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 detectati aparitia unui marcaj pe baza frontierelor continutului din cele doua imagini, cea in care se afla marcajul si cea utilizati frontierele din imaginea ce contine marcajul si imaginea ce contin
Pentru a testa corectitudinea rezolvarii, puteti utiliza imaginile ce se regasesc la adresa urmatoare: . In interiorul arhivei se regaseste si imaginea ce contine marcajul.
Notare (200)
Corectitudinea metodei implementate de voi va fi testata cu un set de imagini similare cu cel mentionat mai sus. Acest set de imagini NU contine situatii speciale. In el se vor regasi aceleasi imagini initiale, inainte de aplicarea marcajului, din setul de mai sus, ce vor contine aparitii ale aceluiasi marcaj la pozitii diferite de cele din imaginile de test. Acest set de test va fi publicat in aceasta pagina incheierea termenului de predare a temei, in data de 15 ianuarie, ora 10:00.
+200p - Corectitudinea generala a metodei
-50p - Executia programului dureaza mai mult de 10 secunde, dar mai putin de 1 minut
-200p - Executia programului dureaza mai mult de 1 minut
-10p - Fiecare aparitie a marcajului ce nu este eliminata din imaginile cu care se va verifica corectitudinea metodei
Pentru testarea timpului de executie a programului, va recomandam, in situatia in care utilizat mediul de dezvoltare Visual Studio, sa compilati proiectul in “Release” si sa porniti aplicatia cu controlul “Start Without Debugging” (CTRL+F5).
Bonusuri posibile
Implementarea pe mai multe fire de executie.
Implementarea unei metode ce utilizeaza procesorul grafic. Timpii de executie trebuie sa respecte limita de 10 secunde.
Utilizarea unor metode de inteligenta artificiala pentru eliminarea marcajelor din imagine.
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.