14
14
except ImportError :
15
15
with_tqdm = False
16
16
17
+ def process_motion_energy_from_files (filenames ,
18
+ size = None ,
19
+ nimages = np .inf ,
20
+ batch_size = 1000 ,
21
+ dtype = 'float32' ,
22
+ mask = None ,
23
+ ):
24
+ '''
25
+ '''
26
+ import moten .io
27
+ if not isinstance (filenames , (list , tuple )):
28
+ filenames = [filenames ]
29
+
30
+ XTX = 0
31
+ NFRAMES = 0
32
+ for fl in filenames :
33
+ generator = moten .io .generate_frame_difference_from_greyvideo (
34
+ fl , size = size , nimages = nimages , dtype = dtype )
35
+
36
+ if mask is not None :
37
+ generator = moten .io .apply_mask (mask , generator )
38
+
39
+ nframes , xtx = pixbypix_covariance_from_frames_generator (generator ,
40
+ batch_size = batch_size ,
41
+ mask = mask )
42
+ XTX += xtx
43
+ NFRAMES = nframes
44
+ return NFRAMES , XTX
45
+
46
+
17
47
def pixbypix_covariance_from_frames_generator (data_generator ,
18
48
batch_size = 1000 ,
19
49
output_nonlinearity = pointwise_square ,
@@ -37,12 +67,13 @@ def pixbypix_covariance_from_frames_generator(data_generator,
37
67
>>> fdiffgen = moten.io.generate_frame_difference_from_greyvideo(video_file, size=small_size, nimages=333)
38
68
>>> nimages, XTX = moten.extras.pixbypix_covariance_from_frames_generator(fdiffgen) # doctest: +SKIP
39
69
'''
40
- first_frame = data_generator .__next__ ()
70
+ first_frame = next (data_generator )
71
+
41
72
vdim , hdim = first_frame .shape
42
73
npixels = vdim * hdim
43
74
44
75
framediff_buffer = np .zeros ((batch_size , npixels ), dtype = dtype )
45
- XTX = np .zeros ((npixels , npixels ), dtype = np . float64 )
76
+ XTX = np .zeros ((npixels , npixels ), dtype = dtype )
46
77
nframes = 0
47
78
48
79
if with_tqdm :
@@ -57,7 +88,8 @@ def pixbypix_covariance_from_frames_generator(data_generator,
57
88
framediff_buffer *= 0.0 # clear buffer
58
89
try :
59
90
for batch_frame_idx in range (batch_size ):
60
- frame_difference = data_generator .__next__ ().reshape (1 , - 1 )
91
+ frame_difference = next (data_generator ).reshape (1 , - 1 )
92
+
61
93
framediff_buffer [batch_frame_idx ] = output_nonlinearity (frame_difference )
62
94
except StopIteration :
63
95
RUN = False
@@ -139,11 +171,14 @@ def __init__(self,
139
171
video_file ,
140
172
size = None ,
141
173
nimages = np .inf ,
142
- batch_size = 100 ,
174
+ batch_size = 1000 ,
143
175
output_nonlinearity = pointwise_square ,
144
- dtype = 'float32' ):
176
+ dtype = 'float32' ,
177
+ mask = None ,
178
+ ):
145
179
'''
146
180
'''
181
+ self .mask = mask
147
182
self .size = size
148
183
self .dtype = dtype
149
184
self .nimages = nimages
@@ -159,6 +194,9 @@ def get_frame_difference_generator(self):
159
194
generator = moten .io .generate_frame_difference_from_greyvideo (
160
195
self .video_file , size = self .size , nimages = self .nimages , dtype = self .dtype )
161
196
197
+ if self .mask is not None :
198
+ generator = moten .io .apply_mask (self .mask , generator )
199
+
162
200
return generator
163
201
164
202
def compute_pixel_by_pixel_covariance (self ,
@@ -258,7 +296,7 @@ def compute_temporal_pcs(self, generator=None, skip_first=False):
258
296
if skip_first :
259
297
# drop the first frame b/c the difference is with 0's
260
298
# and so projection is with itself
261
- generator . __next__ ( )
299
+ next ( generator )
262
300
263
301
self .decomposition_temporal_pcs = []
264
302
## TODO: batch for faster performance
0 commit comments