Table of Contents

Proiect

Nume proiect: Generare funcții/arbori pentru evaluarea de binarizări optime

În acest moment, există o serie de instrumente ce permit trecerea de la o biblioteca fizică la una digitală. Digitalizarea documentelor constituie încă o problemă căreia i se pot aduce îmbunătățiri semnificative. În procesul de digitalizare, documentele scanate sunt preprocesate pentru a îmbunătăți calitatea textului final. Proiectul se bazează pe preprocesarea numită binarizare. Ne propunem să construim două soluții ce combină rezultate ale algoritmilor de binarizare - global și local.

Proiectul la Managementul proiectelor software se desfășoară în perioada laboratoarelor 3 - 11. Începutul laboratorului 11 este termenul limită pentru definitivat proiectul, moment în care va fi prezentat asistentului (8-12 ianuarie 2024), iar în cadrul laboratorului 7 (20-24 noiembrie 2023) va exista o raportare intermediară.

Întrebări și discuții

Pentru întrebări sau nelămuriri legate de proiect, folosiți forumul dedicat al proiectului sau canalul de MS Teams dedicat proiectului .

Scopul proiectului

Proiectul are la bază conceptul de binarizare globală și locală. Scopul proiectului este acela de a combina ieșirile unor algoritmi (praguri de binarizare - numite și threshold) într-un mod inteligent pentru a obține un rezultat mult mai bun și mai general decât oricare din aceștia în mod individual.

Arhitectura soluțiilor și tehnologiile folosite sunt la latitudinea studenților.

Descrierea proiectului

Binarizare globală

Binarizarea globală reprezintă aplicarea unui singur prag de binarizare pe întreaga imagine și transformarea pixelilor din cadrul acesteia în valori de alb (255) sau negru (0) în funcție de valoarea pragului.

Soluția primește la intrare un set de fișiere în format CSV. Fișierele conțin informații de binarizare asociate unui set de imagini. Soluția prelucrează acest set de date, combină multitudinea de praguri de binarizare asociate fiecărei imagini sub forma unui arbore care are drept frunze pragurile de binarizare utilizate, drept noduri diverse operații programatice pentru combinarea acestora (if, else, for etc.) iar drept rădăcină un prag de binarizare final rezultat în urma aplicării acestor operații.

Acest lucru poate fi văzut ca aplicarea unei funcții matematice complexe care ia la intrare multipli parametri.

Input binarizare globală

Dataset-ul se poate descărca de la următorul link: dataset global

Dataset-ul conține următoarele informații:

Pentru simplitudine în implementare, setul de date nu conține imagini, toate informațiile necesare obținerii unui output valid, precum și metrici pentru evaluarea acestora pentru a determina care este cel mai bun sunt incluse în CSV-uri.

Formula pentru F-measure (FM) este următoarea: FM = TP/(TP+0.5*(FP+FN)), metrică pentru măsurarea acurateții unei operații de binarizare (rezultatul este evaluat contra unei imagini de ground truth)

  • TP = true positives - pixeli clasificați “albi” care sunt albi în ground truth
  • FP = false positives - pixeli clasificați “albi” care sunt negri în ground truth
  • TN = true negatives - pixeli clasificați “negri” care sunt negri în ground truth
  • FN = false negatives - pixeli clasificați “negri” care sunt albi în ground truth

Exemplu binarizare globală

Mai jos se poate observa un exemplu pentru a explica mai bine conceptul de binarizare globală și cum s-a ajuns la valorile din dataset-ul asociat acestuia. În figurile 1 și 2 se pot observa o imagine cu un text, respectiv histograma asociată imaginii de tip grayscale, cu valori în intervalul [0, 255].

Fig 1. Imaginea originală

Fig 2. Imaginea grayscale

Fig 3. Histograma imaginii grayscale

Pentru a ajunge la modul în care se regăsesc valorile din dataset-ul cu fișiere csv, se normează valorile pe axa x prin împărțirea valorilor pixelilor din imagine la 255 pentru a obține valori în intervalul [0, 1], lucru care se poate observa în figura 4.

Fig 4. Histograma imaginii cu pixeli normați

După acest pas se identifică un prag de binarizare pe baza unui algoritm , urmând ca pixelii care au valoarea mai mică ca respectivul prag să devină negri, iar restul albi. Pentru imaginea exemplu s-a folosit un algoritm de tip Otsu care a găsit un prag în 0.643. Imaginea astfel rezultată este apoi comparată cu cea de ground truth, urmând a se calcula F-measure-ul pe baza formulei menționate mai sus.

Fig 5. Histograma imaginii cu treshold

Fig 6. Imaginea binarizată

Fig 7. Histograma imaginii binarizate

Fig 8. Imaginea ground truth

Cerințe software

Aplicația trebuie să îndeplinească următoarele cerințe în cadrul implementării:

Pentru a determina dacă un arbore este optim sau nu se poate folosi următoarea abordare:

  1. pentru un rând asociat unei imagini se obține o anumită valoare în intervalul 0-1, ex: 0.78
  2. valoarea respectivă se înmulțește cu 255, se aplică o operație de round pe aceasta, iar rezultatul final reprezintă un index pentru a determina care ar fi F-measure-ul ce ar putea fi obținut pe respectiva imagine în urma rulării arborelui respectiv: idx = round(255 * val); ex: idx = round(255 * 0.78) = 198
  3. pe baza indexului astfel obținut se caută în cele 256 de valori de f-measure asociate diverselor praguri care ar fi valoarea arborelui pe respectiva imagine
  4. se repetă pasul pe toate rândurile din fișierul csv (obs: datele asociate acestora sunt încărcate în memorie în fază inițială și transformate din string-uri în float-uri, nu se citesc fișiere iar și iar) și se determină un potențial F-measure pentru fiecare rând asociat unei imagini
  5. se calculează o medie a F-measure-rilor astfel obținute, medie care poate fi combinată cu complexitatea arborelui pentru a determina un scor asociat arborelui respectiv
  6. complexitatea poate fi determinată pe baza timpului de rulare, dimensiune (număr noduri), operații folosite etc.
  7. se continuă cu cel mai bun/cei mai buni arbori, cei cu scoruri mici fiind eliminați din memorie
  8. după un anumit timp cei mai buni arbori se compară cu fiecare rezultatul fiecărui algoritm individual pentru a determina validitatea acestora

Potențiale noduri și formule pe noduri

Nodurile ce sunt folosite în cadrul arborelui pot avea 0 sau mai multe intrări. Un nod operație cu 0 copii este considerat constantă în cadrul arborelui ce poate fi introdusă în diverse operații.

Mai jos sunt câteva exemple de formule ce ar putea fi folosite în cadrul unui arbore, cât și un număr de intrări recomandate pentru fiecare: constantă aleasă aleator în intervalul [0,1] pe baza unei distribuții (nu are intrări)

Exemplu algoritm creare arbori

Un exemplu de algoritm ce ar putea fi implementat pentru construcția de arbori este unul de tip Monte Carlo, bazat pe următorii pași:

  1. determină un arbore cu un număr aleator de niveluri, pe baza unei limite (ex: între 3-7 nivele)
  2. pentru fiecare nivel determină un număr aleator de noduri, la fel ca și în cazul numărului de nivele pe baza unei limite
  3. pentru fiecare nivel, începând cu cel frunză și terminând cu cel rădăcină alege un nod cu o operație aleatoare și un număr de potențiale noduri copil în funcție de operația asociată
    • nodurile frunză sunt mereu alese ca valoare asociată unui prag de binarizare ce corespunde unui anumit algoritm, fiecare algoritm poate fi ales o singură dată drept frunză pentru întreg arborele

Exemplu arbore

În figura de mai jos se poate observa un potențial exemplu de arbore ce ar putea fi creat, care conține 4 praguri alese aleator pentru frunze, respectiv pragurile care corespund algoritmilor 1,3,5, respectiv 7. Aceste praguri sunt apoi combinate prin diverse operații de tip sumă, medie, înmulțire etc. pentru a ajunge la un rezultat final.

Binarizare locală

Soluția pentru binarizarea locală presupune aplicarea unei valori prag diferite pentru ferestre determinate din cadrul imaginii.

Exemplu articol util binarizare locală aici.

Input binarizare locală

Dataset-ul se poate descărca de la următorul link: dataset local

Dataset-ul conține următoarele informații:

În cadrul binarizării locale nu mai este precizat F-measure-ul pentru fiecare imagine si nici lista cu posibile f-measure-uri ce ar putea fi obtinute in urma aplicarii unui anumit prag; acest lucru se întâmplă deoarece nu mai există un prag unic ce e aplicat pe întreaga imagine ci o multitudine de praguri care sunt calculate pentru fiecare pixel în parte.

Astfel, pentru a determina dacă un anumit arbore este optim trebuie calculat F-measure-ul individual pe fiecare imagine în modul următor:

  1. se creează arborele pe baza algoritmului utilizat în pasul de binarizare globală
  2. se parcurg valorile din fișierul csv asociat unei imagini, pentru fiecare valoare asociată unui pixel se trec valorile de prag asociate acesteia prin arbore pentru a determina valoarea de prag ce ar trebui aplicată pe pixelul respectiv
  3. se aplică valoarea de prag pe respectivul pixel, dacă valoarea acestuia e mai mare decât valoarea de prag obținută acesta devine alb sau ia valoarea 1, altfel devine negru sau ia valoarea 0
  4. pentru fiecare pixel astfel calculat se compară valoarea obținută de 0 sau 1 cu cea primită în fișierul csv în cadrul valorilor din imaginea ground truth și se determină ce tip de valoare ar fi pentru formula de f-measure conform definițiilor de true positive, false positive etc. de mai sus
  5. se calculează pentru fiecare csv asociat unei imagini Ff-measure-ul care ar fi obținut pentru respectivii pixeli clasificați anterior
  6. se repetă pașii de determinare ai arborilor care au fost folosiți la pasul de binarizare global

Se păstrează majoritatea cerințelor software folosite în partea de algoritm global cu următoarea modificare:

Concepte

Binarizarea este preprocesarea imagini ce presupune clasificarea pixelilor în două categorii: pixel de fundal și pixeli ce conțin obiectul (text sau alte obiecte), fiind o metodă de segmentare.

Thresholding sau nivel/valoare de prag este folosit pentru determinarea clasei unui pixel.

Histograma redă distribuția nivelurilor de gri din imagine. Este funcția care asociază fiecărui nivel de gri frecvența de apariție în imagine.

Ground truth este imaginea ideală binarizată asociată imaginii de input. Aceasta este folosită pentru evaluarea performanței algoritmului aplicat.

Milestones și notare

Milestone 1 - Laborator 3: 23 - 27 octombrie - 0.3p

Se acceptă planificarea să fie integrată în instrumentul de urmărire al progresului.

Milestone 2 - Lab7: 20 - 24 noiembrie - 1.7p

Se pune mai mult accentul pe partea de global în faza inițială, partea de local constând în abordarea implementării pentru partea de global.

Milestone 3 - Lab 11: 8 - 12 ianuarie 2024 - 3.2p

Se punctează respectarea metodologiei alese, împărțirii pe sarcini, roluri - 0.8p:

  • respectare metodologie lucru aleasă - 0.3p
  • respectare sarcini/planificare stabilite - 0.3p
  • respectare roluri alese - 0.2p

Bonus

Se pot acorda bonusuri pentru alte metode mai complexe de generare. În funcție de complexitate pot fi acordate 0.5-1 punct.

În săptămâna 14 în cadrul cursului cele mai bune soluții pot intra în competiție, astfel participarea și topul soluțiilor pot primi diverse punctaje bonus în cadrul materiei.

Livrabile

Obligatorii și care trebuie prezentate:

  1. Demo al soluțiilor
  2. Cod (pe Git)
  3. raport tehnic (articol)
  4. raport dezvoltare și testare

Resurse