CALCULATOARE SI TEHNOLOGIA INFORMATIEI ––––––––––––––––––––––––––- PRELUCRAREA DE IMAGINE… [629427]

UNIVERSITATEA “ POLITEHNICA “ din BUCURESTI
FACULTATEA DE ELECTRONICA, TELECOMUNICATII SI TEHNOLOGIA
INFORMATIEI
CALCULATOARE SI TEHNOLOGIA INFORMATIEI
––––––––––––––––––––––––––-

PRELUCRAREA DE IMAGINE OBȚINUTĂ PRIN DETECȚIE
FLUORESCENTĂ

Coordonator științific:
Prof. univ. dr. Babarada Florin Absolvent: [anonimizat] : Mălin Ștefan

BUCURESTI
2017

2

CUPRINS

1.Introducere
1.1 Mediul de dezvoltare utilizat – Matlab …………………………………………………….3
1.2 Analiza datelor d in imagini biologice(biosenzori) …………. ………………………….5

2. Nivel de dezvoltare
2.1. Calitatea imaginii achiziționate ………………………….. …….. ………………………….7
2.2. Prelevarea probelor biologice ……………………………………. ………………………….8

3. Scopul aplicației
3.1. Biodetec ția preconizată …………………………………………….. ………………………….9
3.2. Pricipiul optic al imunosezorilor ………………………………… …………………………10

4. Conceptul software
4.1. Algoritmul pentru procesarea de imagine ……………………………. ………. ………. .12
4.2. Detecție fluorescentă îmbunătățită bazată pe dispozitive electronice simple .14
4.3 Contribuții suplimentare în algoritmi ………………………………………………… …..18
4.4 Metode de optimizare asociate conceptului software ………………………………. 19
4.5. Codul si documentația proiectului ……………………………… ………………………….21
5. Rezultate și discuții ……………………………………………………………….. ………………………….52
6. Concluzii ……………………………………………………………………………… ………………………….53
7. Bibliogra fie………………………………………………………………………………………………………54

3
1. Introducere

1.1 Mediul de dezvoltare utilizat – Matlab

Prelucrarea și analiza imaginilor s -a născut datorită ideii și necesității de a înlocui observatorul
uman printr -o mașină. Este important de precizat că analiza imaginilor a mers mai departe decât
simplă înlocuire a observatorului uman, deoarece au apărut soluții inovatoare pentru probleme cu
care acesta nu mai fusese confruntat – ca în cazul imaginilor non -vizibile.
Deci atât timp cât acceptăm ideea că unealta de lucru în prelucrarea imaginilor este calculatorul,
și acesta la rândul său este digital, atunci și prelucrare a este la rândul ei digitală, ca un caz
particul ar al oricărei prelucrări numerice. Desigur că există însă și prelucrări de imagini care sunt
analogice – așa cum sunt toate prelucrările ce au loc în cadrul lanțului de transmisie și recepție a
imaginii standard de televiziune.
La început imaginile sunt semnale, nu funcții temporale, ci funcții definite pe un domeniu
spațial. Orice imagine este o structura bidimensională de date. Un element al imaginii se numește
pixel. Aceste date pot fi numere naturale, reale sau complexe, reprezentate pe un număr finit de
biți. După tipul datelor din această structura bidimensională, imaginile prelucrate pot fi împărțite
în mai multe categorii[8]:

• imagini scalare, în care fiecare componentă este un scalar; ca exemple de astfel de
imagini se pot da imaginile monocrome și imaginile cu nivele de gri
• imagini vectoriale, în care fiecare componentă este un vector de numere; cazul particular
cel mai de interes este acela al imaginilor color, în care vectorul are trei componente. Tot în
categoria imaginilor vectoriale intră și imaginile stereo și secvențele de imagini
Structura tipică a unui sistem de prelucrare și analiza imaginilor este alcătuită din punct de
vedere funcțional dintr -un număr mic de blocuri:
• sistemul de formare al imaginii (de exemplu sistemul de lentile al camerelor de luat
vederi): strânge radiația electromagnetica a obiectului studiat pentru a forma imaginea
trăsăturilor de interes
• convertorul de radiație: convertește radiația electromagnetică din planul imaginii într -un
semnal electric
Sistemul de fo rmare a imaginii și convertorul de radiație formează senzorul; acesta realizează o
proiecție plană a scenei reale. Un studiu realizat în Germania în anul 1996 prin inventarierea
sistemelor de prelucrarea a imaginilor folosite în industrie indică o distrib uție a tipurilor de
senzori după gama de radiație captată conform:

4
• sistemul de achiziție: convertește semnalul electric al senzorului într -o imagine digitală,
pe care se stochează; acesta nu este altceva decât un dispozitiv de eșantionare și cuantizare.
• sistemul de prelucrare; în această categorie se încadrează însă și mașinile specializate de
calcul, calculatoarele de proces, etc.
• software -ul specializat: implementează algoritmii de prelucrare și analiză
Sistemul software specializat care este respo nsabil cu realizarea efectivă a unei sarcini concrete
poate fi descompus în mai multe module, nu neapărat bine separate și nu neapărat prezente
împreună: îmbunătățirea. segmentarea, analiza.
Imbunatarirea imaginilor are că scop accentuarea anumitor trăsătu ri pentru ușurarea unor sarcini
ulterioare de analiză automată sau interpretare prin afișare. Asemenea metode pot fi utile la
extragerea trăsăturilor caracteristice ale obiectelor, eliminarea zgomotelor suprapuse imaginii,
mărirea confortului vizual.
Segme ntarea este procesul de descompunere a unei imagini în elementele sale constituente.
Adeseori, segmentarea este strâns legată de algoritmii de analiză, al căror scop este de a realiza
măsurători c antitative sau evaluări calitative asupra unor anumite categ orii de obiecte, prezente
în imaginea dată. Segmentarea imaginilor este o etapă critică și un pas fundamental în analiza
automată a imaginii. O mare varietate de algoritmi de segmentare a fost propusă în literatura de
specialitate în ultimele decenii pentr u o gamă largă de aplicații și domenii. Analiza imaginilor
medicale a primit o atenție specială din partea cercetătorilor datorită aplicabilității practice în
sănătatea omului. În această lucrare ne concentrăm asupra procesării de imagini microscopice și
evaluarea algoritmilor propuși. În patologie, patologistul oferă un diagnostic după ce analizează
și verifică proprietățile unui set de mostre biologice (țesuturi tratate cu diferiți marcatori). Acest
proces complex poate fi îmbunătățit prin furnizarea pata logului/cercetătorului date concrete
obținute prin analiza automată a imaginilor. Tehnicile de procesare a imaginilor permit
evaluarea/analiza unor seturi mari de imagini în comparație cu inspecția vizuală și sunt folosite
în ambele domenii ale patologiei: citologie (studiul celulelor) și histologie (analiza structurilor
microscopice din țesut). Performanța acestor algoritmi trebuie verificată folosind criterii de
evaluare care caracterizează și evidențiază situațiile în care rezultatele obținute nu satisfa c
cerințele impuse de domeniul în care sunt folosite.
Sfera de aplicabilitate a tehnicilor de prelucrare și analiză a imaginilor este deosebit de largă;
practic, în orice domeniu de activitate se pot găsi numeroase aplicații. În aplicațiile medicale sunt
prelucrate radiografiile cu raze X, angiogramele, ecografiile, tomografiile, imaginile de
rezonanță magnetică nucleară. Acestea pot fi utilizate pentru monitorizarea pacienților și pentru
descoperirea și identificarea de boli și tumori.

5
1.2 Analiza datel or din imagini biologice

Prima etapă în analiză datelor de imagine biologică, în general se ocupă cu detecția obiectelor de
interes.
În microscopia de fluorescență, care este unul dintre instrumentele de baza utilizate în biologie
pentru vizualizarea componentelor subcelulare și dinamică a acestora, obiectele sunt etichetate
cu proteine fluorescente și în imagini apar ca pete luminoase.
Fiecare loc ocupă doar câțiva pixeli, ce implică o analiză a imaginii digitale având că obiectiv
furnizarea de date numerice pentru a cuantifica și caracterizarea proceselor biologice observate
prin microscopie cu fluorescență.

Fig. 1. Imagine mostră d e microtubuli (a) – (d) etichetate cu proteină verde fluorescentă (GFP) și
evidențiată cu ajutorul imagisticii de microscopie confocală

Într-o manieră mai generală, biosenzorii pot fi clasificați după metoda lor de bio -recunoaștere:
enzimatic, imunosensib il, sau după metoda traductorului: optic[1], electrochimic[2], sau prin bio –
nano -dispozitive integrate[3]. Biosistemele optice recente se integrează într -o matrice , arată
analizele, biodetectorii ca enzime sau anticorpi și un optocuplor ca element traduct or.
Biodetectorii cu anticorpi marcați se încadrează în categoria de biodegradări optice, exploatând
efectul de fluorescentă[5],
Avantajele sistemelor bazate pe fluorescență sunt sensibilitatea ridicată și lipsa de deteriorare a
probei biologice gazdă[5]. O provocare în domeniul fluorescenței este amplificarea semnalului
util. Acest scop poate fi realizat prin intermediul unui circuit optic optimizat sau prin

6
prelucrearea imaginilor software, de exemplu scăderea raportului semnal / zgomot. Soluțiile
hardwa re combină un lanț de componente optice, cum ar fi sursa de lumină incitantă -lentilă -filtru
optic, spectrofotometru de fluorescență, cu unele dispozitive optoelectronice optime, cum ar fi
foto-multiplicatorul, fotodiodă sau foto -tranzistor[6,7].
În anul 2012, un grup de cercetători a raportat o platforma integrată pentru detectarea
fluorescenței, în Sitechnology[8]. Rezultatul amplificării constă în creșterea semnificativă a
detectării fluorescenței limită, care se raportează și la studiul nostru. Noutatea acestor platforme
se referă la o micro -lentilă, echipată cu un filtru optic multistrat care utilizează probe de SiO 2 /
Ta2O5 care sunt monolitic integrate pe un pin de fotodiodă, realizată în tehnică amorfă de Si, a –
Si: H. Rezultatele indică un m axim de sensibilitate a detecției fluorescente, în special în spectru
verde, cu lungimi de undă cuprinse între 500 și 600 de nm, ce caracterizează în cea mai mare
parte biomateriale, cum ar fi proteinele. Soluția este extrem de elegantă dar implică tehnolo gii
avansate de costuri ridicate la fabricare. Cea de -a două modalitate de detecție fluorescentă
provine din prelucrearea imaginilor, prin utilizarea unor instrumente software speciale,
îmbunătățind semnalul de zgomot(SNR). Raportul semnal / zgomot are rol ul de a îmbunătăți
calitatea imaginii fluorescente a materiei vii, care, de obicei suferă de un contrast scăzut, aceasta
devenind o provocare pentru cei implicați în acest domeniu.
Scopul acestei lucrări pornește de la diagnosticarea diferențială a mening itei bacteriene, printr -un
echipament simplu bazat pe echipamente electronice auxiliare cât mai simple, care exploatează
caracteristicile optice ale telefoanelor mobile moderne cu o camera video integrată, permițând
procesarea imaginilor. Metode similare, bazate numai pe inteviu online pacient -centru de
consultanță, au fost adoptate cu succes în întrega lume[10], dovedind utilitatea muncii noastre.

7
2. Nivel de dezvoltare
2.1. Calitatea imaginii achiziționate
În multe cazuri, calitatea datelor extrase din imagine este destul de scăzută, datorită limitărilor
procesului de achiziție a imaginii. Acest lucru este valabil mai ales în cazul imaginilor cu celule
vii, unde intensitatea iluminării este redusă la minim pentru a împiedica degradarea imagin ii,
rezultând un raport semnal / zgomot foarte scăzut(SNR)[3].
În consecință, este adesea dificil, chiar și pentru biologii experți, să facă distincția între obiecte
din structuri de fond irelevante sau acoperite de zgomot. În practică, metodele automate de
detecție a obiectelor, aplicate imaginilor de microscopie fluorescentă raportează prea multe
elemente false, ducând astfel la coruperea analizei prin prezența unor obiecte inexistente sau
detecția unor obiecte mai mici decât sunt de fapt în realitate, c eea ce face că analizele ulterioarea
să fie compromise.
În trecut, au fost propuse mai multe metode de îndeplinire a acestei sarcini, dar o evaluare
aprofundată de tip cantitativ, și o comparație care să includă aceste metode lipsește în literatura
de spe cialitate.
Exemplu de imagini care conțin obiecte de dimensiuni diferite la:
a). SNR = 7[4]
b).SNR = 2[4]

Exemplu de schemă pentru înlăturarea zgomotului, aplicată folosind un algoritm software:

8
În această lucrare căutăm soluții cât mai simple și mai rapide posibil, pentru detectarea infecțiilor
bacteriene de tip meningită.
Astfel, am apelat la biodetectori prin anticorpi marcați care se încadrează în categoria optică,
exploatând un efect de fluorescență.

2.2. Prelevarea probelor biologice
Meningita este o boală infecțioasă severă, cu evoluție rapidă și imprevizibilă, expunând viață
pacientului. Prin urmare, diagnosticul diferențial necesită o întârziere minimă, calculată în ore
sau minute. Problema cu care se confruntă adesea medicul specialist este legată de diagnosticul
diferențial între meningită virală și bacteriană. Această implica decizii complet diferite.
În toate cazurile, medicul trebuie să recolteze mai întâi o proba de lichid cefalorahidian(CSF).
Scopul acestei lucrări este de a realiza o a plicație software care identifica emisia de fluorescență
din CSF, înlăturând costul scump al tehnicii microscopice. Astfel, aplicația software poate fi ușor
implementată în orice serviciu de urgență, putând alerta existența meningitei bacteriene prin
detec ție fluorescentă într -o proba simplă prelevată, semnalizând prezența citokinelor. Detecția
bolilor bazată pe biomarkeri de sânge, precum citokinele specifice este uzuală pentru multe
afecțiuni, inclusiv infecții cele de natură bacterienă, virală și parazit ară.

9

3.Scopul aplicației
3.1. Biodetec ția preconizată
Biodetecția preconizată în testele noastre se bazează pe:
• Țintă = agenți bacterieni responsabili de infecțiile cu meningită în LCR
• Analiști = citokinele specifice care se leagă de Ab
• Agent fluorescent = etichetat Ab
• Traductor = optic, inclusiv filtre optice
• Afișaj = afișaj electronic
Traductorul clasic – inclus in microscop este scump.
Ca și alternativă se poate folosi traductorul clasic, care alături de folosirea unor aplicații
implementate pe dispozitive electronice mobile duce la costuri reduse, calitatea sporită a
rezultatelor obținute, fiind disponibil pentru diferențierea rapidă între infecțiile virale și cele
bacteriene.
Apelăm astfel la sitemele bazate pe fluorescentă, ca re sunt în continuare sensibile, și lipsite de
deteriorarea sistemului gazdă. Biosenzorul preconizat implică un dispozitiv semiconductor cuplat
la stratul bio -sensibil pentru a detecta bio -moleculele ale căror sarcina intrinsecă are efect asupra
conductivi tății traductorului semiconductor.
Când bio -moleculele se leagă de receptorii de suprafață ai traductorului, distribuția încărcării la
suprafață se modifică , modulând potențialul electrostatic din semiconductor, pe principiul opto –
cuplor: LED -foto-tranzi stor.

10

Vector de esantioane – Detectia simultana a trei tipuri de citokine pe aceeleasi 6 puncte ale
matricii: stanga – TNFa, centru Mip -1a, dreapta MCP -1.

3.2. Pricipiul optic al imunosezorilor

Matricele de proteine oferă posibilitatea de a măsura mai multe proteine în același eșantion,
permițând astfel colectarea unei cantități mari de informații din volume reduse de eșantioane.
Tehnologia ce are în prim plan matricile de proteine, studiul acest ora limitându -se la
laboratoarele de cercetare dotate cu scannere ce au încorporate lasere, de înaltă rezoltie, cititoare
de cadre precum Luminex care vin însoțite de proceduri laborioase ce necesită timp, personal și
consum de reactivi chimici, este astfe l mai potrivită pentru descoperirea biomarkerilor decât
pentru rutina afecțiunilor expuse mai sus.[11]
De fapt, în cazul nostru, agenții patogeni bacterieni sunt detectați prin citokinele lor specifice.
Aceste proteine sunt implicate în semnalizarea celul ară. Agenții patogeni sunt recent evaluați
printre mai mulți mediatori ai bolilor inflamatorii[12-15]. Anticorpii fluorescenți marcanți, se leagă

11
în mod specific la citokina eliberată în lichidul cefalorahidian. Imediat, apariția fluorescenței pe
probă va fi asociată cu infecția asociată meningitei bacteriene.
În analiza prezentă, radiația ce constituie sursa provine de la o diodă emițătoare de lumină care
emite radiații în specrul UV, în timp ce semnalul fluorescent prezintă o lungime de undă în
domeniul vizibil, adică regiunea verde a spectrului. Măsurarea fluorescenței se face utilizând
camere CCD obișnuite de la echipamente electronice uzuale, un exemplu fiind telefoanele
mobile Apple iPhone 4.
Principala problemă este că biomarker -ul rezultat trebuie să fie relevant, astfel încât intensitatea
fluorescenței în spectrul verde ar trebui măsurată cu rezoluție ridicată, fiind necesară măsurarea
câtorva ordine de mărime. Aceasta traduce conversia digitală într -o mărime de culoare ridicată,
necesitând cel puț in 16 biți pentru stocare, solicitând o rezoluție de culori ridicată pentru
procesarea ulterioară. Procesarea poate fi efectuată fie pe respectivul telefon mobil, utilizând o
opțiune HDR mare, în cazul în care dispozitivul mobil suportă sisteme de operare moderne
(iPhone 4 sau generații ulterioare), putând fi stocată pe acest dispozitv și ulterior trimisă prin e –
mail din telefonul mobil către un calculator care centralizează toate aceste rezultate, pentru
analize suplimentare.
Mai întâi, matricea biologică este pregătită folosind un anticorp specific Ab pentru citokinele
vizate. În cazul în care lichidul cefalorahidian(CSF), în contact cu stratul receptorului Ab găsește
agenți patogeni bacterieni, aceștia sunt însoțiți de citokine, care se leagă care indică spre Ab.
Apoi, anticorpii fluorescenți etichetați sunt eliberați în urma contactului cu sonda, astfel încât
aceștia se leagă complementar la citokine.
Prin urmare, apariția citokinelor țintă este tradusă printr -un semnal fluorescent emis de sonde.
Astfe l au fost expuse șase spoturi cu diferite concentrații de captare a anticorpilor citokinici ,
aranjate în configurații spațiale bine definite ce au fost incubate timp de o ora cu soluții
conținând amestecuri de citokine în diferite concetratii și apoi supu se detectiei fluorescente.

12
4.Conceptul software

4.1. Algoritmul pentru procesarea de imagine

Algoritmul de procesare a imaginii presupune aplicarea următoarelor etape, demonstrate în
figura de mai jos folosind o implementare Matlab:
• Inversia (numai pentru imagini indirecte);
• Selectarea domeniilor de măsurare – al doilea element din rândul de sus al fiecărei probe,
fiind utilizate ca regiune de interes (ROIs) pentru măsura de intensitate;
• Se măsoară valoarea intensității folosind analiza hi stogramei;
• Se va interpola o curbă logistică cu 4 parametri prin punctele de măsurare și estimarea
parametrilor acestuia.

Pași urmați:

13
Aplicația mobilă :

.
1dadyb
cx

Parametrii curbei logistice indică un comportament bio -chimic care poate fi urmărit în scopul
aplicării.
În scopul de procesare, o aplicație dedicată este dezvoltată și va fi implementată pentru sistemele
comune de operare mobile.O aplicație funcțională d emonstrativă a fost dezvoltată înMATLAB și
un prototip pentru Android / iOS, cu interfață grafică prezentată în figurile anterioare.Aplicația
poate citi profunzimea culorii și rezoluția pentru cele mai multe formate, în caz contrar,
adâncimea de culoare ar putea fi introdusă manual sau în mod automat.

14
4.2. Detecție fluorescentă îmbunătățită , bazată pe dispozitive electronice simple

Biosenzorii actuali integrează pe același cip receptorii biologici (enzime, anti corpi) cu un
dispozitiv activ ca traductor. Prin urmare, cuplarea biomaterialelor la dispozitivele
semiconductoare este considerată o prima prioritate[1], permițând integrarea într -o zona minimă a
întregului lanț electrochimic și traductor. Efectele sunt: teste medicale invaziv minimale,
cantitatea mică de deșeuri, costuri reduse și aviabilitatea acestor dispozitive pentru îngrijirea la
domiciliu.
Recent, a fost raportat un biosenzor de glucoză bazat pe receptorul glucozoxidazei(GOX), prins
pe auto -asamblarea nanotuburilor de carbon[2] sau a TiO 2.
Pentru imobilizarea anticorpilor, literatura recomandă că strat intermediar grafenul. Am proiectat
și fabricat un tranzistor Bio -FET cu enzima GOX imobilizată pe nanotuburi de TiO 2.
În general, multe tipuri de elemente de detectare au fost înc orporate în biosenzori până în prezent
[5]:
• carbohidrați cu greutate moleculară mică, peptide, fragmente de nuclee
• acizi și derivați de coenzime
• polimeri sintetici si polielectroliti
• hibrizi de biomolecule, polimeri sintetici si poliadiacetilen bio chimic
• membrane
• enzime
• enzime modificate, enzime “cu fir” si holoenzime
• anticorpi
• receptori
• țesuturi
• organite
• celule
• microorganisme
De asemenea există o gama largă de categorii de traductori disponibile:[5]
• absorbție optică, fluoresc entă
• amperometric
• potențiometrică

15
• fotovoltaică de suprafată
• piezoelectric
• rezonanța plasmonului de suprafață
• conductometrice
• colorimerică
Senzorul standard implică un dispozitiv semiconductor care este cuplat la stratul bio -sensibil
pentru a detecta bio -moleculele ale căror sarcina intrinsecă are efect asupra conductivității
traductorului semiconductor. Când biomoleculele se leagă de recepto rii de suprafață ai
traductorului, distribuția încărcării la suprafață se modifică, modulând potențialul electrostatic
din semiconductor, așa cum se arată în figura 1 [6].

Figura 1. Schema unui senzor Bio -FET
Tranzistorul Bio -FET proiectat cu enzimă GOX imbolizată pe nanotuburi de TiO 2 se încadrează
în categoria optică, exploatând un efect de fluorescență. Avantajele sistemelor bazate pe
fluorescentă sunt sensibilitatea extremă și lipsa de deteriorare a sistemului gazdă[7]. Fenomenul
implică emisia de lumină după absorbția anterioară a unei anumite forme de radiații
electromagnetice, de obicei cu lumină emisă având o lungime de undă mai mare, deci o energie
mai mică decât radiația absorbită. În cazul de față, radiația absor bită este în regiunea UV a
spectrului, cu lumina emisă prezentând lungimi de undă în domeniul vizibil, adică în regiunea
verde a spectrului. Măsurarea fluorescenței se face utilizând camere CCD obișnuite de la
dispozitivele electronice comune, de exemplu t elefoanele mobile. Problema principala este că,
pentru ca biomarkerul rezultat să fie relevant, intensitatea fluorescenței în regiunea verde ar
trebui măsurată cu o rezoluție ridicată, fiind necesară pentru măsurarea câtorva ordine de
mărime. Acest lucru s e traduce printr -o adâncime de culoare mare, care necesită cel puțin 16 biți
(culoare înalta) pentru stocare și prelucrare ulterioară. Procesarea poate fi efectuată fie pe

16
dispozitivul respectiv (în cazul telefoanelor mobile care suportă sisteme de operare mobile
moderne), fie poate fi stocată și trimisă (prin email pentru telefoanele mobile care susțin
sistemele de operare moderne) pentru analize suplimentare.
Acest flux de lucru se bazează pe dispozitive electronice simple și exploatează flexibilitatea
găsită în telefoanele mobile moderne .
Pentru faza de prelucrare va fi necesară o matrice de 6×2 probe(fiecare formând 3×3 markeri), cu
diferite concentrații, fotografiile probelor rezultate ce prezintă fluorescență fiind extrase.
Algoritmul de procesare a imaginii presupune aplicarea următorilor pași, demonstrată în figura 2
utilizând o implementare Matlab:
• Inversia
• Selecția zonelor de măsurare – al doilea element din rândul de sus al fiecărui eșantion va
fi folosit că regiune de interes (ROI) pentru m ăsurarea intensității
• Măsurarea valorii intensității utilizând analiza histogramei
• Interpolarea unei curbe logistice cu 4 parametri prin punctele măsurate și estimarea
parametrilor
Rezoluția înaltă pe scală de gri este necesară pentru a face posibil pasul 4 al algoritmului,
adâncimea mare fiind crucială pentru determinarea corectă a parametrilor curbei logistice.

17

Figura 2. Pașii algoritmului de procesare pe eșantioane înregistrate

Parametrii curbei logistice indică comportamentul biochimic care po ate fi urmărit în descrierile
precendente în scopul aplicării.
În scopul procesării, este dezvoltată o aplicație dedicată și va fi implementată pentru sistemele de
operare mobile comune. O aplicație demonstrativă funcțională a fost dezvoltată înMatlab, cu
interfață grafică prezentată în Figura 3.
În aplicație este încărcat un fișier (majoritatea formatelor de imagine sunt acceptate) care este
apoi încărcat (butonul Load File), care prezintă probele fluorescente. Aplicația poate citi
adâncimea și rezoluția culorilor pentru majoritatea formelor, în caz contrar, adâncimea de
culoare poate fi introdusă manual. Apoi se aplică filtrul invers și se alege un număr de mostre , în
cazul de față 6. La comandă Start Processing, aplicația vă va solicită să selectați num ărul
respectiv de probe și le va arăta, precum și histogramele asociate probelor destinate măsurătorii.
Cu ajutorul cursorului de date valorile pot fi reglate manual și, pe butonul Compute LC, aplicația
va interpolă curba logistică de 4 parametri pe puncte le de măsurare a probelor și va afișa
parametrii estimați(intervale de încredere de 95%). Imaginea inițială cu eșantioane și toate
măsurătorile efectuate în aplicație pot fi transmise prin email celorlalți destinatari pentru o
analiză ulterioară.

18

Figura 3. Matlab GUI pentru aplicația dezvoltată

Concluziile sunt acelea că reiterează ideile privind testele medicale invaziv minimale,
cantitatea minimă de deșeuri , costurile reduse și aviabilitatea acestor dispozitive pentru
monitorizarea personală , în comun cu disponibilitatea și reutilizarea capacităților telefoanelor
mobile ce servesc pentru detecția și analiza probelor prelevate de la pacient .

4.3 Contribuții suplimentare în algoritmi
În paragrafele anterioare, am arătat cum este măsurată curba logistică experimentală și
algoritmul în 4 pași pentru extragerea parametrilor de către Matlab[14]. Pentru a e stima cu
exactitate cei 4 sau 5 parametri i ai curbei, pentru a avea o rezoluție înaltă pe scară de gri, se
aplică o metodă de căutare mai complexă , denumita Monte Carlo și algoritmi pentru înlăturarea
zgomotului. Citokinele marcate din aplicatia noastră apar in imagini ca pete de o claritate
scăzută , fără granițe distincte, dar cu intensitate mai mare față de fundal . Fiecare spot este
compus din Pn x Pm pixeli în acord cu o regiune dreptunghiulară dx x dy. Intensitatea luminii de
fluorescență măsurată este
))(u )(u. exp()m,n(B)m,n(LTT  150 [15] unde B (n, m)
reprezintă distribuția luminii în fundal, (n,m) este un pixel unde n apartine [1, Pn] si m apartine
[1, Pm], u este matricea de rotație a unghiului ;operatorii  si  sunt:




y mdyx ndx





22
00
minmax


19
unde o min si o max corespund marginilor blurate care se află în intervalul 20nm – 300nm pentru
microtubuli [7-15]. O strategie bună pentru minimizarea SNR provine din imaginea originală unde este
îndepărtat zgomotul L (n, m) printr -un kernel K Gaussian, prin intermediul operației de convoluție:
Apoi, pentru a estima cu exactitate parametrii curbei logistice, considerăm algoritmul Mont e
Carlo – recent reevaluat pentru detectarea fluorescenței [16]. Pentru testul de decizie Monte Carlo
cu eroare bidirecțională, probabilitatea de insuficiență poate fi redusă, executând algoritmul de k
ori și returnând răspunsurile principale.

4.4 Metode de optimizare asociate conceptului software
Contribuția noii aplica ții software constă într -o aplicație Matlab . Procesarea se poate face fie
într-o aplicație d esktop, fie pe telefonul mobil avand sistemul de operare Andr oid / iOS care
utilizeaza framework -ul Cordova.
Dacă valorile limită necesare pentru obținerea unor parametri mai relevanți ai curbei logistice
asociată unei scări de gri de înaltă rezoluție sunt extinse la un interval mai mare, algoritmul
Monte Carlo este cel adecvat. În timp ce răspunsul unui algoritm determinist este de așteptat să
fie întotdeauna corect, nu este cazul algoritmilor Monte Carlo. Prin urmare, pentru o decizie
finală, acești algoritmi sunt clasificați . Un algoritm Monte Carlo fals -părtinitor este întotdeauna
corect când se î ntoarce fals; Un algoritm adevărat -părtinitor este întotdeauna corect atunci când
se întoarce adevărat. În timp ce acest lucru descrie algoritmi cu erori unilaterale, alții ar putea să
nu aibă nici o prejudecată, generând erori . Răspunsul Monte Carlo cu adevărat sau fals va fi
incorect sau corect, într -un interval de probabilități.
Pentru un algoritm Monte Carlo cu erori unilaterale, probabilitatea de defectare poate fi redusă și
probabilitatea de succes a crescut, prin rularea algoritmului de k ori. Având în vedere algoritmul
Solovay -Strassen, care poate fi ½ fals si ½ corect, poate rula acest algoritm de mai multe ori
returnând un răspuns fals dacă ajunge la un acesta în cadrul celor k iterații, altfel retu rnează
adevărat. Prin urmare, dacă numărul este prim , răspunsul este întotdeauna corect și dacă numărul
este compus, răspunsul este corect cu probabilitatea cel puțin 1 – (1-½) k = 1-2-k.
Prin urmare, în această lucrare, metoda Monte Carlo urmează pașii următori:
– funcțiile de probabilitate pentru genera rea numere lor aleatorii;
– combinarea de parametri care urmează a fi generați;
– obținerea rezoluției necesare în estimările parametrilor;
– factorul de urmărit este RMSE (Remote Medium Square Error) cu scopul de a minimiza
eroarea .

20
Funcția analitică pentru a minimiza RMSE este:
  
 n
ii Exp i log )c( sAUC)c( sAUC RMSE
12

Definim curba logistică, sAUClog versus concentrația de citokine c, ca o curbă cu 4 sau 5
parametri care sunt asociati prin sAUCExp – curba de legare experimentală:
   2
3 10 42 1
1 )) )c( (log exp()c( sAUC log

unde parametrii de model care trebuie extrași cu eroare minimă sunt: 1, 2, 3, 4, eventual .
Această expresie matematică a curbei logistice este selectată în acord cu aceeași clasă de funcții
logice admise în bio -sisteme pentru analize imunologice similare [13].

21
4.5 Codul si documentația proiectului

În această secțiune vom expune codul programului nostru, precum și documentanția aferentă
fiecărei funcții folosite.

DetectorX.m

function varargout = DetectorX(varargin)
% Codul functiei DetectorX din Matlab pentru DetectorX.fig
% Funcția DetectorX, prin apelarea ei, creează un nou DetectorX
% H = DetectorX returnează starea către un nou DetectorX
% DetectorX( 'CALLBACK',hObject,eventData,handles,…) apelează funcția locală
% denumită CALLBACK în DetectorX.M cu argumentele de intrare dorite .
% DetectorX('Property','Value',…) creează un nou DetectorX
% Începând din stânga , perechile de valori ale proprietăților sunt
% aplicate interfeței grafice înainte că DetectorX_OpeningFcn să fie apelată . Un
% nume de proprietate nerecunoscut sau o valoare invalidă fac că aplicarea funcției să se
% oprească . Toate argumentele de la intrare sunt pasate funcției DetectorX_OpeningFcn prin
% varargin.
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, …
'gui_Singleton', gui_Singleton, …
'gui_OpeningFcn', @DetectorX_OpeningFcn, …
'gui_OutputFcn', @Detecto rX_OutputFcn, …
'gui_LayoutFcn', [] , …
'gui_Callback', []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end

22

if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_ mainfcn(gui_State, varargin{:});
end

% – Se execută numai înainte că DetectorX să fie vizibilă .
function DetectorX_OpeningFcn(hObject, eventdata, handles, varargin)
% Această funcție nu are argumente de ieșire , a se vedea OutputFcn .
% hObject folosit pentru a gestiona figura

handles.output = hObject;

% Actualizarea structurii gestionate
guidata(hObject, handles);

handles.loadfile = 0;

% UIWAIT face că DetectorX să aștepte pentru răspunsul utilizatorului.(a se vedea UIRESUME )
% uiwait(handles.figure 1);

function varargout = DetectorX_OutputFcn(hObject, eventdata, handles)
% vectorul de celule varargout pentru returnarea argumentelor de ieșire (a se vedea VARARGOUT);

varargout{1} = handles.output;
global loadfile
loadfile=0;

23
while 1 %bucla “while ” principală
pause(0.1);
set(handles.dialogueText,'string','Load image file with samples!');
if loadfile % aici se verifică dacă butonul pentru încărcarea imaginii este apăsat
cla(handles.measurementPlot1,'reset'); % se vor șterge plot-urile existente
cla(handles.lcPlot,'reset');
axis(handles.measurementPlot1,'auto');

set(handles.dialogueText,'string','Loading File…');
[image_name,PathName] = uigetfile('*.tif','Select an image file with samples') ;

%% În cele ce urmează are loc încărcarea imaginii urmată de
%%extragerea extensiei acesteia
extension = image_name(strfind(image_name,'.')+1:end);

% se va citi imaginea având extensia potrivită
image = imread(image_name, extension);

% Partea de cod de mai jos extrage informațiile relevante legate de diferențierea imaginii
nfo=whos('image');
imclass=nfo.class;
classdigits = isstrprop(imclass,'digit');

% Se verifică dacă imaginea este de tip uintx și extrage x sau sau se încheie dacă imaginea
% este necorespunzătoare
%% Secvență de mai jos prezintă procesarea propriu -zisă de imagine
if any(classdigits)

bits = str2double(imclass(classdigits));% extragerea adâncimii de culoare[ biți]
else

24
bits = 16; % valoare implicită pentru adâncimea de culoare
end%if
while ~get(handles.startButton,'Value'); % verifică dacă butonul de pornire este inactiv
filter_type=get(handles.filterMenu,'Value'); % În această secvență se obține tipul de filtru
%% Pre -procesare – Filtre
switch filter_type
case 1
invImage = image;
axes(handles.framePlot);
imshow (invImage,[])
case 2
invImage = 2^bits – 1 – image;
axes(handles.framePlot);
imshow (invImage,[])
otherwise
disp('Unknown filter type!');
return
end%switch
TemplateData=struct;

% În rândurile următoare se afișează adâncimea de culoare [biți] și se face
% posibilă setarea acesteia
end%while
while get(handles.startButton,'Value'); % se verifică dacă butonul de pornire este activ
nSamples =get(handles.nTemplates,'Value')+3; % initializare pentru nSampples
% deoarece începe în mod implicit de la 1
set(handles.dialogueText,'string',['Select the ', num2str(nSamples), ' Samples!']);
samplesRect = cell(0,nSamples);
samplesData = cell(0,nSamples);
otsuThresh = cell(0,nSamples);

25
histData = cell(0,nSamples);
xVals = cell(0,nSamples);
minData = cell(0,nSamples);
histXaxis = cell(0,nSamples);
%figure;
if isnumeric (nSamples)
for i=1:nSamples
samplesRect{i} = getrect(); % fereastra dreptunghiulară care a fost selectată
samplesData{i} = invImage(samplesRect{i}(2):samplesRect{i}(2)+samplesRect{i}(4) –
1,samplesRect{i}(1):samplesRect{i}(1)+samplesRect{i}(3) -1); % datele imaginii actuale din fereastră
histData{i} = imhist(samplesData{i}); % calculează histrograma pentru ferestrele selectate
x1=double(min(min(samplesData{i})));
x2=double(max(max(samplesData{i})));
histXaxis{i } = x1:(x2 -x1)/255:x2;
end%for
%% Afisarea ferestrelor selectate
startXpoint = 312.5;

for i=1:nSamples
eval(['axes(handles.samplesPlot',num2str(i),')']);
imshow(samplesData{i});
pause(0.5)
eval(['axes(handles.measurementPlot',num2str(i),')']);
plot(histXaxis{i}, histData{i});
pause(0.5)
%% Procesarea valorilor intensității care vor fi utilizate pentru calcule
% ulterioare, folosind aici pragul Otsu și valorile axei x
otsuThresh{i} = graythresh(samplesData{i})*max(max(samplesData{i}));
minData{i} = min(min(samplesData{i}));
xVals{i}= startXpoint*2^(i -1);

26
end%for
xVals = cell2mat(xVals);
otsuThresh = sort(cell2mat(otsuThresh)); % selectarea ferestrelor s -a făcut aleatoriu
minData = sort(cell2mat(minData))
Gex=[230 512 988 3951 12876 25817]; % exemple de eșantioane
end%if
% Aici se pregătește celula de șiruri de caractere pentru a fi afișată
% regăsirea posibilelor valori în valorile listei de eșantioane
for i=1:length(otsuThresh)
otsuThresh_cell{i}=num2str(otsuThresh(i));
minData_cell{i} = num2str(minData(i));
end
set(handles.samplesLis t_vals,'string',otsuThresh_cell);

%% În secvențele următoare de cod se vor calcula parametrii funcției logistice
[cfo Go] = L4P(xVals,otsuThresh) % interpolarea funcției logistice pe baza valorilor pragului
Otsu
%[cfm Gm] = L4P(xVals,minData) % interpolarea funcției logistice pentru valori minime
[cfex Gexe] = L4P(xVals, Gex)% interpolarea funcției logistice pentru exemplul dat
%% Se va afișa curbă logistică rezultată (s)
xAx = 0:0.1:10000;
yAxo = cfo.D + (cfo.A – cfo.D)./(1+(xAx/cfo.C).^cfo.B);
yAxex = cfex.D + (cfex.A – cfex.D)./(1+(xAx/cfex.C).^cfex.B);

axes(handles.lcPlot);
plot(xAx,yAxex);
hold on
plot(xVals,Gex,'or');
hold off

27

% parametrii predefiniți
lcparam_string{1}=' General model:'
lcparam_string{2}=' cfex(x) = D+(A -D)/(1+(x/C)^B)'
lcparam_string{3}=' Coefficients (with 95% confidence bounds):'
lcparam_string{4}=' A = 233.9 ( -84.82, 552.6)'
lcparam_string{5}=' B = 2.265 (1.972, 2.558)'
lcparam_string{6}=' C = 6427 (5690, 7164)'
lcparam_string{7}=' D = 3.522e+04 (3.141e+04, 3.902e+04)'

set(handles.lcLis t_vals,'string',lcparam_string)
if 0
b=5;
padding=[ -b,b;-b,b];
try
TempPos1=TempPos1+padding;
TempPos2=TempPos2+padding;
TempPos3=TempPos3+padding;
TempPos4=TempPos4+padding;
catch ME
end%try

try
% Inițializare structura template
center=[TempPos1(1,1)+TempPos1(1,2) -1 TempPos1(2,1)+TempPos1(2,2) -1]/2;
TemplateData(1).p=[0 0 0 0 center(1) center(2)];
TemplateData(1).image=I(TempPos1(1,1):TempPos1(1,2),TempPos1(2,1):TempPos1(2,2));
TemplateData(1).temp_pos=TempPos1;

end%try

28

cmap=hot(256);

%% Analiza frame cu frame
for i=1:size(Vmovie,3)
% frame -ul i
I = double(Vmovie(:,:,i))*(1/255);

% Traching după toate templat e-urile folosind metodă corelației în sens
% de normă frobenius a diferenței dintre imagine și template
displacements=[];
for t=1:length(TemplateData)
[ output_template, di splacement_x, displacement_y ] = do_correlation_image( I,
TemplateData(t), max_displacement_x, max_displacement_y );
output_templates(t)=output_template;
displacements=[displacements;displacement_x, displacement_y];
end
TemplateData=output_templates;
% Afișare frame și rezultate
if(i==1), axes(handles.framePlot), handle_imshow=imshow(I); hold on
else
for t=1:length(TemplateData), delete(h(t)); end;
set(handle_imshow,'Cdata',I);
end

% Afișare poziții template -uri
for t=1:length (TemplateData)

h(t)=plot(TemplateData(t).p(6),TemplateData(t).p(5),'go','MarkerFaceColor',cmap(round(t*255/length(T
emplateData))+1,:));

29
title(['X: ', num2str(mean(displacements(:,1))),' Y: ',num2str(mean(disp lacements(:,2))),'
stdX: ', num2str(std(displacements(:,1))), ' stdY: ', num2str(std(displacements(:,2)))])
drawnow

end

if i==1 %prima masuratoare tratata ca atare
x_results(i)=mean(displacements(:,1));
y_results(i)=mean(displacements(:,2));
else
x_results(i)=x_re sults(i -1)+mean(displacements(:,1));
y_results(i)=y_results(i -1)+mean(displacements(:,1));

plot(handles.measurementPlot1,x_results(1:end -1),-y_results(1:end -1),'*');
hold on
plot(handles.measurementPlot1,x_results(end), -y_results(end),'*r');
hold off

set(handles.measurementPlot1,{'ycolor'},{'w'});
set(handles.measurementPlot1,{'xcolor'},{'w'});
stdx_results(i)=std(displacements(:,1));
stdy_results(i)=std(displacements(:,2));
plot(handles.lcPlot,stdx_results(1:end -1),stdy_re sults(1:end -1));
% hold on
plot(handles.lcPlot,stdx_results(end),stdy_results(1:end),'*r');
% hold off

set(handles.lcPlot,{'ycolor'},{'w'});
set(handles.lcPlot,{'xcolor'},{'w'});
pause(0.25) %aceasta pauza este folosita pentru pastrarea imaginii vizuale

30
end%if
end%for

set(handles.startButton,'Value',0); %toggle the start button
loadfile=0;
end%mockif
end%while
end%if
end%while

%% Callbacks pentru interfață grafică de utilizator
% – Se execută la apăsarea butonului noFilterButton .
function noFilterButton_Callback(hObject, eventdata, handles)
% hObject folosit pentru a gestiona noFilterButton
% get(hObject,'Value') returnează starea comutării butonului noFilterButton

% – Se va execută la apăsarea butonului gaussianFilterButton .
function gaussianFilterButton_Callback(hObject, eventdata, handles)

%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function radiobutton3_Callback(hObject, eventdata, handles)

%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function radiobutton4_Callb ack(hObject, eventdata, handles)

function mainSlider_Callback(hObject, eventdata, handles)

% get(hObject,'Value') returnează poziția cursorului

31
% get(hObject,'Min') si get(hObject,'Max') pentru a determina gama cursorului

function mainSlider_ CreateFcn(hObject, eventdata, handles)
% handles – sunt create decât după ce toate CreateFcns au fost apelate

% Comenzile glisante au de obicei un fundal gri deschis
if isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor',[.9 .9 .9]);
end

% –––––––––––––––––––––––
function uipushtool1_ClickedCallback(hObject, eventdata, handles)

function filterMenu_Callback(hObject, eventdata, handles)

% contents = cellstr(get(hObject,'String')) returnează continului filterMenu ca vector de celule
% contents{get(hObject,'Value')} returnează elementul selectat din filterMenu

function filterMenu_CreateFcn(hObject, eventdata, handles)

if ispc && isequal(g et(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end

function maxDisplacementText_Callback(hObject, eventdata, handles)
% hObject parametru folosit pentru gestionarea maxDisplacementText

32
% get(hObject,'String') returnează conținutul maxDisplacementText ca și text
% str2double(get(hObject,'String'))
%returnează conținutul maxDisplacementText ca și număr real în dublă precizie
.
function maxDisplacementText_CreateFcn (hObject, eventdata, handles)

if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end

% – Se execută la modificarea selecției în nTemplates .
function nTemplates_ Callback(hObject, eventdata, handles)

% contents = cellstr(get(hObject,'String')) returnează conținutul pentru nTemplates
% contents că și vector de celule
% contents{get(hObject,'Value')} returnează elementul selectat din nTemplates

function nTemplate s_CreateFcn(hObject, eventdata, handles)

if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end

function maxFrames_Callback(hObject, eventdata, handles)

function maxFrames_CreateFcn(hObject, eventdata, handles)

33
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
.
function startButton_Callback(hObject, eventdata, handles)

% get(hObject,'Value') returnează starea de comutare a startButton

function framePlot_CreateFcn(hObject, eventdata, handles)

% plasarea codului în OpeningFcn pentru a popula framePlot

function dialogueText_Callback(hObject, eventdata, handles)

function dialogueText_CreateFcn(hObject, eventdata, handles)

if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end

function loadFileButton_Callback(hObject, eventdata, handles)

global loadfile
loadfile=1;

%% Implementarea corelației principale
function [ output_template, displacement_x, displacement_y ] = do_correlation_image( image,
input_template, max_displacement_x, max_displacement_y )
% Funcția calculează prin metodă corelației deplasarea și nouă poziție a

34
% template -ului de input
% max_displacement_x = 10; %pixels
% max_displacement_y = 10; %pixels
displacement_x = 0;
displacement_y = 0;
corr_result=inf;
v=[];
ii=1; jj=1;
for i=max(input_template.temp_pos(1,1) –
max_dis placement_x,1):min(input_template.temp_pos(1,1)+max_displacement_x,size(image,1))
for j=max(input_template.temp_pos(2,1) –
max_displacement_y,1):min(input_template.temp_pos(2,1)+max_displacement_y, size(image,2))
im_template=image(i:i+size(input_ template.image,1) -1,j:j+size(input_template.image,2) -1);
corr_result2=norm(input_template.image -im_template, 'fro');
v=[v, corr_result2];
if corr_result2 < corr_result
corr_result=corr_result2;
ii=i;
jj=j;
end%if
end%for
end%for
displacement_x=ii -input_template.temp_pos(1,1)
displacement_y=jj -input_template.temp_pos(2,1)
output_template.image = image(ii:ii+size(input_template.image,1) -1,jj:jj+size(input_template.image,2) –
1);
output_ template.temp_pos(1,1)=ii;
output_template.temp_pos(2,1)=jj;
output_template.temp_pos(1,2)=ii+size(output_template.image,1) -1;
output_template.temp_pos(2,2)=jj+size(output_template.image,2) -1;
center=[output_template.temp_pos(1,1)+output_template.temp_pos( 1,2)-1
output_template.temp_pos(2,1)+output_template.temp_pos(2,2) -1]/2;

35
output_template.p=[0 0 0 0 center(1) center(2)];
%figure
%plot(v);
% ff1=xcorr2(double(image),double(input_template.image)); % corelație 2-D
% clasică , corelează orice template cu zon ele deschise din imagine
% [a1,b1]=find(ff1==max(max(ff1))) % maximul corelației
% output_template=[];

%% Implementarea corelației anterioare
function [ output_template, displacement_x, displacement_y ] = do_correlation( image, input_template
)
% Funcția calculează prin metodă corelației deplasarea și nouă poziție a
% template -ului de input
max_displacement_x = 10; %pixels
max_displacement_y = 10; %pixels
displacement_x = 0;
displacement_y = 0;
ff1=xcorr2(double(image),double(input_template.image)); %core latie 2 -D
[a1,b1]=find(ff1==max(max(ff1))) % maximul corelatiei
output_template=[];

function samplesList_vals_Callback(hObject, eventdata, handles)

function samplesList_vals_CreateFcn(hObject, eventdata, handles)

if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end

function computeLC_button_Callback(hObject, eventdata, handles)

36

function lcList_vals_Callback(hObject, eventdata, handles)

function lcList_vals_CreateFcn(hObject, eventdata, handles)

if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
L4P.M
%% Funcția logistică de 4 parametri
function [cf G]=L4P(x,y,varargin)
% L4P Regresie logistică de 4 parametri
% Regresia logistică de 4 parametri sau modelul 4PL nonlinear de regresie
% este utilizat în mod obișnuit pentru analiză de contrucție a curbei în bioteste sau imunoteste
% Se caracterizează prin clasicitatea să “S‿ sau formă sigmoidala care se potrivește
% cu limitele inferioare și superioare ale curbei, EC50, și factorul pantei
% (Hill slope). Această curbă este simetrică în jurul punctului său de inflexiune .
% Ecuatia 4PL este:
% F(x) = D+(A -D)/(1+(x/C)^B)
% unde:
% A = Minimul asimptotei. Într-un biotest în care avem o curbă standard ,
% acest lucru poate fi considerat că fiind valoarea răspunsului la concentrația standard 0.
%
% B = Factorul pantei . Factorul pantei se referă la adâncimea curbei .
% Poate fi pozitivă sau negativă .
%
% C = Punct de inflexiune. Punctul de inflexiune este definit ca punctul de pe
% curbă unde curbură își schimbă direcția sau semnele. C este
% concentrația analitului unde y=(D -A)/2.
%

37
% D = Maximul asimptotei. Intr-un biotest in care avem o curba standard,
% Acest lucru poate fi considerat drept valoare de răspuns pentru
% concentrația standard infinită

%
% Sintaxa: [cf G]=L4P(x,y,st,L,U)
%
% Argumetele de intrare:
% X si Y (obligatorii) – Punctel e asociate datelor.
% X este vectorul coloanei Nx1 si Y trebuie să aibă același număr de rânduri
% ca si X. Daca Y este o matrice NxM matrix (N puncte si M replicate), L5P
% va genera un mijloc de calcul vectorial pentru fieca re rând.
% Deviațiile standard ale rândurilor vor fi
% folosite ca repere de regresie.
%
% st = puncte de plecare. Acesta este un vector de 1×4 puncte de pornire
% care trebuie utilizate pentru a începe procesul de montare
% neliniară. Dacă acest vector nu este furnizat, L4P va seta
% punctelor de pornire pe baza datelor provenite de la x și y.
%
% L = Limitele inferioare ale parametrilor. Acesta este un vector de 1×4 al limitelor
% inferioare ale celor 4 parametri. Dacă acest vector nu este furnizat, L4P îl va
% stabili pe baza datelor provenite de la x și y.
%
% U = Limitele superioare ale parametrilor. Acesta este un vector 1×4 al limitelor
% superioare ale celor 4 parametri. Dacă acest vector nu este furnizat, L4P
% il va stabili pe baza datelor provenite de la x și y.
%
% Argumente de iesire:
% cf = obiectul FIT

38
% G = goodness -of-fit measures, pentru parametrii de in trare dați, în
% structura G. G se vor include campurile:
% – SSE Suma pătratelor returnate din cauza erorii
% – R2 coeficient de determinare sau R^2
% – adjustedR2 gradul de libertate ajustat R ^2
% – stdError eroarea medie pătrată
%
% Exemplu:
%
% x=[0 4.5 10.6 19.7 40 84 210]; y=[0.0089 0.0419 0.0873 0.2599 0.7074 1.528 2.7739];
%
% Apelarea funcției MatLab: [cf G]=L4P(x,y)
%
% Răspunsul este:
%
% cf =
%
% Modelul general:
% cf(x) = D+(A -D)/(1+(x/C)^B)
% Coeficienți (cu 95% limita de încredere):
% A = 0.001002 ( -0.04594, 0.04794)
% B = 1.515 (1.293, 1.738)
% C = 108 (86.58, 129.4)
% D = 3.784 ( 3.302, 4.266)
%
% G =
%
% sse: 0.0012
% rsquare: 0.9998
% dfe: 3

39
% adjrsquare: 0.9996
% rmse: 0.0200
%
% hold on; plot(x,y,'ro'); plot(cf,'r'); hold off
% Aceasta va afișa curba.

%––––––– Gestionar ea sectiunii erorilor de intrare ––––––––-
if nargin < 2
error('Almost X and Y vectors are required')
end

x=x(:);
if ~isvector(x)
error('X must be a column vector')
end

% Dacă y este o matrice, mijloacele de calcul și deviații standard vor fi expuse in secvențele următoare
we=zeros(size(x));
if ~isvector(y)
we=std(y,0,2);
y=mean(y,2);
end
y=y(:);

if size(x)~=size(y)
error('X and Y must have the same raws numbe r')
end

ok_ = isfinite(x) & isfinite(y);
if ~all( ok_ )

40
warning('L4P:IgnoringNansAndInfs','Ignoring NaNs and Infs in data.');
end

% Pentru a calcula cei 4 parametri vom avea nevoie de 4 puncte
if length(x(ok_))<4
warning('L4P:NotEnoughData', 'Not enough Data points')
end

% setați sau verificați datele de intrare opționale
args=cell(varargin);
nu=numel(args);
default.values = {[],[],[]};
default.values(1:nu) = args;
[st_ L U] = deal(default.values{:});

%Setarea punctelor de pornire:
% A este asimptota inferioară, deci o asociem cu min(y)
% B este factorul de pantă , așa că o asociem cu panta liniei dintre primul și ultimul punct.
% C este punctul de inflexiune (concentrația de analit în cazul în care aveți
% jumatate din răspunsul maxim) așa că o asociem cu găsirea concentrației a l cărei răspuns
% este cel mai apropiat de răspunsul mediu.
% D este asimptota superioară, deci o asociem cu max(y)

slope=(y(end) -y(1))/(x(end) -x(1));
if isempty(st_)
[~,Idx]=min(abs((y -((max(y) -min(y))/2))));
st_=[min(y) sign(slope) x(Idx) max(y)];
else
st_=st_(:)';
if length(st_)~=4

41
error('Starting points array must be a 1×4 array')
end
end

%Setarea limitelor. Desigur, toate limitele inferioare sunt 0 și toate limitele superioare sunt
%Inf. Oricum, dacă panta este negativă, limita inferioară a lui B este -Inf si
% limita superioară este 0.

if isempty(L)
L=zeros(1,4);
if slope<0
L(2)= -Inf;
end
else
L=L(:)';
if length(L)~=4
error('Lower bounds array must be a 1×4 array')
end
end

if isempty(U)
U=Inf(1,4);
if slope<0
U(2)=0;
end
else
U=U(:)';
if length(L)~=4
error('Upper bounds array must be a 1×4 array')
end

42
end
clear args default nu slope Idx

%–––––- ––––- Asocierea datelor –––––––––––
fo_ = fitoptions('method','NonlinearLeastSquares','Lower',L,'Upper',U);
set(fo_,'Startpoint',st_);
if all(we) % Dacă y a fost o matrice folosiți std că referințe pentru montare
set(fo_,'We ights',we);
end
ft_ = fittype('D+(A -D)/(1+(x/C)^B)',…
'dependent',{'y'},'independent',{'x'},…
'coefficients',{'A', 'B', 'C', 'D'});
[cf G] = fit(x(ok_),y(ok_),ft_,fo_);
end%function
processing_algo.m
function processing_algo(image_name)
%Implementarea algoritmului de procesare sugerat pentru o imagine
%Exemplu de apel: processing_algo('mozaic.tif')
warning('off','all');
%% Încărcarea imaginii
%extragerea extensiei
extension = image_name(strfind(image_name,'.')+1:end);

%Citiți imaginea cu extensia corespunzătoare
image = imread(image_name, extension);

% Extrage informației relevante despre imagine
nfo=whos('image');
imclass=nfo.class;
classdigits = isstrprop(imclass,'digit');

43

%Verificați dacă imaginea este de tip uintx și extrageți x sau incheiati dacă este necorespunzătoare
%% Procesarea imaginii
if any(classdigits)
try
bits = str2double(imclass(classdigits));% extragerea adâncimii de culoare la nivel de bit

%% Inversați imaginea și afișați -o
invImage = 2^bits – 1 – image;
figure
imshow(invImage);
%% Selectați numărul de mostre și în funcție de ROI
nSamples = input('Input the number of samples to be analyzed: ');
samplesRect = cell(0,nSamples);
samplesData = cell(0,nSamples);
otsuThresh = cell(0,nSamples);
histData = cell(0,nSamples);
xVals = cell(0,nSamples);
minData = cell(0,nSamples);
histXaxis = cell(0,nSamples);
%figure;
if isnum eric (nSamples)
for i=1:nSamples
samplesRect{i} = getrect(); % fereastră care a fost selectată
samplesData{i} = invImage(samplesRect{i}(2):samplesRect{i}(2)+samplesRect{i}(4) –
1,samplesRect{i}(1):samplesRe ct{i}(1) +samplesRect{i}(3) -1);
histData{i} = imhist(samplesData{i}); % Calculați histograma pentru ferestrele
%selectate
x1=double(min(min(samplesData{i})));
x2=double(max(max(samplesData{i})));
histXaxis{i} = x1:(x2 -x1)/255:x2;

44
end%for
%% Afișați ferestrele selectate
startXpoint = 312.5;
figure
for i=1:nSamples
subplot(6,2,2*i -1);
imshow(samplesData{i});
subplot(6,2,2*i);
plot(histXaxis{i}, histData{i});
%% Procesați valorile intensității care vor fi utilizate pentru calcule ulterioare, folosind

%%aici pragul Otsu și valorile axei x

otsuThresh{i} = graythresh(samplesData{i})*max(max(samplesData{i}));
minData{i} = min(min(samplesData{i}));
xVals{i}= startXpoint*2^(i -1);
end%for
xVals = cell2mat(xVals);
otsuThresh = sort(cell2mat(otsuThresh)); % selectarea ferestrelor a fost făcută

%aleatoriu

minD ata = sort(cell2mat(minData));
Gex=[230 512 988 3951 12876 25817];
%% calculați parametrii funcției logistice

[cfo Go] = L4P(xVals,otsuThresh) % Interpoleaz ă funcția logistică pe valorile pragului Otsu
%[cfm Gm] = L4P(xVals,minData) % Interpoleaz ă funcția logistică pe valorile minime
[cfex Gexe] = L4P(xVals, Gex)% Interpoleaz ă funcția logistică pe exemplul dat
%% trasarea curbei logistice rezultată(s)

xAx = 0:0.1:10000;
yAxo = cfo.D + (cfo.A – cfo.D)./(1+(xAx/cfo.C).^cfo.B);
yAxex = cfex.D + (cfex.A – cfex.D)./(1+(xAx/cfex.C).^cfex.B);
figure

45
plot(xAx,yAxo);
hold on
plot(xVals,otsuThresh,'or');
hold off
figure
plot(xAx,yAxex);
hold on
plot(xVals,Gex,'or');
hold off
else
disp('Number of samples is expected to be numeric, application closing…');
pause(5);
return
end%if
catch ME
disp(ME.message);
disp('Application closing…');
pause(5);
end%try

else
disp('Could not determine the color depth, application closing…');
pause(5);
return
end%if
end

%% funcția logistică de 4 parametri
function [cf G]=L4P(x,y,varargin)
% L4P Regresie logistică de 4 parametri

46
% Regresia logistică de 4 parametri sau modelul 4PL nonlinear de regresie
% este utilizat în mod obișnuit pentru analiză de contructie a curbei în bioteste sau imunoteste
% Se caracterizează prin clasicitatea să “S‿ sau formă sigmoidala care se potrivește
% cu limitele inferioare și superioare ale curbei, EC50, și factorul pantei
% (Hill slope). Această curbă este simetrică în jurul punctului său de inflexiune .
% Ecuatia 4PL e ste:
% F(x) = D+(A -D)/(1+(x/C)^B)
% unde:
% A = Minimul asimptotei. Într-un biotest în care avem o curbă standard ,
% acest lucru poate fi considerat că fiind valoarea răspunsului la concentrația standard 0.
%
% B = Factorul pantei . Factorul pantei se referă la adâncimea curbei .
% Poate fi pozitivă sau negativă .
%
% C = Punct de inflexiune. Punctul de inflexiune este definit ca punctul de pe
% curbă unde curbură își schimbă direcția sau semnele. C este
% concentrația analitului unde y=(D -A)/2.
%
% D = Maximul asimptotei. Intr -un biotest in care avem o curba standard,
% Acest lucru poate fi considerat drept valoare de răspuns pentru
% concentrația standard infinită

%
% Sintaxa: [cf G]=L4P(x,y,st,L,U)
%
% Argumetele de intrare:
% X si Y (ob ligatorii) – Punctele asociate datelor.
% X este vectorul coloanei Nx1 si Y trebuie să aibă același număr de rânduri
% ca si X. Daca Y este o matrice NxM matrix (N puncte si M replicate), L5P
% va genera un mijloc de calcul ve ctorial pentru fiecare rând.

47
% Deviațiile standard ale rândurilor vor fi
% folosite ca repere de regresie.
%
% st = puncte de plecare. Acesta este un vector de 1×4 puncte de pornire
% care trebuie utilizate pentru a începe pr ocesul de montare
% neliniară. Dacă acest vector nu este furnizat, L4P va seta
% punctelor de pornire pe baza datelor provenite de la x și y.
%
% L = Limitele inferioare ale parametrilor. Acesta este un vector de 1×4 al li mitelor
% inferioare ale celor 4 parametri. Dacă acest vector nu este furnizat, L4P îl va
% stabili pe baza datelor provenite de la x și y.
%
% U = Limitele superioare ale parametrilor. Acesta este un vector 1×4 al limitelor
% superioare ale celor 4 parametri. Dacă acest vector nu este furnizat, L4P
% il va stabili pe baza datelor provenite de la x și y.
%
% Argumente de iesire:
% cf = obiectul FIT
% G = goodness -of-fit measures, pentru p arametrii de intrare dați, în
% structura G. G se vor include campurile:
% – SSE Suma pătratelor returnate din cauza erorii
% – R2 coeficient de determinare sau R^2
% – adjustedR2 gradul de libe rtate ajustat R^2
% – stdError eroarea medie pătrată
%
% Exemplu:
%
% x=[0 4.5 10.6 19.7 40 84 210]; y=[0.0089 0.0419 0.0873 0.2599 0.7074 1.528 2.7739];
%
% Apelarea funcției MatLab: [cf G]=L4P(x,y)

48
%
% Răspunsul este:
%
% cf =
%
% Modelul general:
% cf(x) = D+(A -D)/(1+(x/C)^B)
% Coeficienți (cu 95% limita de încredere):
% A = 0.001002 ( -0.04594, 0.04794)
% B = 1.515 (1.293, 1.738)
% C = 108 (86.58, 129.4)
% D = 3.784 (3.302, 4.266)
%
% G =
%
% sse: 0.0012
% rsquare: 0.9998
% dfe: 3
% adjrsquare: 0.9996
% rmse: 0.0200
%
% hold on; plot(x,y,'ro'); plot(cf,'r'); hold off
% Aceasta va afișa curba.

%––––––– Gestio narea erorilor argumentelor de intrare ––––––––-
if nargin < 2
error('Almost X and Y vectors are required')
end

x=x(:);

49
if ~isvector(x)
error('X must be a column vector')
end

%Dacă y este o matrice, mijloac e de calcul și deviații standard sunt expuse in secvențele de mai jos
we=zeros(size(x));
if ~isvector(y)
we=std(y,0,2);
y=mean(y,2);
end
y=y(:);

if size(x)~=size(y)
error('X and Y must have the same raws number')
end

ok_ = isfinite(x) & isfinite(y);
if ~all( ok_ )
warning('L4P:IgnoringNansAndInfs','Ignoring NaNs and Infs in data.');
end

if length(x(ok_))<4
warning('L4P:NotEnoughData','Not enough Data points')
end

%Setați sau verificați datele de intrare opționale
args=cell( varargin);
nu=numel(args);
default.values = {[],[],[]};
default.values(1:nu) = args;

50
[st_ L U] = deal(default.values{:});

%%Setarea punctelor de pornire:
% A este asimptota inferioară, deci o asociem cu min(y)
% B este factorul de panta, așa că o asociem cu panta liniei dintre primul și ultimul punct.
% C este punctul de inflexiune (concentrația de analit în cazul în care aveți
% jumatate din răspunsul maxim) așa că o asociem cu găsirea concentrației a cărei răspuns
% este cel mai apropiat de răspunsul mediu.
% D este asimptota superioară, deci o asociem cu max(y)

slope=(y(end) -y(1))/(x(end) -x(1));
if isempty(st_)
[~,Idx]=min(abs((y -((max(y) -min(y))/2))));
st_=[min(y) sign(slope) x(Idx) max(y)];
else
st_=st_(:)';
if length(st_)~=4
error('Starting points array must be a 1×4 array')
end
end

%Setarea limitelor. Desigur, toate limitele inferioare sunt 0 și toate limitele superioare sunt
%Inf. Oricum, dacă panta este negativă, limita inferioară a lui B este -Inf si
% limita superi oară este 0.

if isempty(L)
L=zeros(1,4);
if slope<0
L(2)= -Inf;
end

51
else
L=L(:)';
if length(L)~=4
error('Lower bounds array must be a 1×4 array')
end
end

if isempty(U)
U=Inf(1,4);
if slope<0
U(2)=0;
end
else
U=U(:)';
if length(L)~=4
error('Upper bounds array must be a 1×4 array')
end
end
clear args default nu slope Idx

%–––––––––– Asocierea datelor –––––––––––
fo_ = fitoptions('method',' NonlinearLeastSquares','Lower',L,'Upper',U);
set(fo_,'Startpoint',st_);
if all(we) % Dacă y a fost o matrice folosiț i std ca reper pentru construc ție
set(fo_,'Weights',we);
end
ft_ = fittype('D+(A -D)/(1+(x/C)^B)',…
'dependent',{'y'},'independent ',{'x'},…
'coefficients',{'A', 'B', 'C', 'D'});
[cf G] = fit(x(ok_),y(ok_),ft_,fo_);

52
5. Rezultate și discuții
Curba de legare experimentală măsoară funcția sAUCExp față de concentrația de citokină
marcată, c, pentru două sonde de imunotestare. Pentru a monitoriza sAUC, se iau în considerare
două diluții ale anticorpului de captură pentru citokine: (i) diluții vari abile între 125 -16000 pg /
ml (VarDil); Și (ii) diluție constantă de 500 pg / ml (CtDil). Rata de înțelegere a factorului sAUC
este definit ă astfel: scalarea în jos a curbei de legare are valori între 0 -1, urmată de o integrare a
curbei de legare pentru a estima aria ASC de sub curbă, urmată de scalarea acestei zone la
intensitatea medie de fluorescență Pentru a obține – sAUC.
Apoi, algoritmul Monte Carlo este aplicat repetitiv pentru parametrii diferiți (setați) i, generând
un spațiu de erori evolutive, fi g. 3. Curba lo gistică evoluează spre curba ex perimentală din fig. 4,
etichetat ă cu "Experim".

Fig. 3. Spațiul erorilor generat după iterația I prin algoritmul Monte Carlo; Simulări Matlab.
Figura 4. stânga , prezintă rezultatele căutării finale pentru caz ul (VarDil) (i) și câteva seturi de parametri i
intermediari (set) 0, 1, 2, 3, în timpul rulării algoritmului RMSE. Parametrii sunt: 1 = 896.3009; 2 =
30266.02; 3 = 9.0796; 4 = 1.4142;  = 311.56, pentru (set) 0 atunci când eroarea funcțională este
ridicată RMSE = 571. Acestea sunt extrase optim pentru: 1 = 96,3; 2 = 30266.02; 3 = 12.17; 4 =
3,142;  = 381.558, pentru (set) 3, atunci când funcția de eroare este redusă la RMSE = 4.9, f ig. 4.

Fig. 4. Reprezentarea axei liniare verticale sAUC, față de concentrația de citokină [pg / ml] pe axa
orizontal a a reprezentarii logaritmice .
În mod similar, figura 4. dreapta, prezintă rezultatele căutării finale pentru cazul (ii) (CtDil).
Param etrii sunt: 1 = 120.609; 2 = 17934.1; 3 = 6.9491; 4 = 1.0489;  = 0,011 pentru (set) 0
atunci când eroarea funcțională este ridicată RMSE = 629,9. Acestea sunt extrase optim pentru:
1 = 20,6; 2 = 17234.08; 3 = 8,9; 4 = 2.9532;  = 0.011, pentru (set) 3, atunci când funcția

53
de eroare este redusă la RMSE = 2.4, fig. 5. Aplicația telefon mobil instalată este prezentată în
fig. 6.

Fig. 6. Aplicația pentru telefonul mobil Meningitis .

6.Concluzii
În această lucrare, studiul a pornit de la diagnosticul diferențial al meningitei bacteriene, de către
un sistem mobil, complementar unui algoritm implementat în Matlab. Această soluție poate fi
ușor pusă în practică în orice cabinet clinic pentru realizar ea unei intervenții rapide și eficace a
echipei medicale, oferind un diagnostic realist privind prezența sau absența bacteriei numită
meningită, această fiind semnalizată prin citokine. Procesul de lucru propus a fost bazat pe
semnalul optic folosit pentru iluminarea eșantionului, urmat apoi de dezvoltarea unei aplicații
mobile pe telefonul Apple i -Phone 4, folosind camera acestuia pentru achiziționarea imaginilor.
Apoi, aplicația Matlab în patru pași a fost integrată pentru a oferi o prelucrare software câ t mai
exactă a imaginlor. Aplicația dezvoltată a interpolat o curbă logistică de 4 parametri extrași pe
eșantioanele punctelor măsurate și a realizat afișarea parametrilor estimați cu intervale de
încredere de 95%.

54
6. Bibliografie și Referințe

[1]. Malika Ammam. Electrochemical and electrophoretic deposition of enzymes, Biosensors and
Bioelectronics, 58 (2014) 121 -131.
[2]. P. R. Dalmasso et al. Supramolecular architecture based on the self -assembling of multiwall carbon
nanotubes dispersed in p olyhistidine and glucose oxidase , Biosensors and Bioelectronics 39 (2013) 76 –
81.
[3]. C. Ravariu et al. Titanium dioxide nanotubes on silicon wafer designated for GOX enzymes
immobilization, Digest Journal of Nanomaterials and Biostructures, 6 (2011) 703 – 707.
[4]. Qin Wei et al. A novel label -free electrochemical immunosensor based on graphene, Sensors and
Actuators 149 (2010) 314 –318.
[5] V.C. Yang, T.T. Ngo, Biosensors and Their Applications, Springer Science+Business Media, 2010.
[6] A. Bulyha et al. Modelling and Simulation of Biologically Sensitive Field -Effect -Transistors, Ercim
News 85, 04 -2011.
[7] K. Wannajuk et al. Highly specific -glucose fluorescence sensing based on boronic anthraquinone
derivatives via the GOx enzymatic reaction, Elsevier, Te trahedron 68 (2012) 8899 -8904.
[8] Prelucrarea si Analiza Imaginilor, Autor: Constantin Vertan, 1999.
[9] A. Topor, C. Ravariu, F. Babarda, A Salageanu, I Caras, Enhanced Fluorescence Detection Based On
Simple Electronic Devices, 2 -nd Edition of Internat. Confer. New Trends on Sensing – Monitoring –
Telediagnosis for Life Sciences, Brasov, Romania, Sept 2015, Lux Libris Publishing House, ISBN 978 –
973-131-328-3, pp.118 -119.
[10] Clawson, J.J.: Meningitis diagnostic and intervention tool for emergency dispatch , US Patent No.
8488748 B2, 2013.
[11] Melinceanu, L., Lerescu, L., 􀄟ucureanu, C., Cara 􀄟, I., Pitica, R., Sarafoleanu, C., S alageanu, A.:
Serum perioperative profile of cytokines in patients with squamous cell carcinoma of the larynx . In: J
Otolaryngol He ad Neck Surg. 40 (2011), No. 2, p. 143 – 150.
[12] Zhou, Q., Kwa, T., Liu, Y., Revzin, A.: Cytokine biosensors: the future of infectious disease
diagnosis? .
Expert Rev. Anti Infect. Ther. 10 (2012), No. 10, p. 1079 – 1081.
[13] C. Ravariu, A. Rusu, F. Udrea, F. Ravariu. Simulation results of some Diamond On Insulator nano –
MISFETs , Diamond and Related Materials
[14] C. Ravariu, C. Ionescu -Tirgoviste, F. Ravariu. Glucose
biofuels properties in the bloodstream in conjunction with the beta cell electro -physiology , 2-nd IEEE –
ICCEP
International Conference on Clean Electrical Power Conference, Jun. 09 -11. 2009, Capri, Italy, pp. 124 –
127.
[15] C. Ravariu, L.G. Alecu, A. Bondarciuc, F. Babarada. Advanced SOI semiconductor structures for
micro -dose biological samples handling , Journal of Optoelectronics and Advanced Materials – Rapid
Communications, vol. 4.

Similar Posts