11import numpy as np
2+ from scipy .ndimage import convolve
23
34####################################################################
45## Process image stacks.
@@ -16,3 +17,28 @@ def crop_volume(data, sz, st=(0, 0, 0)):
1617 return data [st [0 ]:st [0 ]+ sz [0 ], st [1 ]:st [1 ]+ sz [1 ], st [2 ]:st [2 ]+ sz [2 ]]
1718 else : # crop spatial dimensions
1819 return data [:, st [0 ]:st [0 ]+ sz [0 ], st [1 ]:st [1 ]+ sz [1 ], st [2 ]:st [2 ]+ sz [2 ]]
20+
21+ def get_valid_pos (mask , vol_sz , valid_ratio ):
22+ mask_sum = convolve (mask , np .ones (vol_sz ), mode = 'constant' , cval = 0 )
23+ valid_thres = valid_ratio * np .prod (vol_sz )
24+ data_sz = mask .shape
25+ pad_sz_pre = (np .array (vol_sz ) - 1 ) // 2
26+ pad_sz_post = data_sz - (vol_sz - pad_sz_pre - 1 )
27+ if len (vol_sz ) == 3 :
28+ mask_sum = mask_sum [pad_sz_pre [0 ]:pad_sz_post [0 ], \
29+ pad_sz_pre [1 ]:pad_sz_post [1 ], \
30+ pad_sz_pre [2 ]:pad_sz_post [2 ]] >= valid_thres
31+ zz , yy , xx = np .meshgrid (np .arange (mask_sum .shape [0 ]), \
32+ np .arange (mask_sum .shape [1 ]), \
33+ np .arange (mask_sum .shape [2 ]))
34+ valid_pos = np .stack ([zz .T [mask_sum ], \
35+ yy .T [mask_sum ], \
36+ xx .T [mask_sum ]], axis = 1 )
37+ else :
38+ mask_sum = mask_sum [pad_sz_pre [0 ]:pad_sz_post [0 ], \
39+ pad_sz_pre [1 ]:pad_sz_post [1 ]] >= valid_thres
40+ yy , xx = np .meshgrid (np .arange (mask_sum .shape [0 ]), \
41+ np .arange (mask_sum .shape [1 ]))
42+ valid_pos = np .stack ([yy .T [mask_sum ], \
43+ xx .T [mask_sum ]], axis = 1 )
44+ return valid_pos
0 commit comments