254 lines
6.8 KiB
Matlab
254 lines
6.8 KiB
Matlab
|
|
close all
|
|
clear all
|
|
|
|
pkg load signal
|
|
|
|
# Use with files generated by export_stats.sh
|
|
|
|
dataDir = 'SET_PATH_TO_RESULTS_DIR';
|
|
resultsToShow = 1; % 1=single loc, 2=merged loc, 3=consecutive
|
|
|
|
datasetPrefix = 'Stat';
|
|
datasets = [0 1 6 7 9 14 11 111]; % 0 1 6 7 8 9 11 12
|
|
datasetsName = {'SURF' 'SIFT' 'ORB' 'FAST/FREAK' 'FAST/BRIEF' 'GFTT/FREAK' 'GFTT/BRIEF' 'BRISK' 'GFTT/ORB' 'KAZE' 'ORB-OCTREE' 'SuperPoint' 'SURF/FREAK' 'GFTT/DAISY' 'SURF/DAISY'};
|
|
datasetsName{112} = 'SuperGlue'
|
|
sep = [0, 1000, 3000, 5000, 7000, 9000, 12000];
|
|
sepName = {'16:51', '17:31', '17:58', '18:30', '18:59', '19:42'};
|
|
|
|
if resultsToShow == 3
|
|
sep = [0, 1000, 3000, 5000, 7000, 9000];
|
|
sepName = {'17:27', '17:54', '18:27', '18:56', '19:35'};
|
|
datasetPrefix = 'Consecutive'
|
|
endif
|
|
|
|
percentResults = {};
|
|
totalResults = {};
|
|
locResults = {};
|
|
|
|
figure
|
|
|
|
colors = get(gca, 'ColorOrder');
|
|
tmp=colors(3,:);
|
|
colors(3,:) = colors(5,:);
|
|
colors(5,:) = tmp;
|
|
|
|
globalSeparators = [];
|
|
globalx = [];
|
|
globaly = [];
|
|
globalc = [];
|
|
|
|
for d=1:length(datasets)
|
|
|
|
data = dlmread([dataDir '/' datasetPrefix num2str(datasets(d)) '-Loop-Map_id-' '.txt'], '\t', 1, 0, "emptyvalue", NaN);
|
|
|
|
curvesBeg = 2;
|
|
curvesEnd = size(data,2)-5; % -4 for '0', -5 for '1'
|
|
|
|
if resultsToShow == 2
|
|
curvesBeg = 8; % 2 if only 4 merged_reduced in stats, 8 to skip first 6
|
|
curvesEnd = size(data,2);
|
|
elseif resultsToShow == 3
|
|
curvesEnd = size(data,2);
|
|
endif
|
|
curves = curvesEnd - curvesBeg + 1;
|
|
|
|
percentResultsTmp = zeros(curves, length(sep)-1);
|
|
totalResultsTmp = zeros(curves, length(sep)-1);
|
|
locResultsTmp = zeros(curves, length(sep)-1);
|
|
|
|
offset = 1;
|
|
|
|
for i = 1:curves
|
|
index = i + curvesBeg - 1;
|
|
separators = [];
|
|
x_all = [];
|
|
y_all = [];
|
|
m_all = [];
|
|
previousMax = 0;
|
|
for j = 1:length(sep)-1
|
|
x = data(:,1);
|
|
y = data(:,index);
|
|
y = y(x>=sep(j) & x<=sep(j+1), :);
|
|
x = x(x>=sep(j) & x<=sep(j+1), :);
|
|
minimum = x(1,1);
|
|
separators = [separators previousMax];
|
|
x = x - (minimum-previousMax);
|
|
previousMax = x(end,1);
|
|
y = y + 1;
|
|
m = y;
|
|
y(y>0) = 1;
|
|
y(isnan(y)) = 0;
|
|
percent = sum(y)/length(y);
|
|
percentResultsTmp(i,j) = percent;
|
|
locResultsTmp(i,j) = sum(y);
|
|
totalResultsTmp(i,j) = length(y);
|
|
y(y>0) = -(d-1)*curves -i - (d-1)*offset;
|
|
%x(y==0) = nan;
|
|
m(y==0) = nan;
|
|
y(y==0) = nan;
|
|
if resultsToShow == 2
|
|
if i==1 %% Merged 1, 6
|
|
m(m==1) = 1;
|
|
m(m==2) = 6;
|
|
elseif i==2 %% Merged 1,3(2 sessions),5
|
|
m(m==1) = 1;
|
|
m(m==2) = 3;
|
|
m(m==3) = 3;
|
|
m(m==4) = 5;
|
|
elseif i==3 %% Merged 2(2 sessions),4,6
|
|
m(m==1) = 2;
|
|
m(m==2) = 2;
|
|
m(m==4) = 6;
|
|
m(m==3) = 4;
|
|
elseif i>=4 %% Merged 1, 2(2 sessions), 3(2 sessions),4,5,6
|
|
m(m==1) = 1;
|
|
m(m==2) = 2;
|
|
m(m==3) = 2;
|
|
m(m==4) = 3;
|
|
m(m==5) = 3;
|
|
m(m==6) = 4;
|
|
m(m==7) = 5;
|
|
m(m==8) = 6;
|
|
endif
|
|
endif
|
|
x = upsample(x, 2);
|
|
y = upsample(y, 2);
|
|
m = upsample(m, 2);
|
|
x(2:2:end-1) = x(3:2:end);
|
|
y(2:2:end-1) = y(3:2:end);
|
|
m(2:2:end) = m(1:2:end);
|
|
x = x(1:end-1);
|
|
y = y(1:end-1);
|
|
m = m(1:end-1);
|
|
|
|
x_all = [x_all nan x'];
|
|
y_all = [y_all nan y'];
|
|
m_all = [m_all nan m'];
|
|
endfor
|
|
if resultsToShow == 2
|
|
globalx = [globalx x_all];
|
|
globaly = [globaly y_all];
|
|
globalc = [globalc m_all];
|
|
else
|
|
plot(x_all,y_all, 'linewidth', 3, 'color', colors(i,:))
|
|
hold on
|
|
endif
|
|
separators = [separators previousMax];
|
|
globalSeparators = separators;
|
|
endfor
|
|
percentResults{1,d} = percentResultsTmp;
|
|
totalResults{1,d} = totalResultsTmp;
|
|
locResults{1,d} = locResultsTmp;
|
|
endfor
|
|
|
|
if resultsToShow == 2
|
|
indColors = ones(length(globalc), 3);
|
|
for j=1:length(globalc)
|
|
if ~isnan(globalc(j))
|
|
indColors(j,:) = colors(globalc(j),:);
|
|
endif
|
|
endfor
|
|
for i=1:6
|
|
tmpx = globalx;
|
|
tmpy = globaly;
|
|
tmpx(globalc~=i) = nan;
|
|
tmpy(globalc~=i) = nan;
|
|
plot(tmpx, tmpy, 'linewidth', 3, 'color', colors(i,:));
|
|
if i==1
|
|
hold on
|
|
endif
|
|
endfor
|
|
endif
|
|
|
|
for j=1:length(globalSeparators)
|
|
x = globalSeparators(j);
|
|
plot([x,x],[(-length(datasets)*(curves+1)) ,0], 'k','linewidth', 2);
|
|
endfor
|
|
|
|
for d=1:length(datasets)
|
|
annotation ("textbox", [0, 0.96-((d-0.5)/length(datasets))*0.95, 0,0], 'string', datasetsName{datasets(d)+1})
|
|
endfor
|
|
for s=1:length(sep)-1
|
|
annotation ("textbox", [0.1 + ((separators(s+1)-separators(s))/2+separators(s))/separators(end)*0.75, 0.98, 0,0], 'string', sepName{s})
|
|
endfor
|
|
axis('tight')
|
|
|
|
|
|
|
|
set(gca, 'units', 'normalized');
|
|
Tight = get(gca, 'Position');
|
|
NewPos = [Tight(1) 0.01 0.77 0.95]; %New plot position [X Y W H]
|
|
set(gca, 'Position', NewPos);
|
|
if length(sep) == 7
|
|
legend('16:46', '17:27', '17:54', '18:27', '18:56', '19:35', "location", 'northeastoutside' )
|
|
else
|
|
legend('16:46', '17:27', '17:54', '18:27', '18:56', "location", 'northeastoutside' )
|
|
endif
|
|
box off
|
|
axis off
|
|
|
|
#disp(percentResults);
|
|
#disp(totalResults);
|
|
|
|
figure;
|
|
for d=1:length(datasets)
|
|
subplot(4,2,d)
|
|
data=percentResults{1,d}*100;
|
|
data(isnan(data)) = 0;
|
|
hAxes = gca;
|
|
% Upscaling the image to reduce anti-aliasing effect in pfd viewers
|
|
scale = 50;
|
|
tickXStep = zeros(1, size(data, 2));
|
|
tickYStep = zeros(1, size(data, 1));
|
|
dataUp = upsample(upsample(data',scale)',scale);
|
|
for x=0:size(data, 2)-1
|
|
for y=1:scale-1
|
|
dataUp(:,(x*scale+1)+y) = dataUp(:,x*scale+1);
|
|
endfor
|
|
tickXStep(1,x+1) = scale/2 + scale*x;
|
|
endfor
|
|
for x=0:size(data, 1)-1
|
|
for y=1:scale-1
|
|
dataUp((x*scale+1)+y,:) = dataUp(x*scale+1,:);
|
|
endfor
|
|
tickYStep(1,x+1) = scale/2 + scale*x;
|
|
endfor
|
|
imagesc( hAxes, dataUp, [0, 100])
|
|
%title({"",datasetsName{datasets(d)+1}})
|
|
colors = [ones(100,1) [1:100]'*0.01 [1:100]'*0];
|
|
colors(1,:) = 1;
|
|
colormap( hAxes , colors)
|
|
c = colorbar;
|
|
labels = {};
|
|
for v=get(c,'ytick'), labels{end+1} = sprintf('%d%%',v); end
|
|
set(c,'yticklabel',labels);
|
|
if mod(d,2) == 1
|
|
ylabel("Map")
|
|
endif
|
|
xlabel([datasetsName{datasets(d)+1} " Localization"])
|
|
set(gca, "xaxislocation", "top");
|
|
set(gca, 'XTick', tickXStep)
|
|
set(gca, 'XTickLabel', sepName, 'fontsize',7)
|
|
set(gca, 'YTick', tickYStep)
|
|
if resultsToShow == 3
|
|
set(gca, 'YTickLabel', {'16:46', '17:27', '17:54', '18:27', '18:56'}, 'fontsize',7)
|
|
elseif resultsToShow == 2
|
|
set(gca, 'YTickLabel', {'1+6', '1+3+5', '2+4+6', '1+2+3+4+5+6', '1-2-3-4-5-6', 'not set'}, 'fontsize',7)
|
|
else
|
|
set(gca, 'YTickLabel', {'16:46', '17:27', '17:54', '18:27', '18:56', '19:35'}, 'fontsize',7)
|
|
endif
|
|
endfor
|
|
|
|
% compute cumulative localizations
|
|
cumResults = zeros(curves+2, length(datasets)+1);
|
|
for d=1:length(datasets)
|
|
cumResults(1,d+1) = datasets(d);
|
|
cumResults(2:end-1,d+1) = round(sum(locResults{1,d}, 2) ./ sum(totalResults{1,d}, 2) * 100);
|
|
if resultsToShow == 1
|
|
cumResults(end,d+1) = round(sum(sum(locResults{1,d}.*eye(curves,curves))) / sum(totalResults{1,d},2)(1,1) * 100);
|
|
endif
|
|
end
|
|
cumResults(2:end-1,1) = 1:curves;
|
|
cumResults
|