forked from Computational-Periscopy/Ordinary-Camera
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtable_S1.m
145 lines (121 loc) · 4.98 KB
/
table_S1.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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
%% Occluder position estimation: Grid search method on cost function
% Starts with a coarse grid and then adaptively refines grid based on most
% recent estimates.
%
% ------------------------------Pseudo-code------------------------------
% 1. Search (px,py,pz) jointly on a coarse 5x5x5 grid. Using the threshold
% sigma_th1 =0.75, to select the largest K normalized singular values.
% 2. For each coordinate (say px) refine estimate on finer grid and keep
% others fixed (py, pz). Repeat for other coordinates (in the order px,
% pz, py). At the (ii+1)-th iteration, the grid for each coordinate has
% limits [current_p_est-range_vals(ii), current_p_est+range_vals(ii)].
% In this way the new search region is centred on the most recent
% estimate of the occluder position.
% 3. Repeat step 2 with finer grid.
% -----------------------------------------------------------------------
% Last Modified by $John Murray-Bruce$ at Boston University
% v1.0 23-Jan-2018 10:31:32
% v2.0 08-Nov-2018 14:14:57 (Clean-up and commented for sharing -JMB)
% Manuscript:
% Saunders, C. and Murray-Bruce, J and Goyal, V.K., 'Computational
% Periscopy with and Ordinary Digital Camera', Nature, 2018.
% Functions
addpath('Functions')
clear variables;
close all; clc;
% Available hidden test scenes data choose one from [scene name: 'key']
% * RGB bars scene: 'rgb'
% * Text 'BU' scene: 'bu'
% * Mushroom scene: 'mushroom'
% * Tommy scene: 'tommy'
testscene = 'mushroom';
numPixels = 1008;
% MONITOR DISCRETIZATION
Ndiscr_mon = 1; % First coarse grid!
viewAngleCorrection = true;
useEstimatedOccPos = false;
load_experiment_config_data_localization;
downsamp_factor = 4;
bgSub = 0;
switch lower(testscene)
case 'rgb'
[camera_capture,ground_truth1]=load_image1('image_test_colbar20.mat',datafilepath,downsamp_factor);
n_iter = 4;
sigma_th1 = 0.75;
sigma_th2 = 0.2;
case 'bu'
[camera_capture,ground_truth1]=load_image1('image_test_bur20.mat',datafilepath,downsamp_factor);
n_iter = 3;
sigma_th1 = 0.75;
sigma_th2 = 0.5;
case 'mushroom'
[camera_capture,ground_truth1]=load_image1('image_test_mushroom20.mat',datafilepath,downsamp_factor);
n_iter = 3;
sigma_th1 = 0.75;
sigma_th2 = 0.2;
case 'tommy'
[camera_capture,ground_truth1]=load_image1('image_test_tommy20.mat',datafilepath,downsamp_factor);
n_iter = 4;
sigma_th1 = 0.75;
sigma_th2 = 0.5;
otherwise
disp('No such test scene exists, try ''RGB,')
end
meas.r = camera_capture(:,:,1);
meas.g = camera_capture(:,:,2);
meas.b = camera_capture(:,:,3);
N_oneparam = 30;
%
p_est_all = zeros(n_iter,3);
range_vals = [0.025 0.0125 0.00625 0.003125]*4;
for ii=1:n_iter
a = tic;
if ii<2
% Global search step
IIx = 5; IIy = 5; IIz = 5;
simuParams.Ndiscr_mon = 2;
xhatvals = linspace(0.1,0.6,IIx);
yhatvals = linspace(0.1,0.6,IIy);
zhatvals = linspace(0.0,0.3,IIz);
II = [IIx IIy IIz];
gridvals(1,:) = xhatvals;
gridvals(2,:) = yhatvals;
gridvals(3,:) = zhatvals;
[p_est, ~] = occluderposgridsearch(meas,simuParams,Occ_size,...
gridvals,II,downsamp_factor,sigma_th1);
else
% Corordinate descent step
simuParams.Ndiscr_mon = 1;
clear gridvals;
arange_val = range_vals(ii-1);
sigma_th = sigma_th2/(10^(ii-2));
gridvals(1,:) = linspace(p_est(1) - arange_val, p_est(1) + arange_val, N_oneparam);
xhatvals = gridvals(1,:);
gridvals(2,:) = p_est(2); gridvals(3,:) = p_est(3);
II = [N_oneparam 1 1];
[p_est, ~] = occluderposgridsearch(meas,simuParams,Occ_size,...
gridvals,II,downsamp_factor,sigma_th);
gridvals(3,:) = linspace(p_est(3) - arange_val, p_est(3) + arange_val, N_oneparam);
zhatvals = gridvals(3,:);
gridvals(1,:) = p_est(1); gridvals(2,:) = p_est(2);
II = [1 1 N_oneparam];
[p_est, ~] = occluderposgridsearch(meas,simuParams,Occ_size,...
gridvals,II,downsamp_factor,sigma_th);
simuParams.Ndiscr_mon = 10;
gridvals(2,:) = linspace(p_est(2) - arange_val, p_est(2) + arange_val, N_oneparam);
yhatvals = gridvals(2,:);
gridvals(1,:) = p_est(1); gridvals(3,:) = p_est(3);
II = [1 N_oneparam 1];
[p_est, ~] = occluderposgridsearch(meas,simuParams,Occ_size,...
gridvals,II,downsamp_factor,sigma_th);
gridvals(1,:) = xhatvals;
gridvals(2,:) = yhatvals;
gridvals(3,:) = zhatvals;
end
p_est_all(ii,:) = p_est;
disp(['Interation: ',num2str(ii),', Time Elapsed (s): ' num2str(toc(a))]);
end
% Correct reference point for y-axis (to match manuscript's Fig. 1)
p_est(2) = D - p_est(2);
disp('Estimated Occluder Position [(hat{p}_o)_x, (hat{p}_o)_y, (hat{p}_o)_z] = p_est')
p_est