• Non ci sono risultati.

Un esperimento su un controllo positivo (ossia su una molecola stabilmente dimerica) è anche un modo per valutare l'impatto di vari fenomeni (per esempio il photobleaching) sull'interruzione delle traiettorie di colocalizzazione per comprendere come tali inter- ruzioni possano erroneamente portare a interpretare come transiente un'interazione in realtà più stabile.

Si sono condotti degli esperimenti su cellule della linea SHSY-5Y trasfettate con il costrutto S6p75-LeuZip. Nella reazione di marcatura sono stati utilizzati 6nM di uoroforo rosso e 1nM di uoroforo verde.

Questi esperimenti sono ancora in fase di analisi, tuttavia le prime osservazioni (in accordo con altri esperimenti a singolo colore eettuati al NEST sulla stessa molecola) sembrano suggerire la possibilità che il legame tra le due unità monomeriche non sia stabile, come si osserva in Fig. 6.20. Infatti, dalle prime ricostruzioni di traiettorie di colocalizzazione si osservano dei segmenti di traiettorie che sembrano indicare as- sociazioni e dissociazioni tra le molecole, ed il numero di spot colocalizzati è molto basso rispetto al numero di spot verdi e rossi.

L'analisi di questi esperimenti è stata anche resa più dicoltosa dal fatto che le cellule sono state trasfettate e quindi non si è potuto controllare il livello di espressione del transgene che è risultato per la maggior parte delle cellule troppo elevato per uno studio a singola molecola.

In ogni caso, il costrutto S6p75-LeuZip è stato sviluppato molto recentemente presso il NEST ed è ancora sotto indagine per cui al momento non si possono trarre delle conclusioni denitive.

Figura 6.20: Esempio di un fotogramma di un lmato acquisito nel corso degli esperimenti sul controllo positivo p75 Leu-Zip su cui sono mostrate gli spot rilevati e le tracce di colocalizzazione. Simboli e scale di colore sono come in Fig. 6.17, ma con circonferenze magenta per uorofori localizzati nel canale rosso e ciano per il canale verde. Si può notare come anche visivamente ci siano molte zone localizzate verdi e rosse nell'immagine, e poche gialle, e ci siano poche traiettorie di colocalizzazione.

Capitolo 7

Conclusioni e sviluppi futuri

Alla conclusione di questo lavoro di tesi, presso il laboratorio NEST si possono fare di routine esperimenti in cui singole molecole di due uorofori diversi e spettralmente separati possono essere eccitate e visualizzate contemporaneamente in microscopia TIRF, con risoluzioni temporali almeno dell'ordine delle decine dei millisecondi.

Infatti, il protocollo per cambiare fra eccitazione con singolo o doppio laser è stato stabilito ed ottimizzato, il sistema per la rilevazione simultanea multicanale di due colori è stato allineato, ed ho ottimizzato i parametri della telecamera utilizzata su questo sistema. Inoltre, ho sviluppato un metodo per poter sovrapporre sotto il limite di risoluzione i due canali, producendo dei codici per ottimizzare il lavoro sperimentale e per calcolare la trasformazione necessaria; da notare che questo metodo ha anche la potenzialità per correggere, se fosse necessario, aberrazioni di vario tipo nel campo di rilevazione del set-up sperimentale, dato che il tavolino con cui si sposta un punto- campione ha una precisione inferiore alla decina di nanometri; ciò rappresenta una prima prospettiva per questo lavoro.

Oltre a ciò, ora esistono già alcuni script in MatLab (per ora con interfaccia utente molto limitata) per svolgere in modo semiautomatico la ricostruzione di traiettorie di singole particelle di due colori e delle particelle colocalizzate, e per valutarne quindi il grado di eterodimerizzazione; questi algoritmi sono stati per ora testati nel caso in cui la dierenza fra i due monomeri deriva solo dal uoroforo con cui sono stati marcati. Ho eettuato alcuni esperimenti per diminuire il photobleaching ed aumentare il rapporto segnale/rumore; tale lavoro è stato necessario perché, rispetto al caso a singolo colore, (i) è diminuita l'intensità all'obiettivo della luce laser a 635 nm, a causa del laser combiner, (ii) ci sono diminuzioni nell'intensità di uorescenza rilevata, essendoci ulteriori ltri ed elementi ottici nel dual view e nell'optomask, (iii) si sono notati problemi di interferenze (crosstalk) fra i due canali, specialmente di uorescenza aspecica nel canale del rosso eccitata dal laser del canale verde. I risultati ottenuti saranno comunque utili per tutti gli esperimenti di SPT, ed in generale di microscopia, anche a singolo o a più colori.

Da un punto di vista biologico abbiamo per ora solo indicazioni che confermano quanto visto in esperimenti di SPT a singolo colore, ed anche questi hanno sicuramente bisogno di essere ripetuti se non altro per aumentarne la statistica; ulteriori sviluppi sono inoltre suggeriti da quanto osservato.

Sicuramente è necessaria un'analisi dati più approfondita per ricavare informazio- ni più accurate e dettagliate sulle interazioni che si vorranno andare ad analizzare con questa tecnica. Ad esempio, poiché il fenomeno del photobleaching (che è stato notevolmente ridotto) dicilmente può essere eliminato completamente, se ne dovrà tenere conto nella fase di analisi dati. Infatti, se una delle due particelle appartenenti ad un dimero si spegne, il dimero verrà falsamente identicato come monomero, e quindi il tempo di vita di interazioni transienti verrà sottostimato. Si potrà corregge-

re a posteriori la vita media dei dimeri, estendendo eventualmente i metodi proposti in [25].

Inoltre, ancora non si è studiata la correlazione fra i parametri dinamici delle traiettorie (ad esempio, coeciente di diusione, coeciente di diusione anomala legato ad esempio al connamento o ad un moto con una componente a velocità costante, parametri di connamento) ed il grado di dimerizzazione; come accennato a pagina 91, ciò potrà anche essere utilizzato per migliorare la stima delle costanti dinamiche e di equilibrio nei processi di interazione.

Si penserà anche a un modo per sviluppare un controllo positivo migliore. Si potrebbe pensare a un metodo per ottenere solo eterodimeri stabili (il LeuZip por- ta comunque ad avere sia omodimeri che eterodimeri) individuando due peptidi che creino un legame fra di loro stabile, ma non con altre copie di se stessi. Avendo etero- dimeri stabili, una traccia di colocalizzazione non si può interrompere per separazione delle due molecole, ma a causa di altri fenomeni quali il photobleaching. Inoltre, se si ottenessero solo eterodimeri si sarebbe sicuri di dover rivelare tutti gli spot in entrambi i canali, per avere ad esempio una stima migliore dei falsi negativi nella ricerca delle colocalizzazioni; con esperimenti fatti con una sola specie marcata con due uorofori diversi, anche nel caso in cui il numero di monomeri sia lo stesso per entrambi i colori, ci si aspetta un numero totale di omodimeri (di un colore o dell'altro) uguale a quello degli eterodimeri.

Gli algoritmi di analisi sviluppati no a questo momento consentono la ricostru- zione delle traiettorie di colocalizzazione. Tuttavia, il metodo di SPT a due colori vorrà essere applicato anche allo studio di interazioni transienti in cui cioè si vor- rebbero poter seguire i movimenti di particelle che si associano e si dissociano per analizzare i dettagli delle interazioni come i tempi di associazione e dissociazione o la stechiometria dei complessi. Per poter ricostruire la traiettoria completa di ogni particella di ognuno dei due colori, ossia la traiettoria che include sia i tratti in cui c'è interazione sia i tratti in cui non c'è interazione, si pensa che si apporteranno ulteriori modiche al software u-track. Un modo potrebbe essere il seguente: date le tracce di colocalizzazione, si potrebbe fare il tracking sugli spot dei due colori considerando solo gli spot che non appartengono a tracce di colocalizzazione più gli spot iniziale e nale di tali tracce, eliminando quindi gli spot intermedi delle tracce di colocalizzazio- ne che già si sa a cosa vanno collegati sia nel passato che nel futuro. Gli spot iniziali e nali delle tracce di colocalizzazione possono essere forzati ad essere rispettivamente punti di ne e punti di inizio di traiettorie dei due colori impedendo il collegamento con altre particelle rispettivamente nel futuro e nel passato. Questo può essere fatto agendo sulla matrice dei costi che viene utilizzata per risolvere il problema. Questo tipo di analisi sarà in realtà resa più complicata da quegli spot dei due colori che non sono stati considerati colocalizzati (magari per una sottostima dell'incertezza di localizzazione), o dal caso in cui c'è stata la mancata rilevazione e localizzazione di uno spot in uno solo dei due canali, forse collegando due sottotraiettorie tramite la chiusura di un gap. Disponendo delle traiettorie complete nei due canali, tramite l'analisi della separazione e unione (merging e splitting) delle tracce e valutazioni ba- sate sull'intensità, si potrà provare a determinare la stechiometria dei complessi che potrebbero non essere solo forme dimeriche ma anche oligomeriche.

Altre eventuali ottimizzazioni potrebbero riguardare le risoluzioni spaziale e tem- porale. Le due sono collegate e si deve determinare un buon compromesso: per migliorare la prima si vorrebbe aumentare il rapporto segnale/rumore, ad esempio raccogliendo più fotoni. Questo potrebbe essere fatto aumentando il tempo di inte- grazione ma in questo modo viene peggiorata la risoluzione temporale; in alternativa, si potrebbe provare ad aumentare la potenza del laser di eccitazione in modo da poter migliorare la risoluzione temporale senza peggiorare il rapporto segnale-rumore, ma questo potrebbe peggiorare il photobleaching.

In alternativa si potrebbe lavorare sulla diminuzione del segnale di fondo, ad esem- pio è stato individuato un mezzo di coltura che potenzialmente dovrebbe diminuire il segnale di fondo e che potrà essere testato.

Le possibili applicazioni biologiche sono molteplici, e mirano a studiare le possibili interazioni molecolari alla base del funzionamento cellulare, ma anche la dinamica e la composizione di oggetti relativamente più grandi, quali le vescicole intracellulari. Discuterò brevemente solo la prospettiva da cui questo lavoro è partito, ovvero lo studio dei meccanismi di trasduzione del segnale a livello della membrana plasmatica, in particolare per quanto riguarda (pro)neurotrone ed i loro (co)recettori.

Una questione da lungo tempo dibattuta riguarda l'eventuale interazione tra p75 e TrkA per la formazione di siti ad alta anità per l'NGF. I due recettori, infatti, legano il ligando con un'anità bassa rispetto a quella presentata da siti di legame di cui non è stata ancora ben determinata la natura. Sono riportate alcune evidenze del fatto che alla formazione di tali siti contribuirebbero entrambi i recettori [22, 29], ma i meccanismi di interazione non sono chiari e circa trent'anni di ricerche hanno portato a risultati contraddittori.

Sono stati proposti alcuni modelli della possibile interazione tra i due recettori. Secondo un modello di presentazione (presentation model), l'NGF si legherebbe pri- ma al p75 e ciò aumenterebbe la concentrazione locale di NGF per il TrkA, oppure il ligando potrebbe essere direttamente trasferito al TrkA (ligand passing [5]); tale modello non richiederebbe un'interazione stabile tra i due recettori. Questa ipotesi concorda col fatto che il p75 è caratterizzato da associazione e dissociazione veloci col ligando mentre il TrkA ha una dinamica di associazione più lenta, ed è supportato da studi che mostrano la necessità del legame dell'NGF col p75NTR per la formazione dei siti ad alta anità [34]. Un altro modello proposto, un modello conformazionale, ipotizza un'interazione di TrkA e p75 in assenza di ligando: la coespressione di en- trambi i recettori causerebbe un cambio conformazionale nel TrkA portando ad una più veloce associazione con il ligando e quindi alla formazione un sito ad alta anità. Questo modello sarebbe supportato da esperimenti che mostrano la presenza di com- plessi dei due recettori e da studi sulla diusione del p75, che verrebbe immobilizzato dal TrkA anche in assenza della capacità di legare l'NGF con alta anità [19]. Inne un'ulteriore possibilità è che i due recettori comunichino attraverso una convergenza dei segnali a valle piuttosto che attraverso una diretta interazione extracellulare.

Un'indagine condotta mediante il single particle tracking (SPT) a due colori permetterebbe nalmente di visualizzare nel modo più diretto possibile il movimento dei due recettori e quindi studiarne in dettaglio l'eventuale associazione. L'esistenza, la dinamica, la stabilità di tale associazione potranno essere analizzate in presenza e in assenza di ligando per vericare l'esistenza di complessi preformati e confrontar- ne il comportamento in presenza del ligando oppure per vericare l'associazione dei recettori indotta dalla neurotrona. Potranno essere utilizzate forme mutate dei due recettori per analizzare in quali condizioni si osserva l'eventuale associazione e quali dierenze si notano nella loro dinamica correlata per provare a chiarire l'inuenza dei vari domini. Sfruttando inoltre delle forme uorescenti di (pro)neurotrone disponibi- li presso la Scuola Normale Superiore, sarà anche possibile monitorare la correlazione fra i movimenti dei recettori con i loro possibili ligandi.

Codici MatLab

Nelle prossime pagine vengono mostrati i principali codici che ho prodotto durante la tesi.

Non tutte le funzioni utilizzate si trovano nelle librerie standard di MatLab o nel pacchetto u-track; alcune funzioni, infatti, erano già state introdotte (ed altre modicate) nel gruppo di ricerca in cui la mia tesi si è svolta.

I codici mostrati vogliono solo esemplicare il lavoro da me svolto, e non c'è nessuna garanzia che possano essere utilizzabili così come sono al di fuori dei computer dedicati presso il NEST.

calibrazione

function Griglia(fname) if nargin==0 || isempty(fname) [ff,pp]=uigetfile('*.maf'); fname=fullfile(pp,ff); else [pp,ff]=fileparts(fname); end olddir=cd(pp); [~, fnameout]=fileparts(ff); fnameout=[fnameout 'out.maf']; fid=openw(fname,'rt'); s=''; while(1) t=fgets(fid); if t==-1 break else s=[s,t]; %#ok<AGROW> end end fclose(fid);

begin = regexp(s,'^.*?<\s*?XYZStagePointDefinitionList.*?>','match');

coordx = regexp(s,'StageXPos="(.*?)"','tokens'); coordy = regexp(s,'StageYPos="(.*?)"','tokens');

text=regexp(s,'(<XYZStagePointDefinition(?!List).*?StageXPos=").*?

(".*?StageYPos=").*?(".*?PositionIdentifier=")Position\d+?"\s*? PositionID="\d+?(".*?

</XYZStagePointDefinition>)','tokens','ignorecase','once');

textend=regexp(s,'</XYZStagePointDefinitionList>.*?

$','match','ignorecase','once'); xmin=str2double(coordx{1}); xmax=str2double(coordx{end}); ymin=str2double(coordy{end}); ymax=str2double(coordy{1});

prompt={'punti x' , 'punti y'};

defs={'9' ,'9'};

answ=inputdlg(prompt, 'dimensioni griglia', 1, defs);

dimx=str2num(answ{1}); %#ok<*ST2NM> dimy=str2num(answ{2}); dx=(xmax-xmin)/(dimx-1); dy=(ymax-ymin)/(dimy-1); fid=fopen(fnameout, 'wt'); fprintf(fid, begin{1}); for j=0:dimy-1 for n=0:dimx-1 x=xmin+n*dx; y=ymax-j*dy; I=j*dimx+n+1;

pos=['Position' num2str(I) '" PositionID="' num2str(I)];

formatstr=[text{1} '%.14f' text{2} '%.14f' text{3} pos

text{4}];

fprintf(fid,formatstr,x,y); end

cd(olddir);

end

A.2 Determinazione delle coordinate dei punti di

controllo dall'acquisizione della griglia

function [posx,posy,movieInfoRed,movieInfoGreen] = Overlay_Grid(filename)

%% Controllo input

if nargin == 0 || ~exist(filename, 'file')

[file, path] = uigetfile('*.lif', 'Open the grid');

filename = fullfile(path,file);

if isequal(path, 0) || isequal(file, 0), return; end

end if ~isempty(path) olddir=cd(path); else olddir=pwd; end

%% chiede parametri che deve inserire l'utente

optdlg.Resize='on';

optdlg.WindowStyle='normal';

optdlg.Interpreter='none';

%chiede dimensioni della griglia

dim=inputdlg({'x dimension', 'y dimension'}, 'Grid dimension', 1,

{'10', '10'}, optdlg);

dimx=str2num(dim{1}); dimy=str2num(dim{2});

answerP = inputdlg({'left','center','right'}, 'Black columns', 1,

{'0','3','0'},optdlg);

%viene chiesta l'ampiezza delle colonne di pixel neri tra le due finestre

% e ai lati in modo da dividere il filmato a seconda della disposizione %delle finestre. blpxls.left=str2num(answerP{1}); blpxls.center=str2num(answerP{2}); blpxls.right=str2num(answerP{3}); answer=ask_ParamGrid;

%% unisce le immagini in uno stack, legge dai metadati le coordinate del tavolino portaoggetti, salva lo stack

r=bfGetReader(filename); nseries=r.getSeriesCount; posx=cell(nseries,1); posy=cell(nseries,1); for ind=1:nseries if ind==1 [outmovie, ~,MetaData]=bfopenSeries(filename,ind);

posx{1} = MetaData.get('ATLCameraSettingDefinition|

StagePosX');

posy{1} = MetaData.get('ATLCameraSettingDefinition|

StagePosY');

stack=repmat(outmovie, [1 1 nseries]);

else

[stack(:,:,ind), ~, MetaData]=bfopenSeries(filename, ind);

StagePosY'); end end format long; posx=str2double(posx); posy=str2double(posy); [~, fnme]=fileparts(filename);

name=[fnme '_Stack' '.tif'];

bfsaveLuos(stack, name);

%% fa la maximum intensity projetion, la mostra, la salva maxProj=max(stack,[],3);

figure; imshow(maxProj,'DisplayRange',[]);

set(gcf,'numbertitle','off','name','Maximum Intensity Projection');

name=[fnme '_MaxProj' ];

bfsaveLuos(maxProj, [name '.tif']);

%% divide l'immagine nelle parti corrispondenti ai due canali, salva le due parti sizimg=size(maxProj,2); sznb=(sizimg-blpxls.left-blpxls.right); llp=blpxls.left+1; lrp=blpxls.left+floor((sznb-blpxls.center)/2); rlp=blpxls.left+ceil((sznb+blpxls.center)/2)+1; rrp=sizimg-blpxls.right; greenimg=maxProj(:,llp:lrp); redimg=maxProj(:,rlp:rrp);

%salva le due immagini per fare poi la detection

nameG=[fnme '_Green' '.tif'];

nameR=[fnme '_Red' '.tif'];

bfsaveLuos(greenimg,nameG); bfsaveLuos(redimg, nameR);

%% detection sulle due immagini per trovare le coordinate dei punti di contollo

%utilizzando le funzioni di u-track

[MDR, movieParamR,detectionParamR]=WriteParamGrid ( answer,path,fnme,'Red'); [MDG, movieParamG,detectionParamG]=WriteParamGrid ( answer,path,fnme,'Green'); defdir='\TrackingPackage\GaussianMixtureModels'; [ ~,nR, ~]=fileparts(nameR);

saveResultsR=struct('dir',[path nR defdir],'filename',[]);

mkdir(saveResultsR.dir); [ ~,nG, ~]=fileparts(nameG);

saveResultsG=struct('dir',[path nG defdir],'filename',[]);

mkdir(saveResultsG.dir); verbose=1; [movieInfoRed,exceptionsRed,localMaximaRed,backgroundRed,psfSigmaRed] = ... detectSubResFeatures2D_StandAlone(movieParamR,detectionParamR,saveResu ltsR,verbose); [movieInfoGreen,exceptionsGreen,localMaximaGreen,backgroundGreen,psfSi gma] = ... detectSubResFeatures2D_StandAlone(movieParamG,detectionParamG,saveResu ltsG,verbose);

%% Ordina i punti per determinare correttamente le coppie redP=movieInfoRed.xCoord;

R=sortrows(redP); M=cell(dimx,1); for j=1:dimx M{j}=zeros(dimy,2); i=(j-1)*dimy+1; M{j}=R(i:i+dimy-1,:); M{j}=sortrows(M{j},2); end redP=vertcat(M{1:dimx}); G=sortrows(greenP); M=cell(dimx,1); for j=1:dimx M{j}=zeros(dimy,2); i=(j-1)*dimy+1; M{j}=G(i:i+dimy-1,:); M{j}=sortrows(M{j},2); end greenP=vertcat(M{1:dimx});

save([saveResultsR.dir '\detectedFeatures.mat'],'redP','-append');

save([saveResultsG.dir '\detectedFeatures.mat'],'greenP','-append');

cd(olddir);

end

function [answer]= ask_ParamGrid

%chiede i parametri necessari per la detection sulla griglia

optdlg.Resize='on';

optdlg.WindowStyle='normal';

optdlg.Interpreter='none';

if ~pref('is','Luos','filterGauss2Dprc') ||

~pref('is','Luos','filterGauss2Dpart')

prompt = {'Percentile for background in filterGaurss2D',...

'Part of percentile for correcting background in

filterGaurss2D'}; defs = {'5','1'};

answer = inputdlg(prompt, 'Correction in filterGauss2D', 1, defs,

optdlg);

drawnow; pause(0.05);

pref('set','Luos','filterGauss2Dprc',str2double(answer{1}));

pref('set','Luos','filterGauss2Dpart',str2double(answer{2}));

end

if ~exist('verbose','var'), verbose=true; end

promptq = {'psf sigma','alpha Amplitude','alpha Distance',...

'visual','alpha Local',...

'iterations for estimating STD',...

'g: Gaussian; c: centroid','Verbose?'};

answq = {'1','0.01', '0.01',...

'0', '0.01',...

'0', ...

'g', int2str(verbose)};

answer = inputdlg(promptq, 'Detection Parameters', 1, answq,

optdlg);

end

%finalName può essere Red, Green, MaxProj nella griglia % usa la variabile answer che contiene i

% parametri che ho chiesto all'inizio NA=1.47;

bitdepth=16; lastimage=1;

MD=OpenMovie(path,[fnme '_' finalName '.tif']);

movieParam.channel=MD.channels_; movieParam.lastImageNum=lastimage; movieParam.firstImageNum=1;

if ~exist('verbose','var'), verbose=true; end

MD.pixelSize_=[]; MD.numAperture_=NA; MD.camBitdepth_=bitdepth; detectionParam.bitDepth=bitdepth; psfSigma = str2double(answer(1)); detectionParam.psfSigma = psfSigma; detectionParam.testAlpha =

struct('alphaR',0.05,'alphaA',str2double(answer{2}),...

'alphaD',str2double(answer{3}),'alphaF',0);

detectionParam.visual = str2num(answer{4}); %#ok<*ST2NM> %1 per vedere

le immagini con gi spot trovati, 0 altrimenti

detectionParam.doMMF = 0; %1 per provare a fare più fit su ogni

massimo

detectionParam.alphaLocMax = str2double(answer{5}); %alpha-local

detectionParam.numSigmaIter = str2num(answer{6}); %massimo numero di

iterazioni per la stima della sigma della psf

detectionParam.integWindow = 0; %finestra temporale per la media

if answer{7}=='c' detectionParam.calcMethod = 'c'; else detectionParam.calcMethod = 'g'; end verbose=str2num(answer{8}); end

A.3 Determinazione della funzione di

sovrapposizione dei due canali; confronto di varie

trasformazioni; calcolo

dei vari tipi di errore

(FRE, TRE, TRE')

function

[tform_similarity,tform_proj,tform_affine,tform_polyn,tform_polyn3,

tform_lwm,err] = Transformations(redP,greenP,...

tform_similarity,tform_proj,tform_affine,tform_polyn,tform_polyn3, tform_lwm)

%redP e greenP contengono le ccordinate di una griglia

TRE)

%se si danno le trasformazioni (che sono già state determinate da altri punti) in input,

%usa redP e greeP come punti su cui stimare l'incertezza (TRE'). %err è una struttura che contiene i vari errori calcolati

figure;scatter(redP(:,1),redP(:,2),'.'); hold on; scatter (greenP(:,1),greenP(:,2),'.'); title({'Grid'}); err=struct; %Similarity

if ~exist('tform_similarity')||~isempty ('tform_similarity')%se la

trasformazione non è data in input la trova t=0;

tform_similarity = cp2tform(redP,greenP, 'nonreflective

similarity');

%tform trasforma il rosso nel verde

else t=1;

end

u_simi = tforminv(tform_similarity, greenP);%tforminv mappa verde nel

rosso(u)

FRExy_simi = sqrt(sum((redP- u_simi).^2)/(length(redP)));

%u è il rosso trasformato con la trasf inversa, redP il rosso di partenza

FRE_simi=sqrt(FRExy_simi(1)^2+FRExy_simi(2)^2)*159.688;

if t~=0

TRE_primo_xy_simi=FRExy_simi; TRE_primo_simi= FRE_simi;

clear FRExy_simi FRE_simi

err.TRE_primo_xy_simi=TRE_primo_xy_simi; err.TRE_primo_simi=TRE_primo_simi; else %calcola il TRE err.FRExy_simi=FRExy_simi; err.FRE_simi=FRE_simi; transf_greenP=ones(length(redP),2); number_cp=length(redP); for i = 1: number_cp

remain_cp = [1:i-1 i + 1:number_cp];

tform = cp2tform(redP(remain_cp, :), greenP(remain_cp, :),

'nonreflective similarity');

transf_greenP(i, :) = tforminv(tform,greenP(i, :)); end

% TRE_simi = sqrt(sum(sum((redP -transf_greenP).^2))/ (length(redP)));

TRExy_simi = sqrt(sum((redP- transf_greenP).^2)/(length(redP))); TRE_simi=sqrt(TRExy_simi(1)^2+TRExy_simi(2)^2)*159.688;

err.TRExy_simi=TRExy_simi; err.TRE_simi=TRE_simi;

end

%visualizza l'effetto della trasformazione

figure;scatter(redP(:,1),redP(:,2),'.');

hold on;

scatter (u_simi(:,1),u_simi(:,2),'.');

title({'Similarity'});

%Projective

if ~exist('tform_proj')|| ~isempty ('tform_proj')

%tform trasforma il rosso nel verde

else t=1;

end

u_proj = tforminv(tform_proj, greenP);%tforminv mappa verde nel

rosso(u)

FRExy_proj = sqrt(sum((redP- u_proj).^2)/(length(redP)));

%u è il rosso trasformato con la trasf inversa, redP il rosso di partenza

FRE_proj=sqrt(FRExy_proj(1)^2+FRExy_proj(2)^2)*159.688;

if t~=0

TRE_primo_xy_proj=FRExy_proj; TRE_primo_proj= FRE_proj;

clear FRExy_proj FRE_proj

err.TRE_primo_xy_proj=TRE_primo_xy_proj; err.TRE_primo_proj=TRE_primo_proj; else %calcola il TRE err.FRExy_proj=FRExy_proj; err.FRE_proj=FRE_proj; number_cp=length(redP); for i = 1: number_cp

remain_cp = [1:i-1 i + 1:number_cp];

tform = cp2tform(redP(remain_cp, :), greenP(remain_cp, :),

'projective');

transf_greenP(i, :) = tforminv(greenP(i, :), tform); end

TRExy_proj = sqrt(sum((redP- transf_greenP).^2)/(length(redP))); TRE_proj=sqrt(TRExy_proj(1)^2+TRExy_proj(2)^2)*159.688;

err.TRExy_proj=TRExy_proj; err.TRE_proj=TRE_proj;

Documenti correlati