def get_mask(image, uid):
mask = np.array(image > -320, dtype=np.int8)
# Set the edges to zeros. This is to connect the air regions, which
# may appear separated in some scans
mask[:, 0] = 0
mask[:, -1] = 0
mask[:, :, 0] = 0
mask[:, :, -1] = 0
labels = measure.label(mask, connectivity=1, background=-1)
vals, counts = np.unique(labels, return_counts=True)
inds = np.argsort(counts)
# Assume that the lungs make up the third largest region
lung_val = vals[inds][-3]
if mask[labels == lung_val].sum() != 0:
print('Warning: could not get mask for %s' % uid)
mask[:] = 1
return mask
mask[labels == lung_val] = 1
mask[labels != lung_val] = 0
fill_mask(mask)
left_center = mask[mask.shape[0] // 2, mask.shape[1] // 2, mask.shape[2] // 4]
right_center = mask[mask.shape[0] // 2, mask.shape[1] // 2, mask.shape[2] * 3 // 4]
if (left_center == 0) or (right_center == 0):
print('Warning: could not get mask for %s' % uid)
mask[:] = 1
return mask
mask = ndimage.morphology.binary_dilation(mask, iterations=settings.mask_dilation)
return mask
评论列表
文章目录