Skip to content

Commit

Permalink
Updated: Added new options for defining minimum slucter extent and ov…
Browse files Browse the repository at this point in the history
…erlap to

         atlas label to cat_surf_results.m and cat_vol_slice_overlay.m

Changed paths:
 M CHANGES.txt
 M cat_surf_results.m
 M cat_vol_slice_overlay.m
  • Loading branch information
ChristianGaser committed Feb 9, 2025
1 parent 1157f9b commit 00bd649
Show file tree
Hide file tree
Showing 3 changed files with 118 additions and 67 deletions.
10 changes: 10 additions & 0 deletions CHANGES.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,14 @@
------------------------------------------------------------------------
r2647 | gaser | 2025-02-09 01:53:58

Changed paths:
M CHANGES.txt
M cat_surf_results.m
M cat_vol_slice_overlay.m

Updated: Added new options for defining minimum slucter extent and overlap to
atlas label to cat_surf_results.m and cat_vol_slice_overlay.m
------------------------------------------------------------------------
r2630 | dahnke | 2025-01-12 18:06:50

Changed paths:
Expand Down
106 changes: 62 additions & 44 deletions cat_surf_results.m
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,8 @@
% Select border overlay.
% 0 - no border, 1 - Desikan-Killiany DK40, 2- Destrieux 2009, 3 - HCP Multi-Modal Parcellation
%
% * cat_surf_results('atlas',1..3)
% Select atlas labeling.
% * cat_surf_results('atlas',1..3,min_extent,min_overlap)
% Select atlas labeling and apply minimum cluster extent and atlas overlap.
% 1 - Desikan-Killiany DK40, 2- Destrieux 2009, 3 - HCP Multi-Modal Parcellation
%
% * cat_surf_results('view',1..3)
Expand Down Expand Up @@ -1184,12 +1184,23 @@
select_border(border_mode);
end

%- set atlas
%- set atlas
%======================================================================
case 'atlas'
atlas_mode = varargin{1};
if nargin > 2
min_extent = varargin{2};
else
min_extent = 1;
end
if nargin > 3
min_overlap = varargin{3};
else
min_overlap = 1;
end

if any(atlas_mode == 1:3)
select_atlas(atlas_mode);
select_atlas(atlas_mode, min_extent, min_overlap);
end

%- set view
Expand All @@ -1208,10 +1219,12 @@
switch varargin{1}
case {1,'white'}
if get(H.bkg, 'Value')==0
H.bkg_val = [1 1 1];
cat_surf_results('background');
end
case {0,2,'black'}
if get(H.bkg, 'Value')==1
H.bkg_val = [0 0 0];
cat_surf_results('background');
end
otherwise
Expand Down Expand Up @@ -1548,7 +1561,7 @@ function disphist(type)
if nargout, Ho = H; end

%==========================================================================
function Ho = select_atlas(atlas)
function Ho = select_atlas(atlas, min_extent, min_overlap)
global H

% get threshold from clipping
Expand Down Expand Up @@ -1608,26 +1621,28 @@ function disphist(type)

dmax = d(indp); dmax = max(dmax(N));

if H.logP(H.results_sel), fprintf('\n%1.5f\t%16d', 10^(-dmax), k);
else, fprintf('\n%.5f\t%16d', dmax, k); end

Nrdata = rdata2(N);
roi_size = zeros(size(rcsv, 1) - 1, 1);

for j = 2:size(rcsv, 1)
ind3 = find(Nrdata == rcsv{j, 1});
roi_size(j - 1) = 100 * length(ind3) / k;
end

% sort wrt size
[ii, jj] = sort(roi_size, 'descend');
jj(ii == 0) = [];

for j = 1:length(jj)
if roi_size(jj(j)) > 1
if j == 1, fprintf('\t%3.0f%s\t%s\n', roi_size(jj(j)), '%', rcsv{jj(j) + 1, 2});
else, fprintf('%7s\t%16s\t%3.0f%s\t%s\n', ' ', ' ', ...
roi_size(jj(j)), '%', rcsv{jj(j) + 1, 2});
if k >= min_extent
if H.logP(H.results_sel), fprintf('\n%1.5f\t%16d', 10^(-dmax), k);
else, fprintf('\n%.5f\t%16d', dmax, k); end

Nrdata = rdata2(N);
roi_size = zeros(size(rcsv, 1) - 1, 1);

for j = 2:size(rcsv, 1)
ind3 = find(Nrdata == rcsv{j, 1});
roi_size(j - 1) = 100 * length(ind3) / k;
end

% sort wrt size
[ii, jj] = sort(roi_size, 'descend');
jj(ii == 0) = [];

for j = 1:length(jj)
if roi_size(jj(j)) >= min_overlap
if j == 1, fprintf('\t%3.0f%s\t%s\n', roi_size(jj(j)), '%', rcsv{jj(j) + 1, 2});
else, fprintf('%7s\t%16s\t%3.0f%s\t%s\n', ' ', ' ', ...
roi_size(jj(j)), '%', rcsv{jj(j) + 1, 2});
end
end
end
end
Expand All @@ -1654,25 +1669,28 @@ function disphist(type)
k = length(N);

dmin = d(indn); dmin = min(dmin(N));
if H.logP(H.results_sel), fprintf('\n%1.5f\t%16d', 10^(dmin), k);
else, fprintf('\n%.5f\t%16d', -dmin, k); end

Nrdata = rdata2(N);
roi_size = zeros(size(rcsv, 1) - 1, 1);
for j = 2:size(rcsv, 1)
ind3 = find(Nrdata == rcsv{j, 1});
roi_size(j - 1) = 100 * length(ind3) / k;
end

% sort wrt size
[ii, jj] = sort(roi_size, 'descend');
jj(ii == 0) = [];

for j = 1:length(jj)
if roi_size(jj(j)) > 1
if j == 1, fprintf('\t%3.0f%s\t%s\n', roi_size(jj(j)), '%', rcsv{jj(j) + 1, 2});
else, fprintf('%7s\t%16s\t%3.0f%s\t%s\n', ' ', ' ', ...
roi_size(jj(j)), '%', rcsv{jj(j) + 1, 2});

if k >= min_extent
if H.logP(H.results_sel), fprintf('\n%1.5f\t%16d', 10^(dmin), k);
else, fprintf('\n%.5f\t%16d', -dmin, k); end

Nrdata = rdata2(N);
roi_size = zeros(size(rcsv, 1) - 1, 1);
for j = 2:size(rcsv, 1)
ind3 = find(Nrdata == rcsv{j, 1});
roi_size(j - 1) = 100 * length(ind3) / k;
end

% sort wrt size
[ii, jj] = sort(roi_size, 'descend');
jj(ii == 0) = [];

for j = 1:length(jj)
if roi_size(jj(j)) >= min_overlap
if j == 1, fprintf('\t%3.0f%s\t%s\n', roi_size(jj(j)), '%', rcsv{jj(j) + 1, 2});
else, fprintf('%7s\t%16s\t%3.0f%s\t%s\n', ' ', ' ', ...
roi_size(jj(j)), '%', rcsv{jj(j) + 1, 2});
end
end
end
end
Expand Down
69 changes: 46 additions & 23 deletions cat_vol_slice_overlay.m
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@
% OV.atlas - define atlas for labeling (e.g. 'cat12_cobra')
% comment this out for interactive selection
% or use 'none' for no atlas information
% OV.min_extent - minimum cluster extent for atlas labeling
% OV.min_overlap- minimum overlap to atlas regions for atlas labeling
% OV.save - save result as png/jpg/pdf/tif
% comment this out for interactive selection or use '' for not
% saving any file or use just file extension (png/jpg/pdf/tif) to
Expand Down Expand Up @@ -538,25 +540,45 @@
j = j + 1;
end
end
atlas = spm_input('Select atlas?', '1', 'm', atlas_labels);
atlas_name = atlas_labels{atlas};
if atlas > 1
xA = spm_atlas('load',atlas_name);
else
xA = [];
end
atlas = spm_input('Select atlas?', '1', 'm', atlas_labels);
atlas_name = atlas_labels{atlas};
if atlas > 1
xA = spm_atlas('load',atlas_name);
else
xA = [];
end
end

[mx, mn, XYZ, vol] = volmaxmin(SO.img(2).vol,SO.img(2).func);

% threshold map and restrict coordinates
if SO.img(2).range(1) >= 0
Q = find(compare_to_threshold(vol,SO.img(2).range(1)));
XYZ = XYZ(:, Q);
vol = vol(Q);
end

if isempty(XYZ)
fprintf("No results for %s found.\n", img);
return;
end

% atlas labeling
if ~isempty(xA)
[mx, mn, XYZ, vol] = volmaxmin(SO.img(2).vol,SO.img(2).func);

% threshold map and restrict coordinates
if SO.img(2).range(1) >= 0
Q = find(compare_to_threshold(vol,SO.img(2).range(1)));
XYZ = XYZ(:, Q);
vol = vol(Q);
if ~isempty(xA) & ~isempty(XYZ)

% threshold values for printing table
if isfield(OV, 'min_extent')
min_extent = OV.min_extent;
else
min_extent = 1;
end

if isfield(OV, 'min_overlap')
min_overlap = OV.min_overlap;
else
min_overlap = 1;
end

M = SO.img(2).vol.mat;
XYZmm = M(1:3, :) * [XYZ; ones(1, size(XYZ, 2))];

Expand All @@ -575,11 +597,9 @@
Zj = cell(max(A)+2,1);
maxZ = zeros(max(A)+2,1);
XYZmmj = cell(max(A)+2,1);
Q = [];

for k = 1:min(max(A))
j = find(A == k);
Q = [Q j];

[labk{k}, Pl{k}] = spm_atlas('query',xA,XYZmm(:,j));
Zj{k} = i1(j);
Expand Down Expand Up @@ -622,12 +642,15 @@
end

if logP, val = 10^(-maxZ(j)); else val = maxZ(j); end
fprintf('%7.2g\t%12d\t%4.0f %4.0f %4.0f',val,length(Zj{j}),XYZmmj{j}(:,indZ));
for m=1:numel(labk{j})
if Pl{j}(m) >= 1,
if m==1, fprintf('\t%3.0f%%\t%s\n',Pl{j}(m),labk{j}{m});
else fprintf('%7s\t%12s\t%15s\t%3.0f%%\t%s\n',' ',' ',' ',...
Pl{j}(m),labk{j}{m});

if length(Zj{j}) >= min_extent
fprintf('%7.2g\t%12d\t%4.0f %4.0f %4.0f',val,length(Zj{j}),XYZmmj{j}(:,indZ));
for m=1:numel(labk{j})
if Pl{j}(m) >= min_overlap
if m==1, fprintf('\t%3.0f%%\t%s\n',Pl{j}(m),labk{j}{m});
else fprintf('%7s\t%12s\t%15s\t%3.0f%%\t%s\n',' ',' ',' ',...
Pl{j}(m),labk{j}{m});
end
end
end
end
Expand Down

0 comments on commit 00bd649

Please sign in to comment.