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:

  • două seturi de fișiere în format CSV, unul de “training” pentru creare de arbori și altul de “test” pentru testarea celor mai buni arbori creați
  • fiecare set are 2 fișiere, unul cu datele despre imagini, altul asociat datelor despre ground truth
  • fiecare rând din fișier e asociat valorilor obținute prin rularea de diverși algoritmi pe o anumită imagine
  • fișierele vor conține următoarele intrări:
    • csv asociate algormitmilor:
      • un număr de praguri de binarizare obținute în urma rulării unei varietăți de algoritmi euristici (e.g. Otsu, Niblack etc.)
    • csv asociate ground-truth
      • 256 de valori care reprezintă F-measure obținut prin aplicarea unui prag de binarizare în acel punct în cadrul histogramei (valorile sunt normate în intervalul 0-1)

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:

  • funcționale:
    • nu există restricție de limbaj de programare, soluția poate fi creată în orice limbaj
    • nu este nevoie de crearea unei interfațe grafice pentru aplicație, datele putând fi prezentate sub formă text, iar rularea aplicației poate fi făcută din linie de comandă dacă este cazul
    • citește un set de fișiere csv și le încarcă în memorie pentru a putea fi utilizate în cadrul creării de arbori
      • se evită hard-codarea path-urilor către fișierele csv, acestea ar trebui să poată fi selectate ca și argumente pentru intrări în momentul rulării aplicației
    • pe baza datelor citite se caută un mod inteligent de combinare al acestora, prin generarea de arbori, pentru a obține rezultate mai bune decât oricare algoritm individual este folosit ca intrare (un exemplu de algoritm care e ar fi ușor de implementat pentru fază inițială este descris mai jos, deși în formă finală se dorește o abordare puțin mai complexă)
    • fiecare arbore are la intrare un anumit număr de noduri frunză care reprezintă care algoritmi de binarizare sunt folosiți ca și intrări (nu trebuie folosiți mereu aceiași algoritmi, sau toți algoritmii), iar între nodurile frunză și cel rădăcină există mutiple noduri de tip operații care combină intrările, nodul rădăcină reprezintă atât ieșirea cât și ultima operație de combinare aplicată în cadrul arborerului (mai jos sunt descrise diverse operații ce pot fi aplicate în cadrul diverselor noduri din arbore)
    • ieșirile arborelui trebuie să se regăsească în intervalul 0-1 (intrări normate → ieșiri normate)
    • fiecare arbore creat trebuie să fie determinat dacă este optim sau nu (un exemplu în această privință este detaliat puțin mai jos)
    • fiecare arbore trebuie să poată fi salvat pe disc sub formă de fișier (tipul de format nu este relevant, poate fi text, binar etc.) iar apoi să poată fi încărcat din nou în memorie pentru a putea fi testat
    • aplicația trebuiă să aibă și o parte de logging în care sunt salvate informații despre arbori creați pe parcurs, F-measure-ul lor, complexitate etc.
    • se evită hardcodarea path-urilor pentru fișierele asociate arborilor/log-uri, acestea trebuie să poată fi specificate de către utilizator
  • non-funcționale
    • soluția trebuie să fie ușor paralelizabilă, cât mai mulți arbori pot fi creați și testați în paralel
    • adăugarea de noi operații matematice/noi noduri în cadrul algoritmului de creare de arbori trebuie să fie ușor de realizat
    • nu există constrângeri legate de memorie
    • ca și timp de rulare un anumit arbore ar trebui să poată fi rulat pe întreg setul de date în < 15s

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)

  • max/min (2-10 intrări)
  • medie aritmetică (2-10 intrări)
  • medie geometrică (2-10 intrări)
  • medie ponderată (2-10 intrări)
  • mediană
  • if/else, ex: if i1 < i2 → i3 else → i4 (4 intrări); se pot construi multe alte tipuri de formule de tip if/else)
  • operații aritmetice limitate în intervalul [0,1] pentru 1,2 intrări: x^2, |x-0.5|, x+0.5, 2x, 0.5x, x*y, x+y, |x-y|, x^y etc.

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:

  • set de fișiere în format CSV
  • fiecare fișier este asociat unei imagini din data set
  • fișierele conțin următoarele date:
    • pixelii din cadrul imaginii, fiecărui pixel îi este asociată o intrare în fișier ce conține:
      • valoarea pixelului
      • pragurile obținute de algoritmi pentru pixelul respectiv
      • valoarea pixelului în imaginea de ground truth

Î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:

  • cerințe non-funcționale:
    • timpul de rulare al unui arbore pe un fișier csv asociat unei imagini < 40s

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

  • Setare repo pe un sistem de versionare (GitHub, GitLab)
  • Raport text despre organizarea la nivel de echipă, roluri ocupate, metodologie de dezvoltare folosită - 300 de cuvinte

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

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

  • Raport tehnic - 0.4p
    • Articol ce conține: introducere domeniu, descriere soluție, arhitectură, rezultate intermediare ale soluției software, concluzii intermediare (incluzând abordarea globală și locală)
    • Baze de date științifice utile pentru studiul domeniului și state of the art:
  • Raport de dezvoltare - 0.4p
    • Planul de risc al dezvoltării proiectului: Posibil template aici
    • Progres al echipei în dezvoltarea soluției
    • Impactul metodologiei de dezvoltare folosite
    • Monitorizare, evaluare și controlul evoluției proiectului
  • Demo prototip intermediar - 0.9p

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

  • Prezentare soluției binarizare - 0.5p
    • 10 minute
    • Template prezentare
    • Prezentarea este suport pentru prezentarea soluției
  • Demo tehnic al soluției - 1.4p:
    • binarizare globală - 0.7p
    • binarizare locală - 0.7p
  • Raport dezvoltare - 0.5p
    • Planul de testare și rezultate
    • Impactul metodologiei de dezvoltare folosite în cadrul implementării
  • Raport tehnic - 0.8p
    • Articol ce conține: introducere domeniu, descriere soluție, arhitectură, rezultate ale soluției software, concluzii (incluzând abordarea globală și locală)
    • Se actualizează articolul din M2, pe baza căruia asistentul a dat feedback

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

mps/proiect.txt · Last modified: 2024/01/11 09:28 by giorgiana.vlasceanu
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