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 vor fi 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 poate fi vizualizata mai jos:

Marcajul introdus pentru imaginea de mai sus este urmatorul:

Metoda implementata de voi primeste la intrare 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.

Metoda trebuie sa scoata la iesire imaginea ce contine aparitia marcajelor dupa eliminarea tuturor acestor aparitii. Pentru a verifica corectitudinea abordarii, imaginea trebuie afisata intr-o fereastra sau poate fi salvata pe disc sub forma unui fisier de tip .png.

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 de doua aparitii ale marcajului in imagine 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 implementarea pe procesorul grafic, 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 jos.

Metoda recomandata pentru eliminarea marcajelor utilizeaza frontierele continutului din cele doua imagini, cea in care se afla marcajul si cea care contine aparitia marcajelor. Abordarea de detectie a frontierelor este descrisa mai jos si este similara cu cea implementata pe procesorul grafic in cadrul laboratorului 9:

Detectia si stocarea frontierelor intr-o imagine:

  • Transformarea culorilor pixelilor din imaginea de la intrare, din modelul de culoare (r,g,b) in nuante de gri.
  • Calcularea rezultatului operatiei de convolutie pentru fiecare pixel, cu mastile de convolutie ale filtrului Sobel. Se utilizeaza o combinare a rezultatelor obtinute pentru fiecare masca de convolutie.
  • Binarizarea rezultatului obtinut pentru fiecare pixel pe baza unui prag.

Implementarea poate fi realizata pentru executie pe unitatea centrala de procesare. Pentru aceasta tema nu este obligatorie realizarea unei implementari pe procesorul grafic. O astfel de abordare se considera bonus, in situatia in care timpii de executie nu sunt mai mari de 10 secunde :) .

Aveti grija in alegerea valorii de prag. Noi am utilizat valoarea minima 0.9 pentru a considera ca un pixel se afla pe o frontiera. In acest calcul, nuantele de gri se afla in intervalul [0,1].

Denumim forma binarizata a unei imagini, rezultatul aplicarii abordarii descrise mai sus asupra unei imagini.

Dupa ce se realizeaza procesul descris mai sus, se cauta potrivirile formei binarizate a imaginii in care se afla marcajul in ferestre de aceeasi rezolutie suprapuse peste forma binarizata a imaginii care contine aparitiile marcajului. Se considera ca exista o potrivire in situatia in care dupa suprapunerea descrisa, o proportie foarte mare din celulele ce au valoarea 1 in forma binarizata a imaginii ce contine marcajul au valoarea 1 si in fereastra suprapusa peste forma binarizata a imaginii in care se afla aparitiile lui. Nu se iau in considerare in procesul de potrivire celulele ce au valoarea 0 in forma binarizata a imaginii ce contine marcajul. In rezultatele noastre, am considerat ca exista o potrivire in situatia in care peste 90% din celule au valoarea 1 in ambele imagini binarizate. Se face aceasta verificare prin plasarea coltului stanga sus a formei binarizate pentru imaginea ce contine marcajul in fiecare celula din forma binarizata a imaginii in care sunt aparitiile marcajului.

Pentru a testa corectitudinea rezolvarii, puteti utiliza imaginile ce se regasesc la adresa urmatoare:​ test_images.zip. 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, dupa 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

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 Tema2, cu fisierele Tema2.cpp si Tema2.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/Tema2/Tema2.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 ExplorerClean 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.

spg/teme/2023/02.1702662039.txt.gz · Last modified: 2023/12/15 19:40 by andrei.lambru
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