|
192 | 192 | run.v_settings = v_settings;
|
193 | 193 | run.tol = tol;
|
194 | 194 | run.aff = 'Aff(3)';
|
| 195 | +run.del_settings = 1e3; |
195 | 196 | % image
|
196 | 197 | run.gmm.pr.file = {pth_int};
|
197 | 198 | run.gmm.pr.hyperpriors = [];
|
198 | 199 | run.gmm.chan.images = {Nii(1).dat.fname};
|
199 | 200 | run.gmm.chan.modality = 2;
|
200 | 201 | run.gmm.chan.inu.inu_reg = 1e6;
|
201 | 202 | % output settings
|
202 |
| -out = struct; |
203 |
| -out.result = {fullfile(run.odir{1},['mb_fit_' run.onam '.mat'])}; |
204 |
| -out.c = 1:K; |
205 |
| -out.wc = find(tc(:,2))'; |
206 |
| -out.mwc = find(tc(:,3))'; |
207 |
| -out.vox = vox; |
208 |
| -out.proc_zn = {@(x) clean_gwc(x, struct('gm',ix_gm,'wm',ix_wm,'csf',ix_csf))}; |
| 203 | +out = struct; |
| 204 | +out.result = {fullfile(run.odir{1},['mb_fit_' run.onam '.mat'])}; |
| 205 | +out.c = 1:K; |
| 206 | +out.wc = find(tc(:,2))'; |
| 207 | +out.mwc = find(tc(:,3))'; |
| 208 | +out.vox = vox; |
| 209 | +out.clean_gwc = struct('do',true,'gm',ix_gm,'wm',ix_wm,'csf',ix_csf,'level',1); |
209 | 210 |
|
210 | 211 | % fit model and write output
|
211 | 212 | jobs{1}.spm.tools.mb.run = run;
|
|
427 | 428 | npth = VO.fname;
|
428 | 429 | %==========================================================================
|
429 | 430 |
|
430 |
| -%========================================================================== |
431 |
| -function zn = clean_gwc(zn,ixt,level) |
432 |
| -if nargin < 2 || isempty(ixt) |
433 |
| - % Default SPM12 template ordering |
434 |
| - ixt = struct('gm',1,'wm',2,'csf',3); |
435 |
| -end |
436 |
| -if nargin < 3, level = 1; end |
437 |
| - |
438 |
| -b = sum(zn(:,:,:,ixt.wm),4); |
439 |
| - |
440 |
| -% Build a 3x3x3 seperable smoothing kernel |
441 |
| -kx=[0.75 1 0.75]; |
442 |
| -ky=[0.75 1 0.75]; |
443 |
| -kz=[0.75 1 0.75]; |
444 |
| -sm=sum(kron(kron(kz,ky),kx))^(1/3); |
445 |
| -kx=kx/sm; ky=ky/sm; kz=kz/sm; |
446 |
| - |
447 |
| -% Erosions and conditional dilations |
448 |
| -th1 = 0.15; |
449 |
| -if level==2, th1 = 0.2; end |
450 |
| -niter = 32; |
451 |
| -niter2 = 32; |
452 |
| -for j=1:niter |
453 |
| - if j>2 |
454 |
| - th = th1; |
455 |
| - else |
456 |
| - th = 0.6; |
457 |
| - end % Dilate after two its of erosion |
458 |
| - for i=1:size(b,3) |
459 |
| - gp = double(sum(zn(:,:,i,ixt.gm),4)); |
460 |
| - wp = double(sum(zn(:,:,i,ixt.wm),4)); |
461 |
| - bp = double(b(:,:,i)); |
462 |
| - bp = (bp>th).*(wp+gp); |
463 |
| - b(:,:,i) = bp; |
464 |
| - end |
465 |
| - spm_conv_vol(b,b,kx,ky,kz,-[1 1 1]); |
466 |
| -end |
467 |
| - |
468 |
| -% Also clean up the CSF. |
469 |
| -if niter2 > 0 |
470 |
| - c = b; |
471 |
| - for j=1:niter2 |
472 |
| - for i=1:size(b,3) |
473 |
| - gp = double(sum(zn(:,:,i,ixt.gm),4)); |
474 |
| - wp = double(sum(zn(:,:,i,ixt.wm),4)); |
475 |
| - cp = double(sum(zn(:,:,i,ixt.csf),4)); |
476 |
| - bp = double(c(:,:,i)); |
477 |
| - bp = (bp>th).*(wp+gp+cp); |
478 |
| - c(:,:,i) = bp; |
479 |
| - end |
480 |
| - spm_conv_vol(c,c,kx,ky,kz,-[1 1 1]); |
481 |
| - end |
482 |
| -end |
483 |
| - |
484 |
| -th = 0.05; |
485 |
| -for i=1:size(b,3) |
486 |
| - slices = cell(1,size(zn,4)); |
487 |
| - for k1=1:size(zn,4) |
488 |
| - slices{k1} = double(zn(:,:,i,k1)); |
489 |
| - end |
490 |
| - bp = double(b(:,:,i)); |
491 |
| - bp = ((bp>th).*(sum(cat(3,slices{ixt.gm}),3)+sum(cat(3,slices{ixt.wm}),3)))>th; |
492 |
| - for i1=1:numel(ixt.gm) |
493 |
| - slices{ixt.gm(i1)} = slices{ixt.gm(i1)}.*bp; |
494 |
| - end |
495 |
| - for i1=1:numel(ixt.wm) |
496 |
| - slices{ixt.wm(i1)} = slices{ixt.wm(i1)}.*bp; |
497 |
| - end |
498 |
| - |
499 |
| - if niter2>0 |
500 |
| - cp = double(c(:,:,i)); |
501 |
| - cp = ((cp>th).*(sum(cat(3,slices{ixt.gm}),3)+sum(cat(3,slices{ixt.wm}),3)+sum(cat(3,slices{ixt.csf}),3)))>th; |
502 |
| - |
503 |
| - for i1=1:numel(ixt.csf) |
504 |
| - slices{ixt.csf(i1)} = slices{ixt.csf(i1)}.*cp; |
505 |
| - end |
506 |
| - end |
507 |
| - tot = zeros(size(bp))+eps; |
508 |
| - for k1=1:size(zn,4) |
509 |
| - tot = tot + slices{k1}; |
510 |
| - end |
511 |
| - for k1=1:size(zn,4) |
512 |
| - zn(:,:,i,k1) = slices{k1}./tot; |
513 |
| - end |
514 |
| -end |
515 |
| -%========================================================================== |
516 |
| - |
517 | 431 | %==========================================================================
|
518 | 432 | function reslice2mni(res, pth_Mmni, Mmu)
|
519 | 433 | % Load affine matrix that aligns MB template with SPM template
|
|
0 commit comments