Tema 2 - Eliminarea marcajelor

  • Responsabili: Cristi Lambru, 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 metodă 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 și sunt cunoscute în limba engleză sub numele de “watermark”. Un exemplu de imagine ce conține astfel de marcaje poate fi vizualizată mai jos:

Marcajul introdus pentru imaginea de mai sus este următorul:

Metoda implementată de voi primește la intrare două imagini, imaginea ce conține marcajul și cea din care trebuie eliminate aparițiile marcajului. Metoda de obținere a celei de-a doua imagini este următoarea: La poziții aleatorii în imagine, se introduce imaginea marcajului, dupa următoarea regulă la nivel de pixel:

$$ (r',g',b') = (r,g,b) + (r_m,g_m,b_m) $$

unde (r,g,b) reprezintă canalele de culoare ale unui pixel din imaginea inițială, înainte de aplicarea marcajului, iar (rm,gm,bm) reprezintă canelele de culoare ale unui pixel din imaginea ce conține marcajul.

Metoda trebuie să scoată la ieșire imaginea ce conține apariția marcajelor după eliminarea tuturor acestor apariții. Pentru imaginea de mai sus, după eliminarea marcajelor, rezultatul va trebui să fie următorul:

Pentru a verifica corectitudinea abordării, imaginea trebuie afișată într-o fereastră sau poate fi salvată pe disc sub forma unui fișier de tip .png.

Se garantează următoarele:

  • După aplicarea formulei de mai sus, niciun canal de culoare al unui pixel modificat, (r',g',b') nu depășește valoarea 255.
  • Orice pereche de două apariții ale marcajului în imagine nu se suprapun între ele.
  • Orice apariție a marcajului în imagine nu este parțială. Întotdeauna, marcajele apar în totalitate în imagine.

În rezolvarea temei sunt următoarele restricții:

  • Tema trebuie implementată în limbajul de programare C/C++, în situația în care se realizează o rezolvare ce se execută pe unitatea centrală de procesare, CPU, sau într-un limbaj specializat pentru implementarea pe procesorul grafic, precum GLSL.
  • NU este permisă utilizarea niciunei biblioteci pentru realizarea metodelor de procesare și analiză de imagini în rezolvarea temei. Se pot utiliza biblioteci pentru alte aspecte ale rezolvării, precum încărcarea și salvarea fișierelor de tip imagine.
  • NU este permisă utilizarea unui alt limbaj de programare în afara celor menționate.

Metoda recomandată

Abordarea următoare este doar o recomandare. Se poate utiliza orice altă metodă ce obține un rezultat corect și are o execuție mai mică de 15 secunde pe imaginile de test menționate mai jos.

Metoda recomandată pentru eliminarea marcajelor utilizează frontierele conținutului din cele două imagini, cea în care se află marcajul și cea care conține apariția marcajelor. Abordarea de detecție a frontierelor este descrisă mai jos și este similară cu cea implementată pe procesorul grafic în cadrul laboratorului 9:

Detecția și stocarea frontierelor într-o imagine:

  • Transformarea culorilor pixelilor din imaginea de la intrare, din modelul de culoare (r,g,b) în nuanțe de gri.
  • Calcularea rezultatului operației de convoluție pentru fiecare pixel, cu măștile de convoluție ale filtrului Sobel. Se utilizează o combinare a rezultatelor obținute pentru fiecare mască de convoluție.
  • Binarizarea rezultatului obținut pentru fiecare pixel pe baza unui prag.

Implementarea poate fi realizată pentru execuție pe unitatea centrală de procesare. Pentru această temă, nu este obligatorie realizarea unei implementări pe procesorul grafic. O astfel de abordare se consideră bonus, în situația în care timpii de execuție nu sunt mai mari de 15 secunde :) .

Aveți grijă în alegerea valorii de prag. Noi am utilizat valoarea minimă 0,9 pentru a considera că un pixel se află pe o frontieră. În acest calcul, nuanțele de gri se află în intervalul [0, 1].

Denumim formă binarizată a unei imagini, rezultatul aplicării abordării descrise mai sus. Pentru imaginile de mai sus, cea care conține aparițiile marcajului și cea în care se află marcajul, formele lor binarizate sunt următoarele:

După ce se realizează procesul descris mai sus, se caută potrivirile formei binarizate a marcajului în ferestre de aceeași rezoluție, suprapuse peste forma binarizată a imaginii care conține aparițiile marcajului. Se consideră că există o potrivire în situația în care după suprapunerea descrisă, o proporție foarte mare din celulele ce au valoarea 1 în forma binarizată a marcajului au valoarea 1 și în fereastra suprapusă. Nu se iau în considerare în procesul de potrivire celulele ce au valoarea 0 în forma binarizată a marcajului.

Aveți grijă la proporția utilizată pentru a considera că există o potrivire între forma binarizată a marcajului și fereastra suprapusă peste forma binarizată a imaginii ce conține aparițiile marcajului.

Pentru a testa corectitudinea rezolvării, puteți utiliza imaginile ce se regăsesc la adresa următoare:​ test_images.zip. În interiorul arhivei se regăsește și imaginea ce conține marcajul.

Notare (200)

Corectitudinea metodei implementate de voi va fi testată cu un set de imagini similare cu cel menționat mai sus. Acest set de imagini NU conține situații speciale. În el se vor regăsi aceleași imagini inițiale, înainte de aplicarea marcajului, din setul de mai sus, ce vor conține apariții ale aceluiași marcaj la poziții diferite de cele din imaginile de test. Acest set de test va fi publicat în această pagină, după încheierea termenului de predare a temei, în data de 15 ianuarie, ora 10:00.

Update: Setul de imagini de test poate fi accesat la adresa următoare: test_images_final.zip.

  • +200p - Corectitudinea generală a metodei
  • -50p - Execuția programului durează mai mult de 15 secunde, dar mai puțin de 1.5 minute
  • -200p - Execuția programului durează mai mult de 1.5 minute
  • -10p - Fiecare apariție a marcajului ce nu este eliminată din imaginile cu care se va verifică corectitudinea metodei

Pentru testarea timpului de execuție a programului, vă recomandăm, în situația în care utilizați mediul de dezvoltare Visual Studio, să compilați proiectul în modul “Release” și să porniți aplicația cu controlul “Start Without Debugging” (CTRL+F5).

Bonusuri posibile

  • Implementarea unei metode ce folosește mai multe fire de execuție pe unitatea centrală de execuție.
  • Implementarea unei metode ce utilizează procesorul grafic. Timpii de execuție trebuie să respecte limita de 10 secunde.
  • Utilizarea unor metode de inteligență artificială pentru eliminarea marcajelor din imagine.

Indicații suplimentare

Este indicat să folosiți framework-ul și Visual Studio.

Pentru implementarea temei, în folderul src/lab_m2 puteți crea un nou folder, de exemplu Tema2, cu fișierele Tema2.cpp și Tema2.h (pentru implementare POO, este indicat să aveți și alte fișiere). Pentru a vedea fișierele nou create în Visual Studio în Solution Explorer, apăsati click dreapta pe filtrul lab_m2 și selectați Add→New Filter. Dupa ce creați un nou filtru, de exemplu Tema1, dați click dreapta și selectați Add→Existing Item. Astfel adăugați toate fișierele din folderul nou creat. În fișierul lab_list.h trebuie adaugată și calea către header-ul temei. De exemplu: #include “lab_m2/Tema2/Tema2.h”

Arhivarea proiectului

  • În mod normal arhiva trebuie să conțină toate resursele necesare compilării și rulării
  • î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 întrucat se pot adăuga la testare. Nu este recomandat să faceți acest lucru întrucat îngreunează mult testarea în cazul în care versiunea curentă a bibliotecilor/resurselor diferă de versiunea utilizată la momentul scrierii temei.

spg/teme/2023/02.txt · Last modified: 2024/01/15 09:58 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