• Non ci sono risultati.

Appendice B ALGORITMI IN MATLAB

N/A
N/A
Protected

Academic year: 2021

Condividi "Appendice B ALGORITMI IN MATLAB"

Copied!
12
0
0

Testo completo

(1)

Introduzione

In questa Appendice verranno riportati gli algoritmi realizzati in

MATLAB per l’esecuzione delle varie analisi.

Quelli riportati in verde sono i vari commenti presenti nel file,

inseriti attraverso il simbolo di percentuale.

Analisi della raggiungibilità e studio delle

distanze

%% ANALISI DELLA RAGGIUNGIBILITA' DELLE DISTANZE

% Tale programma consente la costruzione del grafo di raggiungibilità dei

% nodi e di calcolare la distanza tra di essi

%% Step 1: lettura e visualizzazione dell'immagine % Lettura e visualizzazione dell'immagine della rete neurale in vitro

% acquisita con la telecamera

J = imread('giorno7.bmp'); figure;

imshow(J);

title('Immagine originale');

%% Step 2: rilevamento nodi

% La matrice xy è inizialmente vuota

(2)

n = 0;

% I nodi vengono identificati cliccandoci sopra con il tasto sin del mouse

% Il clic con il tasto destro identifica l'ultimo punto

disp('Left mouse button picks points.')

disp('Right mouse button picks last point.') imshow(J,axes) hold on but = 1; while but == 1 [xi,yi,but] = ginput(1); plot(xi,yi,'mx'); text(xi+5,yi,num2str(n+1)); text(xi+5.0,yi+20,num2str(xi)); text(xi+5.0,yi+40.0,num2str(yi)); n = n+1;

xy(:,n) = [xi yi];

end

A=xy; B=A'

% ogni riga della matrice B riporta le coordinate X,Y di un nodo

% B è perciò una matrice nX2, dove n è il numero dei nodi

%% Step 3: Trasformazione dell'immagine RGB in immagine a livelli di grigio

% Per la conversione si usa il comando rgb2gray

I = rgb2gray(J); figure;

(3)

imshow(I);

title('Immagine a livelli di grigio');

%% Step 4: Rilevamento cellule

% Segmentazione: isolamento delle cellule

% Si sfrutta il differente livello di grigio rispetto al resto dell'immagine

% X realizzare la segmentazione si usa un operatore di bordo basato sul

% gradiente: operatore di Sobel, che coinvolge un pixel di un intorno 3x3

% Si realizza quindi la sogliatura per creare una maschera binaria

% contenente la cellula segmentata

[junk threshold] = edge(I, 'sobel'); fudgeFactor = 0.6;

% tale parametro deve essere opportunamente scelto a seconda dell'immagine

BWs = edge(I,'sobel', threshold * fudgeFactor); subplot(2,3,2)

imshow(BWs);

title('binary gradient mask');

%% Step 5: Dilatazione

% L'operazione di sogliatura ha consentito la selezione dei pixel

% caratterizzati da significativi cambiamenti di intensità.

% Vengono mostrate le linee di alto contrasto, che però possono non

% delineare abbastanza bene il contorno dell'oggetto di interesse.

(4)

% Ad esempio possono esservi "buchi" nelle linee che circondano

% l'oggetto nella maschera

% l'immagine è perciò sottoposta all'operatore morfologico di dilatazione

% Si usano elementi strutturali che possono essere creati con la funzione

% |strel|

se90 = strel('line', 3, 90); se0 = strel('line', 3, 0);

% Si usano elementi strutturali verticali seguiti da quelli orizzontali

% La funzione |imdilate| dilata l'immagine % Il contorno é mostrato abbastanza nettamente

BWsdil = imdilate(BWs, [se90 se0]); subplot(2,3,3)

imshow(BWsdil);

title('dilated gradient mask');

%% Step 6: Riempimento "Interior Gaps"

% Ci sono ancora piccole cavità all'interno della cellula e per riempirle

% si usa un altro operatore morfologico: imfill

BWdfill = imfill(BWsdil, 'holes'); subplot(2,3,4)

imshow(BWdfill);

title('binary image with filled holes');

%% Step 7: Smoothen

% Gli oggetti segmentati vengono resi più naturali rifinendoli erodendo

(5)

% l'immagine 2 volte con un "diamante" creato usando la funzione |strel|

seD = strel('diamond',1);

BWfinal = imerode(BWdfill,seD); BWfinal = imerode(BWdfill,seD); subplot(2,3,5)

imshow(BWfinal);

title('segmented image');

%% step 8: Divisione in regioni

% bwlabel marca i componenti connessi in un'immagine binaria

% 8 è la connettività scelta

X = bwlabel(BWfinal,8);

% il comando label2rgb converte la matrice label in una

% immagine a colori RGB, così da % visualizzare le regioni marcate

% A ciascun oggetto identificato è assegnato un colore

RGB = label2rgb(X,@jet,'k'); figure

imshow(RGB,axes)

title('labeled image'); hold on [l,m]=size(B); for k=1:l plot(B(k,1),B(k,2),'w*') text(B(k,1),B(k,2), num2str(k)); hold on end

(6)

%% Step 9 Costruzione della matrice di raggiungibilità

% La matrice di raggiungibilità è una matrice quadrata,

% di dimensione pari al num dei nodi individuati al passo 2

% Se il nodo i raggiunge il nodo j, allora l'elemento i,j

% della matrice è 1, diversamente 0

% 2 nodi sono connessi se appartengono allo stesso oggetto,

% ovvero se il pixel che li rappresenta ha gli stessi valori di R, G, B

C=B(:,1);

% ogni riga del vettore C rappresenta la coordinata x di un nodo

D=B(:,2);

% ogni riga del vettore D rappresenta la coordinata y di un nodo

[l,m]=size(B);

pixels = impixel(RGB,C,D)

% ogni riga di questa matrice riporta i valori R, G e B di un pixel, le cui

% coordinate sono specificate nella riga corrispondente della matrice B

R=zeros(l); for i=1:l for j=1:l if pixels(i,:)==pixels(j,:) R(i,j)=1; else R(i,j)=0;

(7)

end if i==j R(i,j)=0; end end end Rag=R

% Rag è la matrice di raggiungibilità

%% Step 10 Costruzione del grafo di raggiungibilità

BGobj = biograph(Rag) h=view(BGobj)

%% Step 11 Costruzione della matrice delle distanze % La matrice delle distanze è una matrice quadrata, % di dimensione pari al num dei nodi individuati al passo 2

% L'elemento i,j della matrice è la distanza euclidea tra il nodo i e il % nodo j dist=zeros(l); for i=1:l for j=1:l ai=B(i,1); bi=B(i,2); aj=B(j,1); bj=B(j,2); a=(ai-aj)^2; b=(bi-bj)^2; dist(i,j)=sqrt(a+b); if dist(i,j)< 10 dist(i,j)=0;

(8)

else dist(i,j)=dist(i,j); end

end end

Distanze=dist

Il fudgeFactor per la rete 1 è pari a:

9

giorno 1 = 0.46;

9

giorno 2 = 0.475;

9

giorno 3 = 0.51;

9

giorno 4 = 0.51;

9

giorno 5 = 0.6;

9

giorno 6= 0.65;

9

giorno 7 = 0.6.

I valori della rete 2 sono:

9

giorno 1 = 0.59;

9

giorno 2 = 0.5;

9

giorno 3 = 0.6;

9

giorno 4 = 0.61;

9

giorno 5 = 0.6;

9

giorno 6 = 0.748;

9

giorno 7 = 0.495.

I valori della rete 3 sono:

9

giorno 1 = 0.38;

9

giorno 2 = 0.5;

9

giorno 3 = 0.5;

(9)

9

giorno 4 = 0.45;

9

giorno 5 = 0.5;

9

giorno 6 = 0.55;

9

giorno 7 = 0.55.

Analisi della connettività e costruzione del grafo

Una volta ottenuta la matrice delle adiacenze, il vettore delle

connettività e la connettività media vengono calcolati

automaticamente dal programma scritto in Matlab, che consente

anche la costruzione automatica del grafo.

L’esempio riportato riguarda l’analisi della rete 1 al primo giorno di

coltura ed è ripetuta in maniera identica per tutti gli altri giorni e per

le altre due reti.

%% STUDIO DI CONNETTIVITA' %% Giorno 1

% Matrice delle adiacenze:

A1=[0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0];

(10)

% l'elemento iesimo del vettore k1 é il grado del vertice i, ottenuto addizionando

% gli elementi della iesima colonna di A1

k1=sum(A1)

% k1m è la connettività media

k1m=mean(k1) % Costruzione istogramma x = 0:1:14; figure hist(k1,x) ylabel('frequenza') xlabel('connettività')

title('distribuzione della connettività dei nodi al giorno 1')

% Creazione del grafo

B1 = biograph(A1) h1=view(B1)

Analisi della distribuzione delle lunghezze del

cammino e calcolo della lunghezza media

Dall’immagine della rete è possibile valutare la lunghezza del

cammino tra 2 generici nodi i e j e costruire un vettore delle

distanze, in cui sono riportati tutti i valori: d12, d13,...

Naturalmente poi, nel vettore, d31, uguale a d13, non è ripetuta.

(11)

Tale vettore è stato inserito in un file di Matlab che, a partire da

esso, consente di calcolare sia la distribuzione delle lunghezze del

cammino che la lunghezza media data da:

= ≠ =

=

N j ij N j i i

d

N

N

L

1 , 1

)

1

(

1

dove N è il numero dei nodi.

Tale analisi è stata effettuata per tutte le 7 immagini di ogni rete, ma

di seguito, per brevità, è riportata l’analisi della rete 1 al primo

giorno di coltura. Ciò che cambia nei vari giorni sono solo gli

elementi del vettore e gli indici, ma i comandi sono gli stessi.

%% DISTRIBUZIONE DELLE LUNGHEZZE DEL CAMMINO E CALCOLO DELLA LUNGHEZZA MEDIA

% Ogni elemento del vettore è la distanza tra 2 nodi % E' inoltre calcolata la distanza media del cammino come media delle

% distanze tra le tutte le coppie di nodi

% 210 è il prodotto N*(N-1), dove N è il num dei nodi pari a 15 %% giorno1 l1=[1 3 2 0 0 0 0 0 0 0 0 0 0 0 2 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 2 0 2 0 0 0 0 0 1 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0]; x = 0:1:5; figure hist(l1,x) ylabel('frequenza')

(12)

xlabel('lunghezza del cammino')

title('distribuzione della lunghezza del cammino al giorno 1')

% m1 è la lunghezza media del cammino al giorno 1

Riferimenti

Documenti correlati