Skip to content

Commit 60aacf1

Browse files
committed
ENH: mask output of frames generator
1 parent 6fd403f commit 60aacf1

File tree

1 file changed

+33
-0
lines changed

1 file changed

+33
-0
lines changed

moten/io.py

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -297,3 +297,36 @@ def load_image_luminance(image_files, hdim=None, vdim=None):
297297
stimulus = rgb2lab(stimulus/255.)[...,0]
298298
stimuli.append(stimulus)
299299
return np.asarray(stimuli)
300+
301+
302+
def apply_mask(mask, generator):
303+
'''
304+
Parameters
305+
----------
306+
mask : 2D np.ndarray
307+
generator : generator
308+
Yields a video frame
309+
310+
Yields
311+
------
312+
masked_image : 2D np.ndarray
313+
Masked image of each frame (i.e. ``original_image[mask]``)
314+
315+
Examples
316+
--------
317+
>>> import moten
318+
>>> video_file = 'http://anwarnunez.github.io/downloads/avsnr150s24fps_tiny.mp4'
319+
>>> small_size = (36, 64) # downsample to (vdim, hdim) 16:9 aspect ratio
320+
>>> oim = next(moten.io.generate_frame_difference_from_greyvideo(video_file, size=small_size))
321+
>>> mask = np.zeros(small_size, dtype=np.bool)
322+
>>> mask[16:, :40] = True
323+
>>> nim = next(moten.io.apply_mask(mask, moten.io.generate_frame_difference_from_greyvideo(video_file, size=small_size)))
324+
>>> np.allclose(oim[16:, :40], nim)
325+
'''
326+
assert mask.ndim == 2
327+
vshape = np.unique(mask.sum(0)).max()
328+
hshape = np.unique(mask.sum(1)).max()
329+
shape = (vshape, hshape)
330+
print('mask size:', shape)
331+
for im in generator:
332+
yield im[mask].reshape(shape)

0 commit comments

Comments
 (0)