Skip to content

Commit 767d4b6

Browse files
authored
Add exclude_zero_mask_values (#66)
Adds option to exclude 0 values from mapset
1 parent d1434e9 commit 767d4b6

2 files changed

Lines changed: 26 additions & 6 deletions

File tree

CanlabCore/@image_vector/image_similarity_plot.m

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -304,7 +304,7 @@
304304
bicolor = false;
305305
treat_zero_as_data = 0; % Default of 0 means treat zero value as missing data.
306306
Error_STD=0;
307-
307+
exclude_zero_mask_values = 0; % default so that 0 mask/pattern expression values are NOT excluded
308308

309309
% optional inputs with default values
310310
% -----------------------------------
@@ -368,6 +368,10 @@
368368

369369
case 'Error_STD'
370370
Error_STD = 1;
371+
372+
case 'exclude_zero_mask_values'
373+
exclude_zero_mask_values = 1;
374+
371375
otherwise, warning(['Unknown input string option:' varargin{i}]);
372376
end
373377
end
@@ -489,7 +493,9 @@
489493

490494
% r(im, :) = corr_matrix(double(mask.dat(:,im)), double(obj.dat));
491495

492-
if treat_zero_as_data==1
496+
if treat_zero_as_data==1 && exclude_zero_mask_values == 1
497+
r(im, :) = canlab_pattern_similarity(obj.dat, mask.dat(:, im), 'correlation','treat_zero_as_data', 'exclude_zero_mask_values');
498+
elseif treat_zero_as_data==1 && exclude_zero_mask_values==0
493499
r(im, :) = canlab_pattern_similarity(obj.dat, mask.dat(:, im), 'correlation','treat_zero_as_data'); % mask contains the pattern image (signature or binary mask) to apply.
494500
else
495501
r(im, :) = canlab_pattern_similarity(obj.dat, mask.dat(:, im), 'correlation');

CanlabCore/Statistics_tools/canlab_pattern_similarity.m

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,8 @@
6262
% rather than being a missing value) or binary map. In this case, you
6363
% can use 'treat_zero_as_data', 1 to treat the zeros as data values.
6464
%
65+
% **exclude_zero_mask_values**
66+
%
6567
% :Outputs:
6668
% **similarity_output**
6769
% Matrix of similarity measures.
@@ -138,7 +140,6 @@
138140
% than missing data
139141
%
140142

141-
142143
% ---------------------------------
143144
% Defaults and optional inputs
144145
% ---------------------------------
@@ -148,6 +149,7 @@
148149
doignoremissing = false; % ignore warnings for missing voxels
149150
doprintwarnings = true; % print warnings regarding missing voxels, etc.
150151
treat_zero_as_data = false; % Treat zero value as missing data.
152+
exclude_zero_mask_values = false;
151153

152154
if any(strcmp(varargin, 'ignore_missing'))
153155
doignoremissing = true;
@@ -181,6 +183,10 @@
181183
treat_zero_as_data = true;
182184
end
183185

186+
if any(strcmp(varargin, 'exclude_zero_mask_values'))
187+
exclude_zero_mask_values = true;
188+
end
189+
184190
% if docosine && docorr, error('Choose either cosine_similarity or correlation, or no optional inputs for dot product'); end
185191

186192
% ---------------------------------
@@ -210,7 +216,15 @@
210216

211217
end
212218

219+
if exclude_zero_mask_values
220+
221+
badvals_mask = pattern_weights == 0 | isnan(pattern_weights);
222+
223+
else
224+
225+
badvals_mask = isnan(pattern_weights);
213226

227+
end
214228

215229

216230
% ---------------------------------
@@ -232,7 +246,7 @@
232246
switch sim_metric
233247
case 'corr'
234248

235-
similarity_output(:, i) = image_correlation(dat, pattern_weights(:, i), badvals);
249+
similarity_output(:, i) = image_correlation(dat, pattern_weights(:, i), badvals, badvals_mask);
236250

237251
case 'cosine'
238252

@@ -377,12 +391,12 @@
377391
end % function
378392

379393

380-
function r = image_correlation(dat, pattern_weights, badvals, varargin)
394+
function r = image_correlation(dat, pattern_weights, badvals, badvals_mask)
381395

382396

383397
for i = 1:size(dat, 2) % Loop because we may have different voxel exclusions in each image
384398

385-
inmask = ~badvals(:, i);
399+
inmask = ~badvals(:, i) & ~badvals_mask(:, i);
386400

387401
r(i, 1) = corr(pattern_weights(inmask), dat(inmask, i)); % Correlation, excluding out-of-image pattern_weights image-wise
388402

0 commit comments

Comments
 (0)