@@ -13,15 +13,26 @@ def extract_noise_components(realigned_file, noise_mask_file, num_components):
13
13
from nibabel import load
14
14
import numpy as np
15
15
import scipy as sp
16
- from scipy .signal import detrend
17
16
imgseries = load (realigned_file )
18
- noise_mask = load (noise_mask_file )
19
- voxel_timecourses = imgseries .get_data ()[np .nonzero (noise_mask .get_data ())]
20
- for timecourse in voxel_timecourses :
21
- timecourse [:] = detrend (timecourse , type = 'constant' )
22
- u ,s ,v = sp .linalg .svd (voxel_timecourses , full_matrices = False )
17
+ components = None
18
+ mask = load (noise_mask_file ).get_data ()
19
+ voxel_timecourses = imgseries .get_data ()[mask > 0 ]
20
+ voxel_timecourses [np .isnan (np .sum (voxel_timecourses , axis = 1 )), :] = 0
21
+ # remove mean and normalize by variance
22
+ # voxel_timecourses.shape == [nvoxels, time]
23
+ X = voxel_timecourses .T
24
+ stdX = np .std (X , axis = 0 )
25
+ stdX [stdX == 0 ] = 1.
26
+ stdX [np .isnan (stdX )] = 1.
27
+ stdX [np .isinf (stdX )] = 1.
28
+ X = (X - np .mean (X , axis = 0 ))/ stdX
29
+ u , _ , _ = sp .linalg .svd (X , full_matrices = False )
30
+ if components is None :
31
+ components = u [:, :num_components ]
32
+ else :
33
+ components = np .hstack ((components , u [:, :num_components ]))
23
34
components_file = os .path .join (os .getcwd (), 'noise_components.txt' )
24
- np .savetxt (components_file , v [: num_components , :]. T )
35
+ np .savetxt (components_file , components , fmt = "%.10f" )
25
36
return components_file
26
37
27
38
def select_volume (filename , which ):
0 commit comments