-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsaliency.asv
226 lines (163 loc) · 12.4 KB
/
saliency.asv
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
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
function [smap,scanpath] = saliency(image_name,input_image,conf_struct_path,output_folder,output_folder_mats,output_extension)
%%%%%%%%%%%%%%%%%%default arguments (nargin)
if ~exist('output_extension','var') output_extension = 'png'; end
if ~exist('output_folder','var') output_folder = 'output'; end
if ~exist('output_folder_mats','var') output_folder_mats = 'mats'; end
if ~exist('conf_struct_path','var') conf_struct_path = ''; end
if ~exist('input_image','var') input_image = imread(image_name); end
%non modified input_image
aux_input_image = input_image;
%%%%%%%%%%%%%%%%%%LOAD/CREATE CONFIG STRUCT PARAMS
[~,conf_struct_path_name,~] = fileparts(conf_struct_path);
if strcmp(conf_struct_path,'')==0
[conf_struct] = load(conf_struct_path); conf_struct = conf_struct.matrix_in;
else
confgen();
[conf_struct] = load('conf_default/config_1.mat'); conf_struct = conf_struct.matrix_in;
end
%discriminate if no foveation
if conf_struct.gaze_params.foveate == 0
conf_struct.gaze_params.ngazes = 1;
end
%color or grayscale image
conf_struct.color_params.nchannels = size(input_image,3);
conf_struct.color_params.channels = {'chromatic','chromatic2','intensity'};
%set gaze parameters
conf_struct.gaze_params.orig_height = size(aux_input_image,1);
conf_struct.gaze_params.orig_width = size(aux_input_image,2);
if conf_struct.gaze_params.fov_x == 0 && conf_struct.gaze_params.fov_y == 0
conf_struct.gaze_params.fov_y =round(conf_struct.gaze_params.orig_height/2);
conf_struct.gaze_params.fov_x =round(conf_struct.gaze_params.orig_width/2);
end
%set inhibition of return at zeros
conf_struct.gaze_params.ior_matrix = zeros(conf_struct.gaze_params.orig_height, conf_struct.gaze_params.orig_width);
%folders of mats separate or not? (to avoid overwriting)
%if ~conf_struct.file_params.unique_mats_folder
output_folder_mats = [output_folder_mats '/' conf_struct_path_name];
%end
%%%%%%%%%%%%%%%%%%INITIALIZE OUTPUT
[M,N,C] = size(input_image);
smap = zeros(M,N);
smaps = zeros(M,N,conf_struct.gaze_params.ngazes);
scanpath = zeros(conf_struct.gaze_params.ngazes+1,2);
iFactors = cell(1,3);
curvs = cell(1,3);
residuals = cell(1,3);
%%%%%%%%%%%%%%%%%%get folder_props and image_props
[folder_props] = get_folder_properties(output_folder,conf_struct_path_name,output_folder_mats,output_extension,conf_struct);
[image_props] = get_image_properties(input_image,image_name,folder_props,conf_struct);
[mat_props] = get_mat_properties(folder_props,image_props,conf_struct);
%%%%%%%%%%%%%%%%%%GET RUN FLAGS (LOAD,NEURODYN,RECONS...)
[run_flags] = get_run_flags(image_props,mat_props,conf_struct);
if run_flags.run_all==1
if run_flags.run_smaps
for k=1:conf_struct.gaze_params.ngazes
disp(['Gaze :' int2str(k)]);
conf_struct.gaze_params.gaze_idx = k-1; %starting at 0
input_image = double(aux_input_image);
%get_fig_opp(normalize_minmax(input_image,0,255),'img',folder_props,image_props,conf_struct);
%%%%%%%%%%%%% 1.im2opponent
input_image = get_rgb2opp(input_image,conf_struct); %! (depending on flag)
%get_fig_opp(input_image,'opp',folder_props,image_props,conf_struct);
%%%%%%%%%%%%% 2.foveate (or cortical mapping)
[input_image] = get_foveate(input_image,conf_struct);
ior_matrix_unfoveated = conf_struct.gaze_params.ior_matrix;
conf_struct.gaze_params.ior_matrix = get_foveate(conf_struct.gaze_params.ior_matrix,conf_struct);
%get_fig_opp(input_image,'fov',folder_props,image_props,conf_struct);
%%%%%%%%%%%%% resize (if foveated, do not resize)
[input_image] = get_resize(input_image,conf_struct);
[conf_struct.resize_params.M, conf_struct.resize_params.N, ~] = size(input_image);
[conf_struct.resize_params.fov_x,conf_struct.resize_params.fov_y] = movecoords( conf_struct.gaze_params.orig_height, conf_struct.gaze_params.orig_width, conf_struct.gaze_params.fov_x, conf_struct.gaze_params.fov_y , conf_struct.resize_params.M, conf_struct.resize_params.N);
%it has been resized or foveated (new image size), get new n_scales here
[conf_struct.wave_params.n_scales, conf_struct.wave_params.ini_scale, conf_struct.wave_params.fin_scale]= calc_scales(input_image, conf_struct.wave_params.ini_scale, conf_struct.wave_params.fin_scale_offset, conf_struct.wave_params.mida_min, conf_struct.wave_params.multires); % calculate number of scales (n_scales) automatically
[conf_struct.wave_params.n_orient] = calc_norient(input_image,conf_struct.wave_params.multires,conf_struct.wave_params.n_scales,conf_struct.zli_params.n_membr);
[conf_struct.gaze_params.height,conf_struct.gaze_params.width, ~] = size(input_image);
%%%%%%%%%%%%% save loaded struct properties
[loaded_struct,conf_struct] = get_loaded_struct(run_flags,folder_props,image_props,mat_props,conf_struct,k);
%%%%%%%%%%%%% 3. DWT
[curvs,residuals] = get_DWT(run_flags,loaded_struct,folder_props,image_props,C,k,input_image);
%get_fig_wav(curvs{1},'wav_c1',folder_props,image_props,conf_struct);
%get_fig_wav(curvs{2},'wav_c2',folder_props,image_props,conf_struct);
%get_fig_wav(curvs{3},'wav_c3',folder_props,image_props,conf_struct);
%%%%%%%%%%%%% 4. CORE, COMPUTE DYNAMICS
[iFactors] = get_dynamics(run_flags,loaded_struct,folder_props,image_props,C,k,curvs,residuals);
%get_fig_ifactor(iFactors{1},'ifactor_c1',folder_props,image_props,conf_struct);
%get_fig_ifactor(iFactors{2},'ifactor_c2',folder_props,image_props,conf_struct);
%get_fig_ifactor(iFactors{3},'ifactor_c3',folder_props,image_props,conf_struct);
%get_fig_ifactor_activity(iFactors{1},'ifactor_c1',folder_props,image_props,conf_struct);
%get_fig_ifactor_activity(iFactors{2},'ifactor_c2',folder_props,image_props,conf_struct);
%get_fig_ifactor_activity(iFactors{3},'ifactor_c3',folder_props,image_props,conf_struct);
if isempty(iFactors)
return;
end
%%%%%%%%%%%%% 5. FUSION
%residual to zero?
[residuals{1}] = get_residual_updated(loaded_struct,residuals{1});
[residuals{2}] = get_residual_updated(loaded_struct,residuals{2});
[residuals{3}] = get_residual_updated(loaded_struct,residuals{3});
residual_s_c = cs2sc(residuals,3,loaded_struct.wave_params.n_scales);
%change its cell dimensions back to its format
RF_ti_s_o_c = unify_channels_ti(iFactors{1},iFactors{2},iFactors{3},loaded_struct);
%residual_c_s = unify_channels_norient(residuals{1},residuals{2},residuals{3},loaded_struct);
%temporal mean for RF
RF_s_o_c = timatrix_to_matrix(RF_ti_s_o_c,loaded_struct);
%eCSF (depending on flag)
[RF_s_o_c] = get_eCSF(loaded_struct,RF_s_o_c);
%fusion
[smap,max_s,max_o,max_c] = get_fusion(RF_s_o_c, residual_s_c,loaded_struct);
%undistort
smap = get_undistort(loaded_struct,smap);
%deresize to original size
smap = get_deresize(loaded_struct,smap);
%update fov_x and fov_y
[maxval, maxidx] = max(smap(:));
[conf_struct.gaze_params.fov_y, conf_struct.gaze_params.fov_x] = ind2sub(size(smap),maxidx); %x,y
%set inhibition of return on current gaze (update and add)
conf_struct.gaze_params.ior_matrix = get_ior_matrix_newgaze(ior_matrix_unfoveated, max_s,conf_struct);
%get_fig_single(normalize_minmax(conf_struct.gaze_params.ior_matrix,0,1),'ior',folder_props,image_props,conf_struct);
%set ior smap (depending on a fusion factor)
if ~exist('conf_struct.fusion_params.ior_smap','var'), conf_struct.fusion_params.ior_smap=0; end
if conf_struct.fusion_params.ior_smap
smap=get_ior_gaussian(conf_struct.gaze_params.fov_x, conf_struct.gaze_params.fov_y, 1, max_s, conf_struct.gaze_params.orig_height, conf_struct.gaze_params.orig_width, conf_struct.gaze_params.img_diag_angle);
end
%set smooth smap (depending on a fusion factor)
smap=get_smooth(smap,conf_struct);
%normalize
smap = get_normalize(loaded_struct,smap);
%save
imwrite(smap, image_props.output_image_paths{k});
%delete files
run_delete_files(folder_props,image_props,loaded_struct,k);
%iterate
smaps(:,:,k) = smap;
end
end
%scanpath from files or from computed smaps(k)
scanpath = run_scanpath(run_flags,image_props,conf_struct,smaps);
%smap from means of gazed smaps
mean_smap = run_mean(run_flags,image_props,conf_struct,smaps);
smap = mean_smap;
%smap from density of scanpath
saccades_gaussian = run_gaussian(run_flags,image_props,conf_struct,scanpath);
%binary map from scanpath
saccades_bmap = run_bmap(run_flags,image_props,conf_struct,scanpath);
else
smap = imread(image_props.output_image_path);
scanpath = load(image_props.output_scanpath_path); scanpath = scanpath.scanpath;
end
if exist([folder_props.output_path '/gbg'],'file') system(['rm' ' ' folder_props.output_path '/gbg']); end; system(['ln -s ' 'mean' ' ' folder_props.output_path '/gbg']);
if exist([folder_props.output_path '/gbgs'],'file') system(['rm' ' ' folder_props.output_path '/gbgs']); end; system(['ln -s ' 'gazes' ' ' folder_props.output_path '/gbgs']);
mean2_path=[folder_props.output_path '/mean/2/']
mean2_path=[folder_props.output_path '/mean/2/']
mean2_ln_path=[folder_props.output_folder '/mean_2gazes_' folder_props.output_subfolder]
mean4_ln_path=[folder_props.output_folder '/mean_4gazes_' folder_props.output_subfolder]
if exist(mean2_path,'file') system(['rm' ' ' mean2_path]); end;
system(['ln -s ' ' ' mean2_path]);
if exist(mean4_path,'file') system(['rm' ' ' mean4_path]); end;
system(['ln -s ' folder_props.output_path '/mean/4/' ' ' mean4_path]);
%if exist([folder_props.output_folder '/copy_mean_2gazes_' folder_props.output_subfolder],'file') system(['rm' ' ' folder_props.output_folder '/copy_mean_2gazes_' folder_props.output_subfolder]); end; if exist([folder_props.output_path '/mean/2'],'file') system(['ln -s ' 'mean/2' ' ' folder_props.output_folder '/copy_mean_2gazes_' folder_props.output_subfolder]); end;
%if exist([folder_props.output_folder '/copy_mean_4gazes_' folder_props.output_subfolder],'file') system(['rm' ' ' folder_props.output_folder '/copy_mean_4gazes_' folder_props.output_subfolder]); end; if exist([folder_props.output_path '/mean/4'],'file') system(['ln -s ' 'mean/4' ' ' folder_props.output_folder '/copy_mean_4gazes_' folder_props.output_subfolder]); end;
%if exist([folder_props.output_folder '/copy_gaussian_2gazes_' folder_props.output_subfolder],'file') system(['rm' ' ' folder_props.output_folder '/copy_gaussian_2gazes_' folder_props.output_subfolder]); end; if exist([folder_props.output_path '/gaussian/2'],'file') system(['ln -s ' 'gaussian/2' ' ' folder_props.output_folder '/copy_gaussian_2gazes_' folder_props.output_subfolder]); end;
%if exist([folder_props.output_folder '/copy_gaussian_4gazes_' folder_props.output_subfolder],'file') system(['rm' ' ' folder_props.output_folder '/copy_gaussian_4gazes_' folder_props.output_subfolder]); end; if exist([folder_props.output_path '/gaussian/4'],'file') system(['ln -s ' 'gaussian/4' ' ' folder_props.output_folder '/copy_gaussian_4gazes_' folder_props.output_subfolder]); end;
%if exist([folder_props.output_folder '/copy_gaussian_10gazes_' folder_props.output_subfolder],'file') system(['rm' ' ' folder_props.output_folder '/copy_gaussian_10gazes_' folder_props.output_subfolder]); end; if exist([folder_props.output_path '/gaussian/10'],'file') system(['ln -s ' 'gaussian/10' ' ' folder_props.output_folder '/copy_gaussian_10gazes_' folder_props.output_subfolder]); end;
end