1.1 Mediul de dezvoltare utilizat – Matlab 1.2 Analiza datelor de imagini biologice (biosenzori) 2. Nivel de dezvoltare 2.1. Calitatea imaginii… [629428]

1
CUPRINS

1.Introducere
1.1 Mediul de dezvoltare utilizat – Matlab
1.2 Analiza datelor de imagini biologice (biosenzori)

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

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

4. Conceptul software
4.1. Algoritmul pentru procesarea de imagine
4.2. Detecție fluorescentă îmbunătățită bazată pe dispozitive electronice simple
4.3. Cod ul si documentația proiectului

5. Concluz ii
6. Bibliografie

2
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ăruts oluț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 prelucrarea este la rândul ei digitală, că un caz
particular 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 încadrul 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ă, imaginileprelucrate pot fi împărțite
în mai multe categorii:

• 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): s trâ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 formare 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 distribuție a tipurilor de
senzori dup ă gama de radiație captată conform:

3
• 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 ac eastă 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 responsabil 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ături 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.
Segmentarea 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 cantitative sau evaluări calitate asupra unor anumite ca tegorii de obiecte, prezente în
imaginea dată.
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
prelucra te 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.

1.2 Analiza datelor din imag ini 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 s ubcelulare ș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ță.

4

Fig. 1. Imagine mostră de 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, imunosensibil, 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 traductor.
Biodetectorii cu anticorpi marcați se încadrează în categoria de biodegradări optice, exploatând
efectul de fluorescentă[5],
Avantaj ele 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 opti c optimizat sau prin
prelucrearea imaginilor software, de exemplu scăderea raportului semnal / zgomot. Soluțiile
hardware combină un lanț de componente optice, cum ar fi sursa de lumină incitantă -lentilă -filtru
optic, spectrofotometru de fluorescență, cu u nele 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 co nstă î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 mono litic integrate pe un pin de fotodiodă, realizată în tehnică amorfă de Si, a –
Si: H. Rezultatele indică un maxim 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ă tehnologii

5
avansate de costuri ridicate la fabricare. Cea de -a două modalitate de detecție fluorescentă
provine din prelucrearea imaginilor, prin utilizare a unor instrumente software speciale,
îmbunătățind semnalul de zgomot(SNR). Raportul semnal / zgomot are rolul 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 meningitei 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.

2. Nivel de dezvoltare
2.1. Calitatea imaginii achiziționate
În multe cazuri, calitatea datelor extrase din imagine este destul de scăzută, datorită li mită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 imaginii,
rezultând un raport semnal / zgomot foarte scăzut(S NR)[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 micros copie 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, ceea 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 specialitate.
Exemplu de imagini care conțin obiecte de dimensiuni diferite la:
a). SNR = 7[4]
b).SNR = 2[4]

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

În această lucrare căutăm soluții cât mai sim ple ș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ă s everă, 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 aplicație software care iden tifica 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 pro ba 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 parazitară.

3.Scopul aplicației
3.1. Biodetec ția preconizată
Biodetecția preconizată în testele noastre se bazează pe:
• Țintă = agenți bacterieni r esponsabili 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

7

• 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ți nute, fiind disponibil pentru diferențierea rapidă între infecțiile virale și cele
bacteriene.
Apelăm astfel la sitemele bazate pe fluorescentă, care 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
conductivităț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-tranzistor.

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

8
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 acestora limitându -se la
laboratoarele de cercetare dotate cu scanner e 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 astfel mai potrivită pentru descoperirea biomarkerilor decât
pentru r utina 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 celulară. Agenții patogeni sunt recent evaluați
printre mai mulți med iatori ai bolilor inflamatorii[12-15]. Anticorpii fluorescenți marcanți, se leagă
î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 ana liza 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 fluoresce nț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 spec trul verde ar trebui măsurată cu rezoluție ridicată, fiind necesară măsurarea
câtorva ordine de mărime. Aceasta traduce conversia digitală dintr -o într -o mărime de culoare
ridicată, necesitând cel puțin 16 biți pentru stocare, solicitând o rezoluție de cul ori 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 s tocată 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.
Astfel au fost expuse șase spoturi cu diferite concentrații d e 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 supuse detectiei fluorescente.

9

4.Conceptul software

4.1. Algoritmul pentru procesarea de imagine

Algoritmul de procesare a imag inii 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 ut ilizate ca regiune de interes (ROIs) pentru măsura de intensitate;
• Se măsoară valoarea intensității folosind analiza histogramei;
• Se va interpola o curbă logistică cu 4 parametri prin punctele de măsurare și estimarea
parametrilor acestuia.

Pași urmați :

10

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 operar e mobile.O aplicație funcțională demonstrativă 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 ca z contrar,
adâncimea de culoare ar putea fi introdusă manual sau în mod automat.

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

Biosenzorii actuali integrează pe același cip receptorii biologici (enzime, anticorpi) cu un
dispozitiv activ că traductor. Prin urmare, cuplarea biomaterialelor la dispozitive le
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,

11
cantitatea mică de deșeuri, costuri reduse și aviabilitatea ace stor 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 recoman dă 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 încorporate în biosenzori până în prezent
[5]:
• carbohidrați cu gr eutate moleculară mică, peptide, fragmente de nuclee
• acizi și derivați de coenzime
• polimeri sintetici si polielectroliti
• hibrizi de biomolecule, polimeri sintetici si poliadiacetilen biochimic
• 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ă, fluorescentă
• amperometric
• poten țiometrică
• fotovoltaică de suprafată
• piezoelectric
• rezonanța plasmonului de suprafață
• conductometrice
• colorimerică

12
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 receptorii de suprafață ai
traductorului, distribuția încărcării la suprafață se modifică, modulând potențialul electrostatic
din semicond uctor, 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 încadrea ză
î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 absorbită 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 telefoanele mobile. Problema principala este că,
pentru ca biomarkerul rezulta t 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 se 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
dispozitivul respectiv (în cazul telefoanelor mobile care suportă sisteme de operare mobile
moderne), fie poate fi stocată și trimisă (prin email pentru telefoan ele 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 .

13
Pentru faza de prelucrare va fi necesa ră 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.

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

14
Parametrii curbei logistice indică comportamentul biochimic care poate fi urmărit în descrierile
precendente în scopul aplicării.
În scopul procesării, este dezvol tată 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 form atelor 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ă ma nual. 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 punctele de măsurare a probelor și va afișa
parametrii estimați(intervale de încredere de 95%). Imagine a 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ă.

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

15
monitorizarea personală , în comun cu disponibilitatea și reutilizarea capacităților telefoanelor
mobile ce servesc pentru detecția și analiz a probelor prelevate de la pacient .

4.3. Codul si documentația proiectului

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

DetectorX.m

function varargout = Dete ctorX(varargin)
% Codul DetectorX MATLAB aplicat pentru DetectorX.fig
% DetectorX, prin autoapelare , creeza un nou DetectorX sau il evidentiaza pe cel existent
% *.
%
% H = DetectorX returneaza handler -ul catre un nou DetectorX sau catre handle r-ul unuia
% existent *.
%
% DetectorX('CALLBACK',hObject,eventData,handles,…) apeleaza funtia locala denumita
% CALLBACK in DetectorX.M cu parametrii dati la intrare .
%
% DetectorX('Property','Value',…) creeaza un nou DetectorX sau il evidentiaza pe cel
% existent *. Pornind de la stanga, perechile de valori ale proprietatii sunt apl icate.
% interfetei grafice inainte ca Detector X_OpeningFcn sa fie apelat . Numele unei proprietati
% necunoscute sau o valoare nevalida face ca aplicarea proprietatii sa se opreasca . Toate
% valorile date ca si input sunt transmise la DetectorX_Opening Fcn prin “varargin ”
% * Vedeti optiunile GUI din ghidul “Tools Menu ”. Alegeti "GUI allows only one
% instance to run (singleton)".
%

16
% A se vedea de as emenea: GUIDE, GUIDATA, GUIHANDLES

% Editati textul de mai sus pentru a modifica raspunsul in ajutorul functiei DetectorX

%

% Inceperea codului de initializare
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, …
'gui_Singleton', gui_Singleton, …
'gui_OpeningFcn', @DetectorX_OpeningFcn, …
'gui_OutputFcn', @DetectorX_OutputFcn, …
'gui_LayoutFcn', [] , …
'gui_Callback', []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end

if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, v arargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
% Incheierea codului de initilizare

% – Se va executa chiar inainte ca DetectorX sa devina vizibil .
function DetectorX_OpeningFcn(hObject, eventdata, handles, varargin)
% Aceasta funtie nu are argumente de iesire, a se vedea OutputFcn .

17
% hObject handle to figure
% eventdata rezervat – pentru a fi definit intr-o versiune ulterioara de Matlab
% handles structure with handles and user data (see GUIDATA)
% varargin command line arguments to DetectorX (see VARARGIN)

% Alegeti iesirea implicita din linia de comanda pentru DetectorX
handles.output = hObject;

% Actualizeaza gestionarea structurii
guidata(hObject, handles);

handles.loadfile = 0;

% UIWAIT face ca DetectorX sa astepte raspunsul utilizatorului (a se vedea UIRESUME)
% uiwait( gestioneaza .figura 1);

% – Argumentele de iesire de la aceasta functie sunt returnate liniei de comanda .
function varargout = DetectorX_OutputFcn(hObject, eventdata, handles)
% varargout cell array for returning output args (see VARARGOUT);
% hObject handle to figure
% eventdata reserved – to be define d in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% Get default command line output from handles structure
varargout{1} = handles.output;
global loadfile
loadfile=0;

18

while 1 %main while loop
pause(0.1);
set(handles.dialogueText,'string','Load image file with samples!');
if loadfile % Aici se verifica daca este apasat butonul pentru incarcarea unui fisier
cla(handles.measurementPlot1,'reset'); %clean the plots
cla(handles.lcPlot,'reset');
axis(ha ndles.measurementPlot1,'auto');
% set(get(gca,'XLabel'),'String','axis label')

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

%% Incarcarea imaginilor
%extinderea extensiei
extension = image_name(strfind(image_name,'.')+1:end);

%citirea imaginii cu extensia corespunzatoare
image = i mread(image_name, extension);

%extrage informatii relevante despre imaginia in cauza
nfo=whos('image');
imclass=nfo.class;
classdigits = isstrprop(imclass,'digit');

%verifica daca imaginea este de tip uintx si extrage x sau se incheie daca imaginea este
%necorespunzato are

19
%% Procesarea imaginii
if any(classdigits)

bits = str2double(imclass(classdigits));% extrage bitii ada ncimii de culoare
else
bits = 16; % setarea valorii implicite
end%if
while ~get(handles.startButton,'Value'); % verifica daca butonul pentru pornire este oprit
filter_type=get(handles.filterMenu,'Value'); % aici se obtine 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
%imshow(handles.framePlot,I,[]);
TemplateData=struct;
set(handles.dialogueT ext,'string','< – Configure the Application!');
pause(1);
% !!! aici arata adancimea de culoare( biti) si face posibila setar ea

20
end%while
while get(handles.startButton,'Value'); % verifica daca butonul pentru pornire este lansat
nSamples =get(handles.nTemplates,'Value')+3; % deoarece incepe in mod implicit de la 1
(i.e.4)
set(handles.dialogueText,'string',['Select the ', num2str(nSamples), ' Samples!']);
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 isnumeric (nSamples)
for i=1:nSamples
samplesRect{i} = getrect(); % fereastra de tip dreptunghi care a fost selectata
samplesData{i} =
invImage(samplesRect{i}(2):samplesRect{i}(2)+samplesRec t{i}(4) –
1,samplesRect{i}(1):samplesRect{i}(1)+samplesRect{i}(3) -1); % datele imaginii actuale din
%fereastra
histData{i} = imhist(samplesData{i}); % calculeaza histograma pentru ferestrele
%selectate
x1=double(min(min(samplesData{i}))) ;
x2=double(max(max(samplesData{i})));
histXaxis{i} = x1:(x2 -x1)/255:x2;
end%for
%% Afisati ferestrele select ate
startXpoint = 312.5;

for i=1:nSamples

21
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 intens itatii care vor fi uti lizate pentru calcule ulterioare,
folosind pragul Otsu si valorile axei X
otsuThresh{i} = graythresh(samplesDa ta{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(otsuT hresh)); %din moment ce selectia ferestre lor a fost
facuta %aleatoriu
minData = sort(cell2mat(minData))
Gex=[230 512 988 3951 12876 25817]; %example samples
end%if
%Aici se pregateste o celula cu siruri de caractere pentru a fi afisata
%regasiti posibilele modificari in lista de esantioane
for i=1:length(otsuThresh)
otsuThresh_cell{i}=num2str(otsuThresh(i));
minData_cell{i} = num2str(minData(i));
end
set(handles.samplesList_vals,'string',otsuThresh_cell);

%% Aici se vor calcula parametrii functiei logistice
[cfo Go] = L4P(xVals,otsuThresh) % interpoleaza funtia logistica pe baza valorilor
%pragului Otsu

22
%[cfm Gm] = L4P(xVals,minData) % interpoleaza functia logistica pe valori minime
[cfex Gexe] = L4P(xVals, Gex)% interpoleaza functia logistica pe exemplul dat
%% afisarea curbei logistice rezultate
xAx = 0:0.1:10 000;
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,yAxo);
% hold on
% plot(xVals,otsuThresh,'or');
% hold off
axes(handles.lcPlot);
plot(xAx,yAxex);
hold on
plot(xVals,Gex,'or');
hold off

%parameters (to do – to be retrieved as string from curve fit object, for the moment
%predefined
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)'

23
set(handles.lcList_vals,'string',lcparam_string)

if 0 %mockif
% paduire
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
%Initializare structura template
center=[TempPos1(1,1)+TempPos1(1,2) -1 TempPos1(2,1)+TempPos1(2,2) -1]/2;
TemplateDat a(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;

center=[TempPos2(1,1 )+TempPos2(1,2) -1 TempPos2(2,1)+TempPos2(2,2) -1]/2;
TemplateData(2).p=[0 0 0 0 center(1) center(2)];

TemplateData(2).image=I(TempPos2(1,1):TempPos2(1,2),TempPos2(2,1):TempPos2(2,2));
TemplateData( 2).temp_pos=TempPos2;

24
center=[TempPos3(1,1)+TempPos3(1,2) -1 TempPos3(2,1)+TempPos3(2,2) -1]/2;
TemplateData(3).p=[0 0 0 0 center(1) center(2)];

TemplateData(3).image=I(TempPos3 (1,1):TempPos3(1,2),TempPos3(2,1):TempPos3(2,2));
TemplateData(3).temp_pos=TempPos3;

center=[TempPos4(1,1)+TempPos4(1,2) -1 TempPos4(2,1)+TempPos4(2,2) -1]/2;
TemplateData(4).p= [0 0 0 0 center(1) center(2)];

TemplateData(4).image=I(TempPos4(1,1):TempPos4(1,2),TempPos4(2,1):TempPos4(2,2));
TemplateData(4).temp_pos=TempPos4;
catch ME
end%try

cmap=hot(256);

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

% Traching dupa toate template -urile folosind metoda corelatiei in sens
% de norma frobenius a diferentei dintre imagine si template
displacements=[];
for t=1:length(TemplateData)
[ output_template, displacement_x, displacement_y ] = do_correlation_image( I,
TemplateData(t), max_displacement_x, max_displacement_y );
output_templates(t)=output_template;
displacements=[displaceme nts;displacement_x, displacement_y];

25
end
TemplateData=output_templates;
% Afisare frame si 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

% Afisare pozitii template -uri
for t=1:length(TemplateData)

h(t)=plot(TemplateData(t).p(6),TemplateData(t).p(5),'go','MarkerFaceColor',cmap(round(t*255/l
ength(TemplateData))+1,:));
title(['X: ', num2str(mean(displacements(:,1))),' Y:
',num2str(mean(displacements(:,2))),' stdX: ', num2str(std(displacements(:,1))), ' stdY: ',
num2str(std(displacements(:,2)))])
drawnow
% if mean(displacements(:,1))
% pause(250)
% end%if
%pause(1)
end

if i==1 % prima masuratoare pusa asa cum este ea
x_results(i)=mean(displacements(:,1));
y_results(i)=mean(displacements(:,2));
else
x_results(i)=x_results(i -1)+mean(displacements(:,1));
y_results(i)=y_re sults(i -1)+mean(displacements(:,1));

26

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_results(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.lcPl ot,{'xcolor'},{'w'});
pause(0.25) %THIS PAUSE IS FOR VISUAL APPEALENESS
end%if
end%for
% figure
% plot(x_results)
% figure
% plot(stdx_results);
% pause(0.5)
set(handles.startButton,'Value',0); % comutati butonul de pornire
loadfile=0;
end%mockif

27
end%while
end%if
end%while

%% GUI Callbacks
% – executa la apasarea butonului in noFilter Button .
function noFilterButton_Callback(hObject, eventdata, handles)
% hObject handle to noFilterButton (see GCBO)
% eventdata reserved – to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% Hint: get(hObject,'Value') returns toggle state of noFilterButton

% – Executes on button press in gaussianFilterButton.
function gaussianFilterButton_Callback(hObject, eventdata, handles)
% hObject handle to gaussianFilterButt on (see GCBO)
% eventdata reserved – to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% Hint: get(hObject,'Value') returns toggle state of gaussianFilterButton

% – Executes on button press in radiobutton3.
function radiobutton3_Callback(hObject, eventdata, handles)
% hObject handle to radiobutton3 (see GCBO)
% eventdata reserved – to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

28

% Hint: get(hObject,'Value') returns toggle state of radiobutton3

% – Executes on button press in radiobutton4.
function radiobutton4_Callback(hObject, eventdata, handles)
% hObject handle to radiobutton4 (see GCBO)
% eventdata reserved – to be defi ned in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% Hint: get(hObject,'Value') returns toggle state of radiobutton4

% – Executes on slider movement.
function mainSlider_Callback(hObject, eventdata, handl es)
% hObject handle to mainSlider (see GCBO)
% eventdata reserved – to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'Value') returns position of slider
% get(hObj ect,'Min') and get(hObject,'Max') to determine range of slider

% – Executes during object creation, after setting all properties.
function mainSlider_CreateFcn(hObject, eventdata, handles)
% hObject handle to mainSlider (see GCBO)
% eventdata reser ved – to be defined in a future version of MATLAB
% handles empty – handles not created until after all CreateFcns called

29

% Hint: slider controls usually have a light gray background.
if isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBa ckgroundColor'))
set(hObject,'BackgroundColor',[.9 .9 .9]);
end

% –––––––––––––––––––––––
function uipushtool1_ClickedCallback(hObject, eventdata, handles)
% hObject handle to uipushtool1 (see GCBO)
% eventdata reserved – to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% – Executes on selection change in filterMenu.
function filterMenu_Callback(hObject, eventdata, handles)
% hObject hand le to filterMenu (see GCBO)
% eventdata reserved – to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% Hints: contents = cellstr(get(hObject,'String')) returns filterMenu contents as cell array
% contents{get(hObject,'Value')} returns selected item from filterMenu

% – Executes during object creation, after setting all properties.
function filterMenu_CreateFcn(hObject, eventdata, handles)
% hObject handle to filterMenu (see GCBO)
% eve ntdata reserved – to be defined in a future version of MATLAB

30
% handles empty – handles not created until after all CreateFcns called

% Hint: popupmenu controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc && iseq ual(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end

function maxDisplacementText_Callback(hObject, eventdata, handles)
% hObject handle to maxDisplacementText (see GCBO)
% even tdata reserved – to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of maxDisplacementText as text
% str2double(get(hObject,'String')) returns contents of maxDisplacementText as a double

% – Executes during object creation, after setting all properties.
function maxDisplacementText_CreateFcn(hObject, eventdata, handles)
% hObject handle to maxDisplacementText (see GCBO)
% eventdata reser ved – to be defined in a future version of MATLAB
% handles empty – handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'B ackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))

31
set(hObject,'BackgroundColor','white');
end

% – Executes on selection change in nTemplates.
function nTemplates_Callback(hObject, eventdata, handles)
% hObject handle to nTemplates (see GCBO)
% eventdata reserved – to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% Hints: contents = cellstr(get(hObject,'String')) returns nTemplates contents as cell array
% contents{get(h Object,'Value')} returns selected item from nTemplates

% – Executes during object creation, after setting all properties.
function nTemplates_CreateFcn(hObject, eventdata, handles)
% hObject handle to nTemplates (see GCBO)
% eventdata reserved – to be defined in a future version of MATLAB
% handles empty – handles not created until after all CreateFcns called

% Hint: popupmenu controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'Back groundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end

32
function maxFrames_Callback(hObject, eventdata, handles)
% hObject handle to maxFrames (see GCBO)
% eventdata reserved – to be defined in a futu re version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of maxFrames as text
% str2double(get(hObject,'String')) returns contents of maxFrames as a double

% – Executes during object creation, after setting all properties.
function maxFrames_CreateFcn(hObject, eventdata, handles)
% hObject handle to maxFrames (see GCBO)
% eventdata reserved – to be defined in a future version of MATLAB
% handles empty – handles no t created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'Back groundColor','white');
end

% – Executes on button press in startButton.
function startButton_Callback(hObject, eventdata, handles)
% hObject handle to startButton (see GCBO)
% eventdata reserved – to be defined in a future version of MATLAB
% handl es structure with handles and user data (see GUIDATA)

33
% Hint: get(hObject,'Value') returns toggle state of startButton

% – Executes during object creation, after setting all properties.
function framePlot_CreateFcn(hObject, eventdata, handles)
% hO bject handle to framePlot (see GCBO)
% eventdata reserved – to be defined in a future version of MATLAB
% handles empty – handles not created until after all CreateFcns called

% Hint: place code in OpeningFcn to populate framePlot

function dialog ueText_Callback(hObject, eventdata, handles)
% hObject handle to dialogueText (see GCBO)
% eventdata reserved – to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of dialogueText as text
% str2double(get(hObject,'String')) returns contents of dialogueText as a double

% – Executes during object creation, after setting all properties.
function dialogueText_CreateFcn(hObject, eventdata, hand les)
% hObject handle to dialogueText (see GCBO)
% eventdata reserved – to be defined in a future version of MATLAB
% handles empty – handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Win dows.

34
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end

% – Executes on button press in loadFileButton.
function loadFileButton_Ca llback(hObject, eventdata, handles)
% hObject handle to loadFileButton (see GCBO)
% eventdata reserved – to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
global loadfile
loadfile=1;

%% Main C orrelation Implementation
function [ output_template, displacement_x, displacement_y ] = do_correlation_image( image,
input_template, max_displacement_x, max_displacement_y )
%Functia calculeaza prin metoda corelatiei deplasarea si noua pozitie a
%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_displacement_x,1):min(input_template.temp_pos(1,1)+ma x_displacement_x,size(image,1))

35
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
displ acement_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.t emp_pos(2,2) -1]/2;
output_template.p=[0 0 0 0 center(1) center(2)];
%figure
%plot(v);
% ff1=xcorr2(double(image),double(input_template.image)); %corelatie 2 -D
% clasica, coreleaza orice template cu zonele deschise din image
% [a1,b1]=find(ff1==max(max(ff1))) %maximul corelatiei
% output_template=[];

36

%% Obsolete correlation implementation
function [ output_template, displacement_x, displacement_y ] = do_correlation( image,
input_template )
%Functia calculeaza prin metoda core latiei deplasarea si noua pozitie 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)); %corelatie 2 -D
[a1,b1]=find(ff1==m ax(max(ff1))) %maximul corelatiei
output_template=[];

% – Executes on selection change in samplesList_vals.
function samplesList_vals_Callback(hObject, eventdata, handles)
% hObject handle to samplesList_vals (see GCBO)
% eventdata reserved – to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% Hints: contents = cellstr(get(hObject,'String')) returns samplesList_vals contents as cell array
% contents{get(hObject,'Value')} returns selec ted item from samplesList_vals

% – Executes during object creation, after setting all properties.
function samplesList_vals_CreateFcn(hObject, eventdata, handles)
% hObject handle to samplesList_vals (see GCBO)
% eventdata reserved – to be defined in a future version of MATLAB

37
% handles empty – handles not created until after all CreateFcns called

% Hint: listbox controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end

% – Se executa la apasarea butonului in computeLC_ button .
function computeLC_button_Callback(hObject, eventdata, handles)
% hObject handler pentru computeLC_button ( a se vedea GCBO)
% eventdata reserved – to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% – Executes on selection change in lcList_vals.
function lcList_vals_Callback(hObject, eventdata, handles)
% hObjec t handle to lcList_vals (see GCBO)
% eventdata reserved – to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% Hints: contents = cellstr(get(hObject,'String')) returns lcList_vals contents as ce ll array
% contents{get(hObject,'Value')} returns selected item from lcList_vals

% – Executes during object creation, after setting all properties.
function lcList_vals_CreateFcn(hObject, eventdata, handles)

38
% hObject handle to lcList_vals (s ee GCBO)
% eventdata reserved – to be defined in a future version of MATLAB
% handles empty – handles not created until after all CreateFcns called

% Hint: listbox controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end

L4P.m

%% Function for the 4 parameters logistic function
function [cf G]=L4P(x,y,varargin)
%L4P Four Parameters l ogistic regression
% The Four Parameters Logistic Regression or 4PL nonlinear regression model
% is commonly used for curve -fitting analysis in bioassays or immunoassays
% such as ELISAs or dose -response curves.
% It is characterized by it’s classic “S �� ? or sigmoidal shape that fits the
% bottom and top plateaus of the curve, the EC50, and the slope factor
% (Hill slope). This curve is symmetrical around its inflection point.
%
% The 4PL equation is:
% F(x) = D+(A -D)/(1+(x/C)^B)
% where:
% A = Minimum as ymptote. In a bioassay where you have a standard curve,
% this can be thought of as the response value at 0 standard concentration.
%

39
% B = Hill's slope. The Hill's slope refers to the steepness of the curve.
% It could either be positive or negative.
%
% C = Inflection point. The inflection point is defined as the point on the
% curve where the curvature changes direction or signs. C is the
% concentration of analyte where y=(D -A)/2.
%
% D = Maximum asymptote. In an bioassay where you have a standard curve ,
% this can be thought of as the response value for infinite standard
% concentration.
%
%
% Syntax: [cf G]=L4P(x,y,st,L,U)
%
% Inputs:
% X and Y (mandatory) – data points.
% X is a Nx1 column vector and Y must have the same rows n umber
% of X. If Y is a NxM matrix (N points and M replicates), L5P
% will generate a column vector computing means for each row.
% The standard deviations of the rows will be used as weights of
% regression.
%
% st = starting points. This is a 1×4 vector of starting points
% that have to be used to start the process of not linear
% fitting. If this vector is not provided, L4P will set the
% starting points on the basis of x an d y data.
%
% L = Lower bounds of parameters. This is a 1×4 vector of lower

40
% bounds of the 4 parameters. If this vector is not provided, L4P
% will set it on the basis of x and y data.
%
% U = Upper bounds of parame ters. This is a 1×4 vector of upper
% bounds of the 4 parameters. If this vector is not provided, L4P
% will set it on the basis of x and y data.
%
% Outputs:
% cf = the FIT object
% G = goodness -of-fit measures, for the given inputs, in the
% structure G. G includes the fields:
% – SSE sum of squares due to error
% – R2 coefficient of determination or R^2
% – adjustedR2 degree of freedom adjusted R^2
% – stdError fit standard error or root mean square error
%
% Example:
%
% 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];
%
% Calling on MatLab the function: [cf G]=L4P(x,y)
%
% Answer is:
%
% cf =
%
% General model:
% cf(x) = D+(A -D)/(1+(x/C)^B)

41
% Coefficients (with 95% confidence bounds):
% 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
% this will plot the curve.
%
% Crea ted by Giuseppe Cardillo
% giuseppe.cardillo -edta@poste.it
%
% See also L4Pinv, L5P, L5Pinv, L3P, L3Pinv
%
% To cite this file, this would be an appropriate format:
% Cardillo G. (2012) Four parameters logistic regression – There and back again

%––––––– Input errors handling section ––––––––-
if nargin < 2

42
error('Almost X and Y vectors are required')
end

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

%if y is a matrix, compute means and stand ard deviations
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:IgnoringNansAn dInfs','Ignoring NaNs and Infs in data.');
end

%To compute 4 parameters you almost need 4 points…
if length(x(ok_))<4
warning('L4P:NotEnoughData','Not enough Data points')

43
end

%set or check optional input data
args=cell(varargin);
nu=numel(arg s);
default.values = {[],[],[]};
default.values(1:nu) = args;
[st_ L U] = deal(default.values{:});

%set the starting points:
% A is the lower asymptote so guess it with min(y)
% B is the Hill's slope so guess it with the slope of the line between first an d last point.
% C is the inflection point (the concentration of analyte where you have
% half of the max response) so guess it finding the concentration whose
% response is nearest to the mid response.
% D is the upper asymptote so guess it with 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

44
%set the bounds. Of course all lower bounds are 0 and all upper bound are
%Inf. Anyway, if the slope is negative the lower bound of B is -Inf and the
%upper bound is 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
end
clear args default nu slope Idx

45

%–––––––––– Fit the data –––––––––––
fo_ = fitoptions('method','NonlinearLeastSquares','Lower',L,'Upper',U);
set(fo_,'Startpoint',st_);
if all(we) % if y was a matrix us e std as weights for fitting
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_);
end%function

processing_alg o.m

function processing_algo(image_name)
%Implementation of the suggested processing algorithm for an image
%call example: processing_algo('mozaic.tif')
warning('off','all');
%% Image loading
%extract extension
extension = image_name(strfind(image_name,'. ')+1:end);

%read image with the proper extension
image = imread(image_name, extension);

%extract relevant nfo about the variable image
nfo=whos('image');

46
imclass=nfo.class;
classdigits = isstrprop(imclass,'digit');

%check if image is of type uintx and e xtract x or return if improper type

%% Image processing
if any(classdigits)
try
bits = str2double(imclass(classdigits));%extract color depth bits

%% Invert image & display
invImage = 2^bits – 1 – image;
figure
imshow(invImage);
%% Select number of samples and according the ROIs
nSamples = input('Input the number of samples to be analyzed: ');
samplesRect = cell(0,nSamples);
samplesData = cell(0,nSamples);
otsuThres h = cell(0,nSamples);
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(); %rectangle window that has been selected
samplesData{i} =
invImage(samplesRect{i}(2):samplesRect{i}(2)+samplesRect{i}(4) –

47
1,samplesRect{i}(1):samplesRect{i}(1)+samplesRect{i}(3) -1); %actual image data from t he
window
histData{i} = imhist(samplesData{i}); %compute histogram for selected windows
x1=double(min(min(samplesData{i})));
x2=double(max(max(samplesData{i})));
histXaxis{i} = x1:(x2 -x1)/255: x2;
end%for
%% Display the selected windows
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});
%% Process the intensity values to be used for further computations, here using Otsu
threshold & the x -axis values
otsuThresh{i} = graythresh(samplesData{i})*max(max(sampl esData{i}));
minData{i} = min(min(samplesData{i}));
xVals{i}= startXpoint*2^(i -1);
end%for
xVals = cell2mat(xVals);
otsuThresh = sort(cell2mat(otsuThresh)); %since the selection of the w indows has been
made randomly
minData = sort(cell2mat(minData)); %since the selection of the windows has been made
randomly
Gex=[230 512 988 3951 12876 25817];
%% Here compute the parameters for the logistic function
[cfo Go] = L4P(xVals,otsuThresh) %interpolate logistic function on Otsu thresh values
%[cfm Gm] = L4P(xVals,minData) %interpolate logistic function on minimum values

48
[cfex Gexe] = L4P(xVals, Gex)%interpolate logistic functi on on the example given
%% Here plot the resulting logistic curve(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
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…');

49
pause(5);
return
end%if
end

%% Function for the 4 parameters logistic function
function [cf G]=L4P(x,y,varargin)
%L4P Four Parameters logistic regr ession
% The Four Parameters Logistic Regression or 4PL nonlinear regression model
% is commonly used for curve -fitting analysis in bioassays or immunoassays
% such as ELISAs or dose -response curves.
% It is characterized by it’s classic “S �� ? or sigmoidal shape that fits the
% bottom and top plateaus of the curve, the EC50, and the slope factor
% (Hill slope). This curve is symmetrical around its inflection point.
%
% The 4PL equation is:
% F(x) = D+(A -D)/(1+(x/C)^B)
% where:
% A = Minimum asymptote. In a bioassay where you have a standard curve,
% this can be thought of as the response value at 0 standard concentration.
%
% B = Hill's slope. The Hill's slope refers to the steepness of the curve.
% It could either be positive or negative.
%
% C = Inflection point. The inflection point is defined as the point on the
% curve where the curvature changes direction or signs. C is the
% concentration of analyte where y=(D -A)/2.
%

50
% D = Maximum asymptote. In an bioassay where you have a standard cu rve,
% this can be thought of as the response value for infinite standard
% concentration.
%
%
% Syntax: [cf G]=L4P(x,y,st,L,U)
%
% Inputs:
% X and Y (mandatory) – data points.
% X is a Nx1 column vector and Y must have the same row s number
% of X. If Y is a NxM matrix (N points and M replicates), L5P
% will generate a column vector computing means for each row.
% The standard deviations of the rows will be used as weights of
% regression.
%
% st = starting points. This is a 1×4 vector of starting points
% that have to be used to start the process of not linear
% fitting. If this vector is not provided, L4P will set the
% starting points on the basis of x and y data.
%
% L = Lower bounds of parameters. This is a 1×4 vector of lower
% bounds of the 4 parameters. If this vector is not provided, L4P
% will set it on the basis of x and y data.
%
% U = Upper bounds of par ameters. This is a 1×4 vector of upper
% bounds of the 4 parameters. If this vector is not provided, L4P
% will set it on the basis of x and y data.
%

51
% Outputs:
% cf = the FIT object
% G = goodness -of-fit measures, for the given inputs, in the
% structure G. G includes the fields:
% – SSE sum of squares due to error
% – R2 coefficient of determination or R^2
% – adjustedR2 degree of freedom adjusted R^2
% – stdError fit standard error or root mean square error
%
% Example:
%
% 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];
%
% Calling on MatLab the function: [cf G]=L4P(x,y)
%
% Answer is:
%
% cf =
%
% General model:
% cf(x) = D+(A -D)/(1+(x/C)^B)
% Coefficients (with 95% confidence bounds):
% 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 =

52
%
% 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
% this will plot the curve.
%
% C reated by Giuseppe Cardillo
% giuseppe.cardillo -edta@poste.it
%
% See also L4Pinv, L5P, L5Pinv, L3P, L3Pinv
%
% To cite this file, this would be an appropriate format:
% Cardillo G. (2012) Four parameters logistic regression – There and back agai n

%––––––– Input errors handling section ––––––––-
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

53

%if y is a matrix, compute means and st andard deviations
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:IgnoringNan sAndInfs','Ignoring NaNs and Infs in data.');
end

%To compute 4 parameters you almost need 4 points…
if length(x(ok_))<4
warning('L4P:NotEnoughData','Not enough Data points')
end

%set or check optional input data
args=cell(varargin);
nu=numel( args);
default.values = {[],[],[]};
default.values(1:nu) = args;

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

%set the starting points:
% A is the lower asymptote so guess it with min(y)
% B is the Hill's slope so guess it with the slope of the line between first and last point.
% C is the inflection point (the concentration of analyte where you have
% half of the max response) so guess it finding the concentration whose
% response is nearest to the mid response.
% D is the upper asymptote so guess it with 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

%set the bounds. Of course all lower bounds are 0 and all upper bound are
%Inf. Anyway, if the slope is negative the lower bound of B is -Inf and the
%upper bound is 0.

if isempty(L)
L=zeros(1,4);
if slope<0

55
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 ar ray')
end
end
clear args default nu slope Idx

%–––––––––– Fit the data –––––––––––
fo_ = fitoptions('method','NonlinearLeastSquares','Lower',L,'Upper',U);
set(fo_,'Startpoint',st_);
if all(we) % if y was a matrix use std as weights for fitting
set(fo_,'Weights',we);
end

56
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%functino

57
5.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 afișarea parametrilor estimați cu intervale de încredere de
95%.

58
6. Bibliografie
[1]. Malika Ammam. Electroche mical 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 polyhistidine and glucose oxid ase, 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 B iologically 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, Tetrahedron 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, 20 13.
[11] Melinceanu, L., Lerescu, L., 􀄟ucureanu, C., Cara 􀄟, I., Pitica, R., Sarafoleanu, C.,
Salageanu, A.: Serum
perioperative profile of cytokines in patients with squamous cell carcinoma of the larynx . In: J
Otolaryngol Head 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.

59
[13] C. Ravariu, A. Rusu, F. Udrea, F. Ravariu. Simulation resu lts of some Diamond On
Insulator nano -MISFETs ,
Diamond and Related Materials, 15(2), pp.777 -782, 2006. [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,
nr. 9, pp. 1375 -1378, Sept. 2010.

Similar Posts