-
Notifications
You must be signed in to change notification settings - Fork 0
/
testTORTmanual_track.m
81 lines (68 loc) · 2.61 KB
/
testTORTmanual_track.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
close all
clear all
addpath('./RET_Tort')
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Debug Flag
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
dbf=0;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Paramaters
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
smoothxy=0.01;
tortpar.k0=10; % scale factor
%tortpar.h=0.01; % hysteresis threshold: veins=0.01
tortpar.h=0.03; % hysteresis threshold: arteries=0.03
tortpar.passo=0.1; % resampling step (the smaller is better (era 0.5))
tortpar.lmin=1; % minimum distance between two breaking points
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Load a set of user-chosen images, manually define vessels by clicking on
%% vessel centerline, and evaluate tortuosities
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
[fn,pathdata]=uigetfile('*.jpg','Load an Image','MultiSelect','on');
titlewritten=0;
for ctim=1:length(fn)
% Load image
fname=fn{ctim};
disp(sprintf('Evaluation Image %s : %i of %i', fname,ctim, length(fn)));
xo=im2double(imread([pathdata,fname]));
xroi=xo(:,:,2);
sx=size(xo,1);
sy=size(xo,2);
% Display image and draw centerline
imagesc(xroi)
%[vy,vx]=getpts();
h=drawpolyline();
vy=h.Position(:,1);
vx=h.Position(:,2);
close all
% Build vessel structure
seg(ctim).x=vx;
seg(ctim).y=vy;
seg(ctim).imagename=fname;
seg(ctim).dir=[];
seg(ctim).ppx=[];
seg(ctim).ppy=[];
seg(ctim).t=[];
% Create smoothed spline version of vessel centerline
segs(ctim)=TORTspline(seg(ctim),smoothxy,dbf);
% Evaluate tortuosity metrics
[s,chord,tc,tsc,ad,nc]=TORTothers(segs(ctim),dbf);
seg_lpp=RETlpp(segs(ctim),tortpar.passo,dbf);
segs(ctim).t=TORTsegind(segs(ctim).ppx,segs(ctim).ppy,tortpar,dbf);
T=segs(ctim).t;
tindexes=TORTindex(s,chord,tc,tsc,T,dbf);
tindexes=[tindexes,ad,nc];
segs(ctim).t=tindexes;
% Save values in a txt files
F=fopen([pathdata,'\TortIndex.txt'],'a+');
if(titlewritten==0)
fprintf(F,'Image Name, Tortuosity, s/chord-1, tc, tsc, tc/s, tsc/s, tc/chord, tsc/chord, chandrinos, goh\n');
titlewritten=1;
end;
fprintf(F,'%s',fname);
for ctt=1:length(tindexes);
fprintf(F,',%f',tindexes(ctt));
end;
fprintf(F,'\n');
fclose(F);
end;