Calculatoare și Tehnologia Informației [308907]

UNIVERSITATEA TEHNICĂ „Gheorghe Asachi” din IAȘI

FACULTATEA DE AUTOMATICĂ ȘI CALCULATOARE

DOMENIUL: Calculatoare și Tehnologia Informației

SPECIALIZAREA: Tehnologia Informației

Determinarea distribuției dimensiunii particulelor cu ajutorul prelucrărilor de imagine și a rețelelor neuronale convoluționale

LUCRARE DE DIPLOMĂ

Coordonator științific

Prof.univ.dr.ing. Vasile Manta

Absolvent: [anonimizat], 2019

DECLARAȚIE DE ASUMARE A AUTENTICITĂȚII

LUCRĂRII DE DIPLOMĂ

Subsemnatul(a)_____________________________________________________ , legitimat(ă) cu ______ seria ____ nr. _________, CNP________________________ autorul lucrării _________________________________________________________ _____________________________________________________________________ _____________________________________________________________________

elaborată în vederea susținerii examenului de finalizare a studiilor de licență organizat de către Facultatea de Automatică și Calculatoare din cadrul Universității Tehnice „Gheorghe Asachi” [anonimizat] _______________________ a anului universitar ____________________, luând în considerare conținutul Art. 34 din Codul de etică universitară al Universității Tehnice „Gheorghe Asachi” din Iași ([anonimizat].POM.02 – Funcționarea Comisiei de etică universitară), [anonimizat], [anonimizat] (legea 8/1996) și a convențiilor internaționale privind drepturile de autor.

Data Semnătura

____________________

Cuprins

Fundamentarea teoretică și documentarea bibliografică pentru tema propusă ……………..1

1.1.Domeniul și contextul abordării temei ………………………………………………………………1

1.2.Tema propusă …………………………………………………………………………………………………1

1.3.Realizări pe aceași temă ………………………………………………………………………………….2

1.4.Produse similare …………………………………………………………………………………………….4

1.5.Rețele Neuronale Convoluționale ……………………………………………………………………..5 1.6.Transformata Hough ……………………………………………………………………………………….6 HoughCircles ………………………………………………………………………………………………………8

7.Caracteristicile așteptate ………………………………………………………………………………….9

Proiectarea aplicației ………………………………………………………………………………………11

1.Componenta software ……………………………………………………………………………………15

2.Componenta hardware …………………………………………………………………………………..16

Implementarea aplicației ………………………………………………………………………………..17

3.1.Descrierea generală a implementării; ………………………………………………………………17

3.2.Probleme speciale/dificultăți întâmpinate și modalități de rezolvare; …………………..17

3.3.Soluții noi ……………………………………………………………………………………………………19

3.4.Funcționalitatea sistemului …………………………………………………………………………….19

3.5.Comunicarea cu alte sisteme și salvarea/stocarea informațiilor; ………………………….22

6.Interfața cu utilizatorul; …………………………………………………………………………………22

Testarea aplicației și rezultate experimentale …………………………………………………….25

4.1.Testarea sistemului (hardware/software); …………………………………………………………27

4.2.Aspecte legate de încărcarea procesorului, memoriei,limitări în ce privește transmisia datelor/comunicarea; ……………………………………………………………………………………..27

4.3.Se prezintă datele de test/metrici/benchmarks …………………………………………………..27

4.4.Aspecte legate de fiabilitate/securitate; ……………………………………………………………27

4.5.Rezultate experimentale; ……………………………………………………………………………….27

6.Utilizarea sistemului. …………………………………………………………………………………….27

Concluzii ………………………………………………………………………………………………………28

5.1.Soluții personale …………………………………………………………………………………………..28

5.2.Posibile direcții de dezvoltare …………………………………………………………………………29

Determinarea distribuției dimensiunii particulelor cu ajutorul prelucrărilor de imagine și a rețelelor neuronale convoluționale

Ioan Suflet

Rezumat

Interpretarea dimensiunii particulelor este esențială în înțelegerea unor proprietăți

fizice și chimice, iar determinarea distribuției dimensiunii particulelor oferă informații asupra modului în care decurg un unele procese chimice, în stabilirea parametrilor de reacție și totodată a calității produsului finit. Astfel, lucrarea cu titlul “Determinarea distribuției dimensiunii particulelor cu ajutorul prelucrărilor de imagine și a rețelelor neuronale convoluționale” are ca scop realizarea unei aplicații care să cuantifice informațiile extrase din imagini de microscopie (optică, electronică de baleaj – SEM, electronică de transmisie – TEM, etc). De asemenea, datele analizate sunt transpuse în diferite reprezentări grafice ce va permite o mai bună vizualizare a informațiilor solicitate. Există o gamă restrânsă de echipamente științifice ce au încorporat un astfel de program dar cu acces limitat.

Prin prezentul proiect se intenționează punerea la dispoziție a unui software ce

poate fi accesat de o varietate de utilizatori (elevi, studenți, cercetători, etc.). Acesta va completa și va reduce timpul de interpretare a unor rezultate științifice din diferite domenii de cercetare sau industrie (chimie, biologie, medicină, farmacie, mecanică), fapt ce va conduce la maximizarea productivității și a dezvoltării mai rapide a unor produse mai bune.

1. Fundamentarea teoretică și documentarea bibliografică pentru tema propusă

1.1. Domeniul și contextul abordării temei

Imaginile de microscopie optică și electronică au fost părți importante în caracterizările micro și nanometrice. Se poate studia morfologia structurilor, însă analiza calitativă necesită inspecții vizuale consumatoare de timp. Cu o apariție recentă în domeniul procesării imaginilor digitale, aceste caracterizări putând fi facilitate. Într-o tehnică comuna de procesare a imaginii, denumită edgedetection, obiectele sunt separate de fundal prin identificarea schimbării bruște a intensității ca margine. După detectarea limitelor acestora, obiectele sunt numărate și distribuția dimensiunilor poate fi apoi analizată. Procesarea imaginilor cu micro-domeniul a fost aplicată la o varietate de caracteristici complexe.[7]

Microparticulele și nanoparticulele găsesc o creștere a utilizării ca ingrediente în industria alimentară datorită proprietăților lor fizico-chimice particulare și a atributelor funcționale. Designul particulelor cu proprietăți specifice a fost condus recent de aplicarea principiilor nanotehnologiei în produsele alimentare. Nanotehnologia a fost folosită pentru a dezvolta sisteme de particule în diverse scopuri în produsele alimentare: încapsularea și eliberarea ingredientelor active; imita funcționalitatea de scădere a greutății; creșterea percepției de sare; modificarea reologiei și modificarea proprietăților optice. Microparticulele au fost principalul obiectiv al eforturilor de cercetare și dezvoltare din anii 1980, în timp ce nanoparticulele s-au concentrat pe eforturi mai recente. Dimensiunea critică care distinge microparticulele de nanoparticule este încă în dezbatere. Unii autori au propus un diametru de 100 nm ca limită superioară pentru nanoparticule, deoarece susțin că proprietățile particulelor mai mari se potrivesc cu cele ale materialelor vrac. Cu toate acestea, acest lucru depinde în mare măsură de tipul de material.

Metodele de prelucrare a imaginii au deschis ocazia de a extrage informații cantitative din imaginile microscopice ale probelor biologice sau chimice, mărind în mod dramatic gama de întrebări care pot fi abordate experimental în biologie sau chimie. Cercetătorii urmăresc să înțeleagă modul în care se comportă celulele sau particulele. Metodele de procesare a imaginii au un potențial enorm de a extrage informații din acest tip de eșantioane, dar surprinzător, ele sunt încă relativ subexploatate.[6]

Printre aplicațiile procesării de imagine a particuleler se numără și aflarea distribuției lor. Distribuția mărimii particulelor afectează proprietățile materialelor sub formă de particule și este utilizată pentru a denota calitatea și performanța lor. Există numeroase tehnici disponibile pentru a măsura distribuția, multe dintre ele sunt offline și sunt costisitoare ca timp. De asemenea, metode precum cernerea implică manipularea materialului fizic și electromagnetic, care este sănătos, dacă este evitat pentru anumite materiale. Astfel, necesitatea unui analizor online și apariția procesării digitale a imaginilor a dus către inovație. De asemenea, această metodă este pur inferențială, deoarece particulele nu sunt manipulate fizic sau electromagnetic, ca în cazul analizei filtrării sau tomografiei. În general, estimarea se bazează pe luarea în considerare a unui singur parametru al profilului particulelor. Neregularitățile din particulele analizate măresc eroarea.[8]

1.2.Tema propusă

Interpretarea dimensiunii particulelor este esențială în înțelegerea unor proprietăți fizice și chimice, iar determinarea distribuției dimensiunii particulelor oferă informații asupra modului în care decurg un unele procese chimice, în stabilirea parametrilor de reacție și totodată a calității produsului finit. Astfel, lucrarea cu titlul “Determinarea distribuției dimensiunii particulelor cu ajutorul prelucrărilor de imagine și a rețelelor neuronale convoluționale” are ca scop realizarea unei aplicații care să cuantifice informațiile extrase din imagini de microscopie (optică, electronică de baleaj – SEM, electronică de transmisie – TEM, etc). De asemenea, datele analizate sunt transpuse în diferite reprezentări grafice ce va permite o mai bună vizualizare a informațiilor solicitate. Există o gamă restrânsă de echipamente științifice ce au încorporat un astfel de program dar cu acces limitat. Prin prezentul proiect se intenționează punerea la dispoziție a unui software ce poate fi accesat de o varietate de utilizatori (elevi, studenți, cercetători, etc.). Acesta va completa și va reduce timpul de interpretare a unor rezultate științifice din diferite domenii de cercetare sau industrie (chimie, biologie, medicină, farmacie, mecanică), fapt ce va conduce la maximizarea productivității și a dezvoltării mai rapide a unor produse mai bune.

1.3. Realizări pe aceași temă

Mai multe lucrări au avut și au ca obiect studiul metodelor automate de analiză și de numărare a obiectelor din imagine precum: particule, pietre prețioase, celule din sânge, etc. Spre exemplu, motivul pentru interesul major asupra celulelor este destul de clar: în domeniul medical, pentru oameni și animale, analiza celulelor sanguine este utilizată ca indicator pentru evidențierea mai multor boli. De obicei, analiza este efectuată manual prin intermediul unui microscop optic. Pe lângă numărarea particulelor, din micrografele pe care le putem obține prin microscopie, sunt posibile unele măsurători cu privire la forma celulelor. Aici discutăm o abordare bazată pe o segmentare a imaginii. De fapt, măsurarea distribuției mărimii și mărimii celulelor sanguine este sarcina corespunzătoare pentru metoda pe care au abordat-o Amelia Carolina Sparavigna[5]. Una dintre măsuri este perimetrul celulei, dar este posibil să se dea câțiva alți parametri.

Figura 1.1. Celulele roșii din sânge au crescut de

1000 de ori, datorită lui John Alan Elson [5]

În procesarea imaginilor, o segmentare este o metodă de partiționare a unei imagini în mai multe seturi de pixeli, definite ca super-pixeli, pentru a avea o reprezentare care poate fi mai simplă decât cea originală sau mai utilă pentru analizele dorite. În mod specific, segmentarea este un proces de atribuire a unei etichete fiecărui pixel dintr-o imagine, astfel încât pixelii care au aceeași etichetă să aibă anumite caracteristici. În consecință, rezultatul unei segmentări este un set de "segmente" sau "super-pixeli" sau "domenii" care acoperă fundalul întregii imagini. Segmentarea poate oferi, de asemenea, un set de contururi, adică "marginile" extrase din imagine. În acest caz, segmentarea oferă o "detectare a margini".[5]

Determinarea sensibilă a distribuției dimensiunii particulelor este o procedură

Figura 1.2. În stânga, imaginea binară după separarea celulelor. În partea dreaptă, segmentarea obținută[5]

importantă în ceea ce privește eficiența și accesibilitatea în operațiunile miniere care include multe etape, cum ar fi explozia și prelucrarea mineralelor. Metodele digitale de procesare a imaginilor folosite în disciplina de prelucrare a mineralelor au găsit zone de aplicare diferite datorită furnizării de date exacte în timp relativ scurt. În acest studiu a fost efectuată analiza distribuției mărimii particulelor a probelor prelevate din uzine de procesare a agregatelor private, utilizând analiza trierii și metodele de procesare a imaginii digitale și, prin urmare, s-au realizat comparații ale acestor metode în termeni de aplicabilitate pe scară industrială. În acest context, a fost realizat un set pentru analiza proceselor de prelucrare a imaginilor în laborator și la scară industrială. Mărimea distribuției mărimii particulelor a eșantioanelor a fost realizată prin metoda digitală de procesare a imaginii utilizând această metodă de configurare și binînțeles sau folosit și metode de analiză convenționale. Drept rezultat, dimensiunile d20, d50 și d80 ale unui produs din piatră zdrobită au fost determinate cu niveluri de încredere de 94,75%, respectiv 88,45% și, respectiv, 80,00%. Rezultatele obținute au arătat că un sistem bazat pe metoda de procesare a imaginii digitale poate fi aplicat în analiza mărimii particulelor cu un succes înalt ca alternativă la metodele convenționale.[9]

O altă arie de cercetare ce include sarcina recunoașterii particulelor într-o imagine este reprezentată de dezvoltarea normală a animalelor, răspunsurile lor la rănire și boală, fiind important aflarea numărului de celule care mor, se divid sau câte celule dintr-un anumit tip există într-un organ. În general, celulele sunt numărate folosind metode automate după disocierea celulelor dintr-un țesut (de exemplu, sortarea celulelor activate prin fluorescență, pe

Figura 1.4. Embrionii Drosophila etichetați.[6]

bază de FACS) sau atunci când sunt distribuite într-un vas în experimente de cultură, folosind tehnici de procesare a imaginii 2D. Cu toate acestea, abordările anterioare modifică contextele celulare normale, iar procedurile în sine pot modifica numărul relativ de celule. Pentru a menține informații relevante pentru modul în care genele și celulele se comportă în organism, cel mai bine este să numărăm celulele in vivo (adică în organismul viu) sau cel puțin într-un întreg organ sau țesut. Numărătoarea in vivo sau in situ este efectuată în general manual sau constă în estimări ale numărului de celule colorate cu un marker de celule particular. Aceste metode pot fi extrem de consumatoare de timp, estimările pot fi inexacte, iar întrebările care pot fi abordate prin aceste metode sunt limitate.

Numărarea celulelor în Drosophila este o sarcină complexă, datorită variabilității calității imaginii care rezultă din markerii celulari diferiți. Celulele sunt segmentate în funcție de caracteristicile lor. Dar modificările formei celulare cu starea celulară (adică stop, mitoză sau apoptoză). De exemplu, în timpul mitozei, forma este neregulată și poate fi dificil să se determine când o celulă divizată poate fi considerată ca fiind două celule fiice. Celulele nucleu și glia au o formă mai regulată, între eliptică și circulară. Celulele apoptotice au inițial o formă foarte neregulată, mai târziu foarte rotundă și pot apărea subdivizate în părți diferite, în funcție de momentul apoptozei. În funcție de tipul de celule sau starea de celule care urmează să fie vizualizate, se utilizează un marker celular diferit (adică anticorp). Ca rezultat, trebuie dezvoltate diferite metode de procesare a imaginii pentru a cuantifica celule de diferite calități.

[6]

1.4. Produse similare

Programele existente pe piață sunt accesibile numai prin aciziționarea aparaturii specifice, acestea venind suplimentar. Aceste programe au avantajul că pot dispune de date suplimentare care sunt cumulate în momentul efectuării fotografiei, crescând acuratețea.

Programul ImageJ folosește algoritmi de segmentare pentru a diferenția obiectele de fundal. Acest lucru se realizează prin introducerea unei imagini alb negru și alegerea manuală sau automată a unui prag de interes. Pentru analizarea imaginii se pune la dispoziție posibilitatea de a selecta intervalul de marime, și rotunjimea particulei pentru a exclude obiectele care nu sunt de interes. În final, informațiile precum numarul, aria medie, marimea și suprafața de contact dintre particule sunt afișate utilizatorului în format text. [13]

WaveMetrics pune la dispoziție programul Igor Pro care efectuează analiza particulelor pe baza unei imagini binare. Acesta oferă în urma analizei informații precum arie, perimetru, circularitate sau pozițiile particulelor din extremități. Utilizatorii pot constrânge analiza imaginii prin alegerea unei regiuni de interes (ROI) sau specificarea unor cerințe minime precum numărul de pixeli sau dimensiune. [14]

1.5.Rețele Neuronale Convoluționale

În ultimii ani, CNN devine o tehnică foarte populară de machine learning, care este foarte des folosită pentru recunoașterea imaginilor. Unul dintre cele mai faimoase exemple de aplicații CNN a fost recunoașterea cifrelor scrise de mână. CNN este o rețea neuronală de tip feed-forward, de obicei construită din cel puțin două straturi de convoluție, combinate cu straturi de grupare, terminându-se cu un strat complet ingerconectat. Figura 1.4 prezintă structura eșantionului modelului CNN.

Figura 1.5. Straturile unei rețele neuronale convoluționale.[11]

Stratul de intrare este compus din canale de dimensiune a imaginilor de intrare, numărul de canale fiind determinat de adâncimea imaginii de intrare. De exemplu, pentru imaginile RGB numărul de canale este 3, câte un canal pentru fiecare culoare.

Stratul de convoluție reprezintă o parte esențială a rețelelor neuronale convoluționale. Filtrele sunt aplicate la toate setările posibile pe o imagine de intrare pentru a extrage cât mai multe date. În timpul antrenării, ponderile, care sunt parametrii filterlor, se modifică. Nucleele filtrelor sunt de formă pătratică și mici ca dimensiune, dar datorită funcționării de convoluție, acestea se extind pe toată imaginii de intrare. De exemplu, filtrul din primul strat al unei CNN ar putea avea un nucleu de dimensiune 3x3x3 (lățime, înălțime și adâncime). Fiecare nucleu se deplasează în toate locațiile posibile din imagine. Ieșirea acestei operații poate fi văzută ca o abstractizare a intrării.

Stratul de agreagare este folosit pentru a reduce progresiv dimensiunea spațială a intrării pentru a extrage caracteristici de nivel superior fără a crește numărul de parametri de rețea.

Reducerea dimensiunii spațiale se face de obicei prin înlocuirea valorii cu maximul sau media.

Stratul complet conectat se află la sfârșitul rețelei. Această componentă este o rețea neuronală clasică, la intrarea căreia se furnizează feature map-urile, și la ieșirea căreia se aplică funcția de activare softmax. Ieșirea acestei componente este un vector de probabilități cu un număr de componente egal cu numărul de clase. Fiecare componentă a vectorului reprezintă probabilitatea ca imaginea de la intrare să se încadreze în clasa corespunzătoare.

Învățarea în mașină este o disciplină complexă. Dar implementarea modelelor de învățare a mașinilor este mult mai puțin descurajantă și dificilă decât a fost, datorită cadrelor de învățare a mașinilor – cum ar fi TensorFlow – care ușurează procesul de achiziționare de date, de modele de instruire, de predicții și de rafinare a rezultatelor viitoare.

Creat de echipa Google Brain, TensorFlow este o bibliotecă open source pentru calculul numeric și învățarea pe scară largă a mașinilor. TensorFlow îmbină împreună o serie de modele de învățare în mașină și de învățare profundă (aka rețele neuronale) și algoritmi și le face utile prin intermediul unei metafore comune. Utilizează Python pentru a oferi un API frontal convenabil pentru construirea de aplicații cu cadrul, în timp ce execută acele aplicații în C++ de înaltă performanță.

TensorFlow poate instrui și executa rețele neuronale profunde pentru clasificarea numerică a cifrelor de mână, recunoașterea imaginilor, încorporări de cuvinte, rețele neuronale recurente, modele de secvență la secvență pentru traducere automată, prelucrare a limbajului natural și simulări bazate pe PDE. Cel mai bun lucru, TensorFlow susține predicția de producție la scară, cu aceleași modele folosite pentru antrenament.

TensorFlow permite dezvoltatorilor să creeze structuri de fluxuri de date care descriu modul în care datele se deplasează printr-un grafic sau o serie de noduri de procesare. Fiecare nod din grafic reprezintă o operație matematică, iar fiecare conexiune sau margine între noduri este o matrice de date multidimensională sau tensor.

TensorFlow oferă toate acestea pentru programator prin intermediul limbajului Python. Python este ușor de învățat și de a lucra cu, și oferă moduri convenabile de a exprima cât de înalte abstracții pot fi cuplate împreună. Nodurile și tensorii din TensorFlow sunt obiecte Python, iar aplicațiile TensorFlow sunt ele însele aplicații Python.

Operațiile matematice reale, cu toate acestea, nu sunt efectuate în Python. Bibliotecile transformărilor care sunt disponibile prin TensorFlow sunt scrise ca binare C++ de înaltă performanță. Python doar direcționează traficul între piese și oferă abstracții de programare la nivel înalt pentru a le strânge împreună.

Singurul și cel mai mare beneficiu pentru TensorFlow este dezvoltarea de abilități de învățare a mașinilor. În loc să se ocupe de detaliile zgomotoase ale algoritmilor de implementare sau de găsirea modalităților adecvate de a împiedica ieșirea unei funcții la intrarea altui, dezvoltatorul se poate concentra pe logica generală a aplicației. TensorFlow se ocupă de detaliile din spatele scenei.[12]

1.6. Transformata Hough

Transformarea Hough este o metodă de extragere a caracteristicilor pentru detectarea unor forme simple, cum ar fi cercuri sau linii într-o imagine.

O formă "simplă" este una care poate fi reprezentată doar de câțiva parametri. De exemplu, o linie poate fi reprezentată de doi parametri (panta și punctul care trece prin dreaptă), iar un cerc are trei parametri: coordonatele centrului și raza (x, y, r). Transformarea Hough face o treabă excelentă în găsirea unor astfel de forme într-o imagine.

Principalul avantaj al utilizării transformării Hough este că este insensibil la ocluzie. Știm că forma polară a unei drepte este reprezentată ca:

ρ( = xcos(θ) + ysin(θ) (1.1)

, unde ρ reprezintă distanța perpendiculară a liniei de origine în pixeli, iar θ este unghiul măsurat în radiani, pe care dreapta îl face cu originea așa cum se arată în figura de mai sus.

Nu s-a putut folosi ecuația familiară y( = mx + c, motivul fiind că panta, m, poate lua valori între −( ∞ și (+∞. Pentru transformata Hough, parametrii trebuie să fie mărginiți.

Când spunem că o linie în spațiul 2D, atunci este reprezentată de ρ și θ, ceea ce înseamnă că dacă se alege un (ρ, θ), aceștia corespund unei linii. Considerând o matrice 2D unde axa OX are toate posibilele valori theta și axa OY are toate valorile posibile ρ. Orice valoare din această matrice 2D corespunde unei linii.

Această matrice 2D se numește acumulator deoarece folosește valorile pentru a colecta informații utile despre liniile care există în imagine. Celula stânga sus corespunde unui (-R, 0) și dreapta de jos corespunde cu (R, π).

Vom vedea într-un moment că valoarea din interiorul casetei (ρ, θ) va crește pe măsură ce se colectează mai multe dovezi despre prezența unei linii cu parametrii ρ și θ. Pentru colectarea liniilor din imagine se va trece prin următoarele etape:

Inițializarea acumulatorului

În primul rând, trebuie să creăm un set de acumulatori. Dimensiunea matricei reprezintă o decizie de proiectare. Să presupunem că se alege un acumulator de 10 × 10. Aceasta înseamnă că ρ poate lua doar 10 valori distincte, iar θ poate lua tot 10 valori și, prin urmare, se vor putea detecta 100 de tipuri diferite de linii. Mărimea acumulatorului va depinde și de rezoluția imaginii.

Detectarea muchiilor

Acum, când am instalat acumulatorul, vrem să colectăm dovezi pentru fiecare celulă din acumulator, deoarece fiecare valoare a acumulatorului corespunde unei linii. Dacă există o linie vizibilă în imagine, un detector de margine ar trebui să conveargă la limitele liniei. Acești pixeli de margine oferă dovezi pentru prezența unei linii. Rezultatul detecției margini este un vector de pixeli de margine [( (x1,y1),(x2,y2)…(xn,yn)]

Votarea pixelilor ce sunt considerați că aparțin unei margini

Pentru fiecare pixel de margine (x, y) din matricea de mai sus, variază valorile lui θ de la 0 la π și îl vom înlocui în ecuația (1.1) pentru a obține o valoare pentru ρ.

În Figura 2.1, vom da valori lui θ pentru trei pixeli (reprezentați de cele trei curbe colorate) și obținem valorile pentru ρ folosind ecuația (1.1). După cum se poate observa, aceste curbe se intersectează într-un punct care indică faptul că o linie cu parametrii θ = 1 și ρ = 9.5 trec prin ele. În mod obișnuit, avem sute de pixeli de margine, iar acumulatorul este utilizat pentru a găsi intersecția tuturor curbelor generate de astfel de pixeli.

Figura 2.1. Valorile lui RO.

Să presupunem că acumulatorul are o dimensiune de 20 × 20. Deci, există 20 de valori distincte ale lui θ și astfel pentru fiecare pixel de margine (x, y), putem calcula 20 de perechi (ρ, θ) folosind ecuația (1.1). Elementul acumulatorului care corespunde acestor 20 de valori ale (ρ,

θ) este incrementat. Se va face acest lucru pentru fiecare pixel de margine, urmând a avea un acumulator care are toate dovezile despre toate liniile posibile din imagine.

Se poat selecta toate elementele din matrice care au valori peste un prag impus pentru a evidenția liniile din imagine. Dacă pragul este mai mare, vom regăsi mai puține linii accentuate iar, dacă pragul este mai mic, vor apărea un număr mai mare de linii, inclusiv unele vagi conturate.

HoughCircles

În cazul detectării liniilor din imagine cu transformata Hough, a fost nevoie de doi parametri, (θ, ρ), dar pentru a detecta cercuri, avem nevoie de trei parametri (x, y), coordonatele centrului cercului și rază acestuia. Prin urmare, un detector de cerc va necesita un acumulator 3D, unul pentru fiecare parametru. Ecuația unui cerc este dată de:

(( x − x0)2 + (y − y0)2 = r2 (1.2)

Pentru găsirea cercurilor din imagine se vor urma pașii de mai jos:

Se vor evidenția marginile din imagine cu ajutorul metodei Canny;

Pentru detectarea cercurilor se stabilește un prag pentru valoarea maximă și minimă a razei;

Rezultatele sunt colectate într-o matrice de acumulatori 3D cu informații ce cuprind coordonatele centrelor și razele acestora.

În biblioteca OpenCV, funcția HoughCircles are ca parametri de intrare următoarele valori:

image: imagine pe un singur canal pe 8 biți. Dacă lucrați cu o imagine color, convertiți mai întâi la tonuri de gri;

method: Definește metoda de detectare a cercurilor în imagini. În prezent, singura metodă implementată este cv2.HOUGH_GRADIENT;

dp: Rezoluția matricei acumulatorului. Voturile exprimate sunt binned în pătrate stabilite de dimensiunea dp. Setați prea mici și se găsesc numai cercuri perfecte, setate prea înalte și zgomotul colaborează pentru a vota pentru non-cercuri;

mindst: Distanța minimă dintre coordonatele centrale (x, y) ale cercurilor detectate. Dacă minDist-ul este prea mic, pot fi detectate (în mod fals) cercuri multiple în același cartier ca și originalul. Dacă minDist-ul este prea mare, este posibil ca unele cercuri să nu fie detectate deloc;

param_1: Un număr redirecționat către detectorul de contururi Canny (aplicat unei imagini în tonuri de gri) care reprezintă pragul 1 trecut la Canny;

param_2: Valoarea pragului folosit în metoda cv2.HOUGH_GRADIENT. Cu cât pragul este mai mic, cu atât mai multe cercuri vor fi detectate (inclusiv cercurile false). Cu cât este mai mare pragul, cu atât mai multe cercuri vor fi returnate;

min_Radius: Dimensiunea minimă a razei în pixeli. Nu setați minRadius și maxRadius în afară, dacă nu doriți toate cercurile posibile care ar putea fi găsite în acel interval;

max_Radius: Dimensiunea maximă a razei (în pixeli). Nu setați minRadius și maxRadius în afară, dacă nu doriți toate cercurile posibile găsite în acel interval.

Dacă se știe anterior dimensiunea cercurilor din imagine, cu ajutor din partea utilizatorului, se recomanda setarea lui min_radius și max_radius. În caz contrar se va primi ca rezultat orice formă circulară aflată în imagine.

Parametrii 1 și 2 nu afectează precizia ca atare, țin mai multă fiabilitate. Paramul 1 va stabili sensibilitatea adică cât de puternice trebuie să fie marginile cercurilor. O valoare prea ridicată nu va detecta nimic, valoarile scăzute vor găsi prea multe cercuri, uneori distribuite haotic. Param 2 va stabili câte puncte de margine trebuie să găsească pentru a declara că a găsit un cerc. Din nou, o valoare ridicată nu va detecta nimic, prea scăzută va oferi prea multe cercuri ca rezultate fals pozitive. Valoarea ideală a paramului 2 va fi legată de circumferința cercurilor.

[15]

1.7. Caracteristicile așteptate

Programul creeat trebuie să identifice și să analizeze cu ajutorul prelucrărilor de imagini poziționarea, distribuirea, dimensiunea, forma unor particule din materiale impuse și să le extragă în vederea clasificării lor cu ajutorul a unei rețele neuronale convoluționale pe criteriile anterioare. Pe baza rezulatelor obținute programul va interpreta și va raporta informațiile solicitate (dimensiunea și intervalul în care se află setul de particule) cu o abatere cât mai mică, transpunând în grafic valorile pentru o mai bună vizualizare și înțelegere.

Da altfel, se urmărește ca aplicația să aibă un timp de răspuns cat mai mic pentru a oferi posibilitatea pesoanei care o folosește să modifice parametri de intrare într-un timp cat mai scurt. Astfel, se poate sesiza mai ușor corelația dintre ce este afișat și valorile date. Prin urmare, în etapa de reglare a algoritmului de numărare se dorește o rată de actualizare a imaginii între 0 și 10 de secunde.

2. Proiectarea aplicației

Pentru implementarea unei soluții la problema de numărare a sferelor dintr-o imagine dată s-a ales limpajul de programare Python. Acesta este un limbaj de programare dinamic la nivel înalt, interpretat și de uz general, care se concentrează asupra lizibilității codului. Sintaxa din Python ajută programatorii să facă codificarea în mai puțini pași în comparație cu Java sau C++. Limbajul a fost creeat în anul 1991 de către dezvoltatorul Guido Van Rossum. Python este utilizat pe scară largă în organizații mari datorită paradigmelor de programare multiple. Ele implică de obicei programarea funcțională imperativă și orientată pe obiecte. Dispune de o bibliotecă vastă și cuprinzătoare, care are gestionarea automată a memoriei și include caracteristici dinamice.

Python are topurile în topuri în ultimii ani față de alte limbi de programare, cum ar fi C, C++ și Java și este utilizat pe scară largă de către programatori. Limba a suferit o schimbare drastică de la lansarea sa în urmă cu 25 de ani, deoarece sunt introduse multe caracteristici suplimentare. Python 1.0 a avut modulul Modula-3 și a interacționat cu sistemul de operare Amoeba cu diverse instrumente de funcționare. Python 2.0 introdus în anul 2000 a avut caracteristici ale garbage collector-ului și suportului Unicode. Python 3.0 introdus în anul 2008 a avut un design constructiv care evită module duplicate și constructe. Cu funcțiile adăugate, acum companiile utilizează Python 3.5.

Companiile de dezvoltare software preferă limbajul Python datorită caracteristicilor sale versatile și a numărului redus de linii de cod. Aproape 14% dintre programatori o folosesc pe sistemele de operare precum UNIX, Linux, Windows și Mac OS. Programatorii marilor companii folosesc Python, deoarece a creat o marcă pentru dezvoltarea software-ului cu caracteristici asemănătoare: interactiv, interpretat, modulare, dinamic, orientată obiect, portabil, Nivel inalt, și extensibil în C ++ & C.

Figura 2.1. Pagina de administrator.

Avantaje și beneficii ale limbajului de programare Python

Python are aplicații diverse în companiile de dezvoltare software, cum ar fi jocurile, framework-urile și aplicațiile web, dezvoltarea limbajului, prototipuri, aplicații de design grafic etc. Acest lucru oferă limbii o gamă mai mare față de alte limbi de programare utilizate în industrie. Unele dintre avantajele sale sunt:

Biblioteci de suport extinse: Acestea oferă biblioteci standard de mari dimensiuni, care includ zone precum operații pe șiruri, Internet, servicii web, interfețe de sistem de operare și protocoale. Cele mai multe dintre sarcinile de programare extrem de folosite sunt deja scripturi care limitează lungimea codurilor care vor fi scrise în Python.

Funcție de integrare: Python integrează integrarea aplicațiilor Enterprise care facilitează dezvoltarea serviciilor Web prin invocarea componentelor COM sau COBRA. Dispune de capabilități puternice de control, apelând direct prin C, C++ sau Java prin intermediul Jython. Python procesează, de asemenea, limbajul XML și alte limbi de marcare, deoarece poate funcționa pe toate sistemele de operare moderne prin același cod octet.

Productivitatea programatorului a crescut: Limba are biblioteci de suport extinse și proiecte curate orientate pe obiecte, care măresc productivitatea programatorului cu două până la zece ori, în timp ce folosesc limbi precum Java, VB, Perl, C, C++ și C#.

Productivitate: Caracteristicile sale puternice de integrare a proceselor, cadrul de testare a unităților și capacitățile de control îmbunătățite contribuie la creșterea vitezei pentru majoritatea aplicațiilor și a productivității lor. Este o opțiune excelentă pentru construirea de aplicații de rețea multi-protocol scalabile.

Limitări sau dezavantaje în Python

Python are diverse caracteristici avantajoase, iar programatorii preferă aceasta în schimbul altor limbaje de programare, deoarece este ușor de învățat și de redactat. Cu toate acestea, aceasta nu și-a făcut încă loc în anumite arii de calcul, inclusiv în magazinele de dezvoltare a întreprinderilor. Prin urmare, aceast limbaj poate să nu rezolve unele dintre soluțiile pentru întreprinderi. Printre limitări sunt:

Dificultate în utilizarea altor limbaje: Utilizatorii Python devin atât de obișnuiți cu caracteristicile și cu bibliotecile sale extinse, astfel încât se confruntă cu probleme în procesul de învățare sau în lucrul cu alte limbaje de programare. Experții Python pot vedea declararea "valorilor" sau a tipurilor variabile, cerințele sintactice de adăugare a acoladei sau a semnului de punctuație punct și virgulă ca sarcină care implică efort suplimentar.

Slab pentru terminalele mobile: Python și-a făcut prezența pe mai multe platforme desktop și servere, dar este văzuta slab pentru calculatoarele mobile. Acesta este motivul pentru care foarte puține aplicații mobile sunt construite cu ajutorul acestuia, cum ar fi Carbonnelle.

Are viteza redusă: Python se execută cu ajutorul unui interpret în loc de compilator, ceea ce îl face să încetinească, deoarece compilarea și execuția îl ajută să funcționeze în mod normal. Pe de altă parte, se poate vedea că este rapid și pentru multe aplicații web.

Erori în timpul funcționării: Python este tastat dinamic, deci are multe restricții de proiectare raportate de unii dezvoltatori Python. Este chiar văzut că necesită mai mult timp de testare, iar erorile apar atunci când aplicațiile sunt în cele din urmă rulate.

Straturi de acces la baze de date subdezvoltate: În comparație cu tehnologiile populare cum ar fi JDBC și ODBC, stratul de acces al bazei de date Python este puțin dezvoltat și primitiv. Cu toate acestea, nu poate fi aplicat în întreprinderile care au nevoie de o interacțiune lină a datelor moștenite complexe.

În concluze, Python este un limbaj de programare robust și oferă o utilizare ușoară a liniilor de cod, întreținerea poate fi manipulată într-un mod minunat, iar depanarea poate fi făcută și cu ușurință. Acesta a câștigat importanță pe tot globul, pe măsură ce gigantul de calculator Google a făcut-o una dintre limbile sale oficiale de programare. [2]

Având în vedere faptul că activitățile de cercetare ce includ analiza imaginilor de microscopie se desfășoară la nivel mondial, ceea ce presupune că persoanele cărora li se adresează aplicația de numărare asistată a microsferelor folosesc o gamă variată de terminale (telefon, tabletă, laptop), s-a preferat creearea unei aplicații web.

O aplicație web este orice aplicație care utilizează un site web ca interfata sau front-end. Utilizatorii pot accesa cu ușurință aplicația de pe orice computer conectat la Internet utilizând un browser standard. Acest lucru este în contrast cu aplicațiile desktop tradiționale, care sunt instalate local pe un calculator. De exemplu, Microsoft Word, o aplicație obișnuită de procesare a cuvintelor, este o aplicație desktop. Pe de altă parte, Google Docs este, de asemenea, o aplicație de procesare a cuvintelor, dar utilizatorii îndeplinesc toate funcțiile utilizând un browser web în loc să utilizeze software-ul instalat pe terminalul lor. Aplicațiile Google sunt probabil cele mai cunoscute printre aplicațiile web. Este demn de remarcat faptul că aproape orice software desktop poate fi dezvoltat ca o aplicație bazată pe web.

În cazul aplicațiilor web, utilizatorii accesează sistemul printr-un mediu uniform – browserul web. În timp ce interacțiunea cu aplicația trebuie să fie testată temeinic pe diferite browsere web, aplicația însăși trebuie dezvoltată numai pentru un singur sistem de operare. Nu este nevoie dezvoltarea și testarea pe toate versiunile și configurațiile posibile ale sistemului de operare. Acest lucru face ca procesul de creeare și depanare să fie mult mai ușor. Spre deosebire de aplicațiile tradiționale, sistemele web sunt accesibile oricând, oriunde și prin orice PC cu conexiune la Internet. Acest lucru îl determină pe utilizator să se ocupe ferm de locul și momentul în care accesează aplicația.

Interfața utilizator a aplicațiilor web este mai ușor de personalizat decât în cazul aplicațiilor desktop. Acest lucru face mai ușor de actualizat aspectul aplicației sau să personalizați prezentarea informațiilor către diferite grupuri de utilizatori. Prin urmare, nu mai este nevoie ca toată lumea să se mulțumească pentru utilizarea exact aceleași interfețe în orice moment. În schimb, puteți găsi aspectul perfect pentru fiecare situație și utilizator. Pe lângă faptul că este personalizabil pentru grupurile de utilizatori, conținutul poate fi, de asemenea, personalizat pentru a fi utilizat pe orice dispozitiv conectat la internet. Acestea includ preferințele pentru telefoane mobile și tablete. Acest lucru extinde în continuare capacitatea utilizatorului de a primi și de a interacționa cu informațiile într-un mod convenabil. În acest fel, informațiile actualizate sunt întotdeauna la îndemâna celor care au nevoie de ea.

Aplicațiile bazate pe Web sunt de obicei implementate pe servere dedicate, care sunt monitorizate și întreținute de administratori de server experimentați. Acest lucru este mult mai eficient decât monitorizarea a sute sau chiar mii de computere client, așa cum este cazul aplicațiilor desktop. Aceasta înseamnă că securitatea este mai strictă, iar eventualele încălcări ar trebui să fie observate mult mai rapid. [1]

Luând în considerare faptul că detecția microsferelor a fost concepută în Python și pentru a pune la dispoziție această soliție unui public mult mai larg s-a optat pentru proiectarea unei aplicații web, a fost necesară și găsirea unei modalități de a rula codul Python pe un server compatibil și de a folosi un framework care îmbină cele doua părți. Astfel, pentru realizarea proiectului s-a ales Django.

Django este un framework open-source pentru aplicațiile web backend bazate pe Python. Obiectivele sale principale sunt simplitatea, flexibilitatea, fiabilitatea și scalabilitatea. Django are propriul sistem de numire pentru toate funcțiile și componentele (de exemplu, răspunsurile HTTP se numesc "vizualizări"). De asemenea, are un panou de administrare, care este considerat mai ușor de utilizat decât în cazul Lavarel sau Yii și alte caracteristici tehnice, printre care:

Sintaxă simplă;

Propriul server web;

MVC (Model-View-Controller);

"Baterii incluse" (vine cu toate elementele esențiale necesare pentru a rezolva cazuri comune);

Un ORM (Object Mapper Relational);

Biblioteci HTTP;

Suport pentru middleware;

Un framework de testare Python.

În plus, Django oferă o interfață dinamică CRUD (creare, citire, actualizare și ștergere), configurată cu modele admin și generată prin introspecție. CRUD este folosit pentru a descrie comenzile bazei de date, ceea ce înseamnă că interfața facilitează vizualizarea, schimbarea și căutarea informațiilor. [3]

În general, scopul multor computere este acela de a prelua informații dintr-o anumită locație, de a prelucra după preferințele utilizatorului și, în final, de a afișa acestuia. Dupa ce utilizatorul modifică conținutul informației și după aplicarea unor eventuale procesari adiționale, sistemul reînoiește informația în locul unde a preluat-o inițial.

Cea mai ușoară metodă de realizare a unei aplicații care realizează aceste operații este accea de a face operațiile și de a le trata ca pe un întreg. Acest procedeu este bun în sensul în care este ușor de implementat. Ulterior apar însa probleme cand se dorește schimbarea uneia din componentele fluxului de date, spre exemplu atunci când se dorește schimbarea interfeței. O altă problemă ține de logica de business ce trebuie încorporată, logică care și ea este supusă schimbarilor și care merge dincolo de simpla interschimbare de informație.

Figura 2.2. Arhitectura MVC (Model-View-Controller).

Prin urmare, intervine nevoie de modularizare a aplicației, de delimitare în mod clar a părților componente spre a putea fi usor modificate și compatibile cu celelalte module ce formează aplicația. Arhitectura Model-View-Controller (MVC) este o soluție la această problemă, care delimitează partea de stocare a datelor de cea de prezentare și prelucrare. Există trei clase distincte:

Model-ul este responsabil pentru comportamentul datelor din aplicație; răspunde la cereri oferind starea sistemului, la cereri pentru schimbarea stării și anunță utilizatorul atunci când aceste schimbări au avut loc pentru a reacționa.

View-ul transpune model-ul în așa manieră pentru a facilita interacțiunea. Pot exista mai multe view-uri la un singur model, acestea având scopuri diferite.

Controller-ul primește input de la utilizator și initiază un răspuns în urma cererilor către obiectele model. El controlează datele celor două

2.1. Componenta software

Aplicația este prevazută să întâmpine un singur tip de utilizator. Acesta atunci când intră în aplicație are la dispoziție opțiunea de a încărca imaginea dorită. Fără a face acest lucru următoarele etape nu pot fi posibile. Odată ce imaginea a fost introdusă, se poate trece la pasul următor, unde există trei metode prin care se poate ajunge la scopul final, acesta fiind obținerea distribuției și numărului microsferelor din imagine. Aceste metode sunt: transformata Hough, Watershed și rețele neuronale convoluționale, după cum se poate observa în Figura 2.3. Odată aleasă metoda, aplicația începe procesarea imagini cu un set de valori inițiale. Ulterior, pentru a obține măsurători cat mai precise, trebuie introdusă prima dată scara la care a fost realizată imaginea de către microscop. Această scară se măsoară în micrometri și se găsește în partea dreaptă jos a imaginii de intrare. Din acest moment, utilizatorul primește primele rezultate. În cazul în care rezultatele nu sunt satisfăcătoare, există posibilitatea reglării manuale a parametrilor de intrare. Parametri se regăsesc într-o zonă de tip formular. După modificarea acestora, pentru a procesa imaginea cu noul set de date, trebuie apăsat butonul de procesare. În

Figura 2.3. Diagrama UML – Cazuri de utilizare.

funcție de serverul pe care se rulează codul, așteptarea noilor rezultate poate dura de la câteva secunde până la un minut. Pentru o înțelegere mai bună a distribuției dimensiuni particulelor s-a optat pentru afișarea unui grafic care să conțină pe coordonata X lista cu toate diametrele sferelor, iar pe axa Y numărul de sfere cu acel diametru. De asemenea, alte date privind analiza imagini se vor regăsi în partea inferioară a aplicației.

Există și posibilitatea de a încărca o nouă imagine, acest lucru fiind realizabil prin întoarcerea la pagina principală. În final, atunci când utilizatorul consideră rezultatele satisfăcătoare, este posibilă exportarea raportului.

2.2.Componenta hardware

În cadrul lucrării se va utiliza un Apple MacBook Pro 2.9 GHz Intel Core i5, 8 GB RAM, Intel Iris Graphics 550 și un ASUS ROG GL552JX-DM019D, 8GB, nVidia GeForce GTX 950M 4GB cu procesor Intel® Core™ i7-4720HQ precum și imagini de microscopie optică de baleaj (SEM) furnizate prin colaborare cu cercetători de la Intitultul de Chimie Macromoleculară “Petru Poni” Iași.

3. Implementarea aplicației

3.1. Descrierea generală a implementării;

3.2. Probleme speciale/dificultăți întâmpinate și modalități de rezolvare;

Prima abordare este folositoare la un număr mic de intrări unde se pot aduce modificări asupra codului sursa pentru a ajunge la un rezultat cât mai bun. Bineînțeles, procesul trebuie asistat de către o persoană pentru fiecare imagine în parte, ceea ce nu satisface scopul proiectului, acela de a reduce implicarea cercetătorului în procesul de numărare. În schimb, se pot detecta mai ușor eventualele erori apărute.

Figura 3.1. DImagine de microscopie în comparație cu versiunea binarizată.

După introducerea imaginilor, acestea vor fi redimensionate și tăiate pentru a elimina adnotările microscopului cu legătură la detaliile tehnice și setările acestuia în momentul preluării imaginii [Fig. 2.1]. Având în vedere că probele nu au fluorescență, marcaje luminoase sau colorate, vom lucra cu acestea în format grayscale. Primul pas este de a binariza imaginea cu un prag considerat suficient pentru a nu pierde detalii [Fig. 2.2].

Fig. 2.3 Transformata distanței Fig. 2.4 Operație de scadere

Datorită hostogramei, în urma binarizării este posibil să întâmpinăm zone cu zgomot, acestea dorindu-se a fi eliminate. În acest stadiu nu putem fi siguri că zonele marcate cu alb delimitează corect marginile sferelor așa că le vom dilata. Din aceasta se va estrage imaginea binarizată a transformatei distanței aplicată imaginii inițiale [Fig. 2.4]. Transformată oferă fiecărui pixel din imagine informație privitoare la distanță față de cel mai apropiat obiect, în cazul nostru muchiile [Fig. 2.3]. Astfel, prin aplicarea unui prag se va obține o mască cu centrele acestora.

În final se aplică algoritmul Watershed care numără componentele din imagine și le atribuie câte o nuanță de gri diferită, iar conturul determinat anterior va fi suprapus peste imaginea originală [Fig. 5, 6].

Fig. 2.6 Forma finală Fig. 2.5 Watershed

A doua metodă, cea cu rețele neuronale convoluționale are avantajul că poate gestiona un număr mare de intrări care pot diferi ca și luminozitate, contrast sau aranjament, acestea fiind învățate anterior din setul de antrenare. Pentru același set de imagini, rezultatele sunt mai bune, având în vedere delimitarea precisă a obiectelor suprapuse [Fig. 2.7, 2.8].

Fig. 2.7 Threshold adaptiv Fig. 2.8 Segmentare cu ajutorul CNN

Imaginile de intrare pot creea dificultăți în ceea ce privește detecția obiectelor, întrucât indiferent cât de subțire este stratul de pe lamela, microsferele vor avea diferite nuanțe. Nuanțele indică adâncimea pe lamela, cele deschise sunt mai aproape de microscop iar cele închise la culoare mai îndepărtate. Acest lucru induce în eroare ambele metode și fie sunt considerate fundal, fie perturbă coturul altor sfere. O soluție ar putea fi aducerea la același nivel de luminozitate sau folosirea unor filtre adaptive, care se bazează pe informația locală și nu pe întreaga fotografie pentru stabilirea setărilor lor.

La nivel de provocare este volumul scăzut de poze pentru a antrena rețeaua neuronală. Întrucât costurile pentru crearea propriului set de antrenare ar putea fi absurde, se vor încerca folosirea unor seturi existente și asemănătoare. În schimb, pentru a obține o acuratețe cât mai bună se vor compara rezultatele mai multor rețele în același timp, iar cel mai apropiat va fi luat în considerare. La același capitol, s-a constatat necesitatea unei mașini de calcul performate pentru antrenarea rețelei la un număr mare de epoci. Astfel, pentru viteza crescută, procesele vor fi rulare pe GPU-ul propriu sau pe platforme online, acestea din urmă având dezavantajul unui timp limită.

3.3. Soluții noi

Luând în considerare rezultatele precedente, metoda HoughCircles prezintă o soluție satisfăcătoare în condițiile în care parametrii de intrare sunt ajustați după specificul imaginii. Astfel, s-a încercat aplicarea altor transformări asupra imaginii anterior HoughCircles pentru a ajuta la obținerea unor rezultate cât mai apropieate de realitate. Una dintre soluții este egalizarea histogramei. Aceasta este o tehnică de procesare a imaginilor, utilizată pentru a îmbunătăți contrastul, realizeazând acest lucru prin răspândirea efectivă a celor mai frecvente valori ale intensității, adică întinderea domeniului intensității imaginii. Această metodă crește, de obicei, contrastul global al imaginilor atunci când datele utilizate sunt reprezentate de valori de contrast apropiate. Acest lucru permite ca zonele cu un contrast local mai scăzut să obțină un contrast mai ridicat. Egalizarea histogramei adaptiv diferă de egalizarea histogramei obișnuite, în sensul că metoda adaptivă procesează mai multe histograme, fiecare corespunzând unei secțiuni distincte a imaginii, și le folosește pentru a redistribui valorile de luminozitate ale imaginii. Prin urmare, este potrivit pentru îmbunătățirea contrastului local și pentru îmbunătățirea definițiilor marginilor din fiecare regiune a imaginii.

3.4. Funcționalitatea sistemului

Într-un site tradițional bazat pe date, o aplicație web așteaptă cererile HTTP de la browserul web (sau alt client). Când se primește o cerere, aplicația elaborează ceea ce este necesar pe baza adresei URL și eventual a informațiilor din datele POST sau GET. În funcție de ceea ce este necesar, acesta poate apoi să citească sau să scrie informații dintr-o bază de date sau să îndeplinească alte sarcini necesare pentru a satisface cererea. Aplicația va returna apoi un răspuns la browser-ul web, creând adesea dinamic o pagină HTML pentru afișarea browserului, prin introducerea datelor preluate în loc de date într-un șablon HTML.

Aplicațiile web Django grupează de obicei codul care gestionează fiecare dintre acești pași în fișiere separate:

Un mapper de adrese URL este de obicei stocat într-un fișier numit urls.py. În exemplul de mai jos, mapatorul (urlpatterns) definește o listă de mapări între rute (modele specifice de adrese URL) și funcțiile de vizualizare corespunzătoare. Dacă se primește o solicitare HTTP care are o adresă URL care corespunde unui model specificat, atunci funcția de vizualizare asociată va fi apelată și va trece solicitarea.

Figura 3.1. Structura unui priect Django.

urlpatterns = [

url(r'^$', views.index, name='index'),

url(r'^algorithms/$', views.algorithms, name='algorithms'),

url(r'^houghT/$', views.houghT, name='houghT'), url(r'^kmeans/$', views.kmeans, name='kmeans'), url(r'^hog/$', views.hog, name='hog'),

]

Viziunile reprezintă inima aplicației web, primind cereri HTTP de la clienți web și returnând răspunsurile HTTP. Între timp, ele marturisesc celelalte resurse ale cadrului pentru a accesa bazele de date, pentru a face șabloane etc. Ca toate funcțiile de vizualizare, acesta primește un obiect HttpRequest ca parametru (cerere) și returnează un obiect HttpResponse. În acest caz, nu facem nimic cu cererea, iar răspunsul nostru returnează pur și simplu un șir greu codificat. Vă vom arăta o solicitare care face ceva mai interesant într-o secțiune ulterioară.

def index(request): if request.method == 'POST': form = DocumentForm(request.POST, request.FILES) if form.is_valid(): form.save()

return redirect('algorithms/') else: form = DocumentForm() return render(request, 'spheres/upload.html', {'form': form})

Aplicațiile web Django gestionează și interoghează date prin obiecte Python denumite modele. Modelele definesc structura datelor stocate, inclusiv tipurile de câmp și, eventual, dimensiunea lor maximă, valorile implicite, opțiunile listei de selecție, textul de ajutor pentru documentație, textul etichetei pentru formulare etc. Definiția modelului este independentă de baza de date – puteți alege unul dintre mai multe ca parte a setărilor proiectului. Odată ce ați ales ce bază de date doriți să folosiți, nu trebuie să vorbiți direct cu ea – pur și simplu scrieți structura modelului și alt cod, iar Django se ocupă de toate lucrările murdare de a comunica cu baza de date pentru dvs.

class OverwriteStorage(FileSystemStorage): def get_available_name(self, name, max_length=None): name2 = name.split('.')[0] if self.exists(name2+".tif") or self.exists(name2+".png") or self.exists(name2+".jpg"):

#print("–––???????––",name)

shutil.rmtree(os.path.join(settings.MEDIA_ROOT,

'media/process')) return name

def path_and_rename(path): def wrapper(instance, filename): ext = filename.split('.')[-1] # get filename if instance.pk: filename = '{}.{}'.format(instance.pk, ext) else:

# set filename as random string

filename = '{}.{}'.format("processed_image", ext)

# return the whole path to the file return os.path.join(path, filename)

return wrapper

class Document(models.Model):

#scala = models.DecimalField(decimal_places=2,

max_digits=100)

document = models.ImageField( storage=OverwriteStorage(), upload_to=path_and_rename('media/process'), null=True, blank=True)

Sistemele de șabloane vă permit să specificați structura unui document de ieșire, utilizând locașuri pentru datele care vor fi completate când se generează o pagină. Șabloanele sunt adesea folosite pentru a crea HTML, dar pot crea și alte tipuri de documente. Django susține atât sistemul de template-uri nativ, cât și o altă bibliotecă populară Python, numită Jinja2, din cutie (poate fi făcută și pentru a sprijini alte sisteme, dacă este necesar).

3.5.Comunicarea cu alte sisteme și salvarea/stocarea informațiilor;

Imaginile folosite în procesul de prelucrare sunt salvate în directorul “static” sub un nume sugestiv, pentru ca ulterior a fi reîncărcate și refolosite. Spre exemplu, rezultatul metodei Hough Transform este stocat sub numele de “hough.png”. În acelați timp, fotografia inițială este salvată în directorul “media” ca “processed_image”, iar extensia acesteaia poate varia de la .jpg, .tif, .png, etc. Aceasta va rămâne nealterată pe tot parcursul activității. Pe lângă aceste imagini se află și câteva orientative pentru fiecare algoritm, fiind folosite ca reper în etapa de alegere a metodei de prelucrare.

3.6. Interfața cu utilizatorul;

Interfața cu utilizatorul pune la dispoziție 3 ecrane principale, corespunzătoare cu traseul acestuia până a ajunge la rezultatul dorit. Pe tot parcursul vizitării aplicației, va fi prezent meniul principal. Acesta este dispus vertical în partea stângă a ecranului. Meniul conține un buton “Get Started”, care redirecționează către pagina de start, un submeniu extensibilnumit “Algorithms”, care conține la rândul lui cele trei metode de procesare a imaginii (Hough Transform, Watershed, Rețele neuronale convoluționale) și “Instructions”.

Figura 3.2. Pagina de upload.

Prima pagină permite încărcarea unei imagini aleasă de utilizator. Aceasta va trebui să corespundă tiparului oferit de microscop întrucât pe baza legendei inclusă în acea imagine se vor extrage informații precum scala.

În această pagină sunt dispuse orizontal o serie de trei secțiuni corespunzătoare fiecărui algoritm. Fiecare are câte o imagine reprezentativă pentru rezultatul procesării și o descriere succintă. Pentru a alege una dintre metode se poate apăsa butonul aflat în partea inferioară.

Figura 3.2. Pagina de upload.

Secțiunea aceasta oferă posibilitatea de a modifica parametrii algoritmului pentru rezultate mai bune. Totodată, de fiecare dată când se reia procesarea, se va afișa imaginea cu adnotări ce delimitează fiecare sferă in parte, se va recalcula graficul distribuției dimensiunilor particulelor și se vor reactualiza informațiile extrase (diametru mediu, numărul microsferelor).

Figura 3.2. Pagina de upload.

Graficul va afișa pe axa OX diametrele detectate în funcție de scala introdusă, iar pe axa OY numărul sferelor cu diametrul respectiv. Graficul se ajustează automat în funcție de numărul de valoi pentru a nu afișa informațiile suprapuse. Așadar valorile sunt eșantionate proporțional cu numărul lor. De asemenea, s-au luat măsuri în ceea ce privește erorile cauzate de conversia din pixeli în µm. Valorile în pixeli ale diametrelor sunt aproximate pentru a obține numere rotunjite: 140, 100, 170, etc.

Imaginea rezultat este afișată în partea dreaptă-sus. Aceasta conține marcaze adăugate peste imaginea originală. Un aspect care ar ajuta utilizatorul pentru a analiza imaginea este posibilitatea de a o mări atunci când trece cursorul deasupra acesteia. Totodată, există opțiunea de a vizualiza și imaginea originală sau a reîncârca imaginea în cazul unor erori.

În partea dreaptă-jos se află o legendă a adnotărilor folosite pe imagine și a parametrilor folosiți și o scurtă descriere a algoritmului folosit.

4. Testarea aplicației și rezultate experimentale

Pentru rularea aplicației este nevoie de pornirea unui mediului virtual. Virtualenv este un instrument pentru a crea medii izolate Python. De la Python 3.3, un subset a fost integrat în biblioteca standard sub modulul venv. Cu toate acestea modulul venv nu oferă toate caracteristicile acestei biblioteci (de exemplu, nu poate crea script-uri de bootstrap, nu poate crea medii virtuale pentru alte versiuni python decât python instalat pe terminalul gazdă, nu poate fi mutat etc.). Instrumentele, în general, ca atare, pot prefera utilizarea virtualenv pentru ușurința în a face o actualizare la o versiune mai nouă (prin pip), manipularea diferitelor versiuni Python și câteva caracteristici mai avansate. Următorul pas este de a porni serverul Django prin comanda $python manage.py runserver. Din acest moment, se poate intra pe orice browser web și accesa IP-ul local 127.0.0.1:8000, care va conduce către pagina principală a aplicației.

În urma testării algoritmilor s-au observat comportamente diferite în funcție de parametrii introduși. Transformarea imaginii în tonuri de gri presupune ignorarea unor informații de care programatorul se poate folosi, astfel orice sfere cu luminozități asemănatoare pot fi ignorate sau luate în calcul eronat. Ar fi indicat luarea în considerare și a celorlalte canale de culoare, decât a fi ignorate. Există destul de multe modalități de abordare în acest caz: aplicarea HoughCircles pe fiecare canal pre-procesat în mod separat, apoi combinarea rezultatelor, urmând combinarea lor și apoi utilizarea HoughCircles înca o dată. În situația prezentă, imaginile generate de microscopul vizat nu oferă suficiente informații pentru a putea lua în considerare și canalele roșu, verde și albatru. Prin urmare, imaginea va fi convertită în tonuri de gri anterior procesării.

S-a constatat în unele cazuri că aplicarea Canny Edge Detection înaintea HoughCircles ajută considerabil la detectarea cercurilor pline. Această prelucrare prealabilă este destul de greoaie și poate duce la rezultate fals pozitive cu oarecum mai multe “cercuri”.

Un alt aspect observat este valoarea parametrului param2 din HoughCircles care trebuie să fie ajustat în felul următor pentru fiecare imagine pentru a obține o soluție optimă: cu cât este mai mic, cu atât mai multe cercuri false pot fi detectate.

Figura 4.1. HoughCircles – param2 are Figura 4.2. HoughCircles – param2 are valoare scăzută. valoare ridicată.

Problema este că valoarea potrivită va fi diferită pentru fiecare imagine. Cred că cea mai bună abordare aici este de a creea o condiție și de a căuta cu diferite valori ale param2 până când această condiție este îndeplinită. Atunci când param2 este prea mic, imaginile obținute vor avea multe cercuri suprapuse. O abordare ar fi căutarea numărului maxim de cercuri care nu se suprapun și care nu se află în interiorul altui cerc.

4.1. Testarea sistemului (hardware/software);

4.2. Aspecte legate de încărcarea procesorului, memoriei,limitări în ce privește transmisia datelor/comunicarea;

4.3. Se prezintă datele de test/metrici/benchmarks 4.4. Aspecte legate de fiabilitate/securitate; 4.5. Rezultate experimentale;

4.6. Utilizarea sistemului.

5. Concluzii

Viziunea inițială consta în creearea unei aplicații care să înlăture complet componenta umană din procesul de numărare a microsferelor, reducând cât mai mult timpul dedicat acestui proces. Acest lucru se considera a fi realizabil cu ajutorul rețelelor neuronale convoluționale, în schimb, din cauza naturii pozelor, nu s-a ajuns la o acuratețe satisfăcătoare. Poziționarea sferelor, contrastul imaginii, mărimile diverse și luminozitățile diferite, determină rețeaua să marcheze zonele eronat. Acest lucru se datorează imaginilor de antrenare care conțin celule și nu sfere. În respectivele imagini, celulele nu prezintă zone de trecere de la o nuanță la alta precum în cazul sferelor ceea ce conduc către greșeli majore.

Prin urmare, lipsa acurateței a condus către un compromis, acela de a lăsa utilizatorul să îndrume procesul de numărare prin oferirea unor informații esențiale, informații ce diferă în funcție de imagine. Aceste aspecte sunt extrem de ușoare pentru mintea omenească, efortul depus este foarte mic și în final timpul alocat este mult redus, iar erorile ne numărătoare tind să dispară. În ciuda încercării folosirii rețelelor neuronale, s-a ajuns la metoda HoughCircles. Așadar, satisfacerea nevoilor utilizatorilor rămâne la un nivel ridicat.

Privind latura software, proiectul a debutat cu ideea dezvoltării unei aplicații dedicate sistemului de operare Windows, acesta fiind cel mai frecvent întâlnit în cercurile cercetătorilor vizați. Pe de altă parte, dependența programului de platformă ar aduce nemulțumiri, un public scăzut și ulterior un efort ridicat în extinderea acestuia pe diferite terminale. Considerând aceste dezavantaje, s-a optat către o aplicație web. Un beneficiu al acestei alegeri este faptul că puterea de procesare este mult mai mare la serverul care găzduiește aplicația decât a unui calculator uzual folosit de un cercetător în diverse alte scopuri.

5.1. Soluții personale

Observând rezultatele promițătoare ale Transformatei Hough, s-au adăugat câteva procesări separate asupra imaginii de intrare inaintea aplicării HoughCircles cu scopul de a ajuta algoritmul să indentifice cercurile mai usor. S-a lăsat la dispoziția utilizatorilor să aleagă ce modificări pot fi puse în practică, având și opțiunea de a le evita atunci când nu sunt necesare. Una dintre metode este atribuirea de etichete zonelor delimitate de binarizarea imaginii în funcție de contururi. Acest lucru este util la evidențierea muchiilor ce urmează a fi redescoperite ulterior de algoritmul Canny. Tot în acest scop s-a adăugat și un modul care permite egalizarea histogramei fotografiei. Această metodă a ridicat substanțial numărul rezultatelor de succes, datorându-se luminării zonelor întunecate și prin urmare, contururile devenind vizibile.

Pentru a ajuta utilizatorul în momentul reglării parametrilor, acesta poate rula ca test cu valori intermediare și ulterior îndreptându-se către rezultat. De fiecare dată când imaginea se actualizează, culorile cercurilor care delimitează sferele au nuanțe diferite. Nuanța diferă în funcție de diametru minim, mediu și maxim. Sferele care au diametrul apropiat cu cel mediu vor fi colorate cu verde. Pe măsură ce scad în mărime, marginile acestora se vor îndrepta către culoarea roșie, respectiv albastru pentru cele de dimensiuni mari. O gamă redusă de nuanțe indică din punct de vedere chimic că reacția a avut succes, materialul vazut la microscop fiind de calitate mai bună, iar pentru o imagine unde apar atât cercuri roșii, cât și albastre sau verzi se poate trage o concluzie despre calitatea reacției chimice și a corectitudinii algorimului. Prin urmare, acest aspect face ca programul să devină intuitiv și usor de folosit.

5.2. Posibile direcții de dezvoltare

Analizând pașii urmați pentru a ajunge în acest punct, se constată nenumărate posibilități de dezvoltare. Spre exemplu, având metoda HoughCircles și rețelele neuronale, o soluție ar fi creearea unui set de date de antrenare de minim 10000 de poze care să conțină numai contururile sferelor. Astfel, la aplicarea transformatei Hough asupra rezultatului rețelei vor fi șanse foarte mari de aflare a număruoui exact de microsfere, indiferent de luminozitatea imaginii, dimensiunea sferelor sau dispunerea lor pe lamelă. Totodată, în cazul în care se vor dori mai multe analize asupra imaginii, se poate clasifica fiecare probă în funcție de ce este prezent în imagine. Cercetătorii vor putea ajunge la un verdict asupra probei chimice extrem de repede. Mai mult de atât, daca aplicația se specializează pe anumite reacții chimice, salvând fiecare etapă a procesului de formare a probei, se vor putea elibera indicații pentru construirea uneia noi, mai bune, pe viitor.

Printre imaginile de testsare, există și particule în formă cubică și hidrogeluri. Particulele cubice nu se încadrează în specificațiile algoritmilor folosiți pentru detectarea cercurilor. Așadar, HoughCircles nu va putea fi folosit decât pentru un set restrâns de poze, adică numai cele care conțin sfere. În schimb, rețelele neuronale ar putea diferenția formațiunile între ele. Pe de altă parte, hidrogelurile au în componența lor pori. Aceștia nu sunt uniformi și ar putea fi identificați dupa o scădere locală a intensității nuanțtelor. Acest fapt lasă aplicația să se dezvolte cu alte metode de detecție.

În final se dorește în a încărca aplicație pe un server public pentru a fi dat în funcțiune publicului de cercetători științifici. Expunerea la un număr mare de oameni care folosesc acest program aduce posibilitatea de a colecta toate imaginile introduse ca intrare și de a le folosi în reantrenarea algoritmilor folosiți. Pe măsură ce aplicația ar fi folosită, algoritmii ar genera soluții din ce în ce mai corecte.

Similar Posts