本文整理匯總了Python中skimage.morphology.watershed方法的典型用法代碼示例。如果您正苦於以下問題:Python morphology.watershed方法的具體用法?Python morphology.watershed怎麽用?Python morphology.watershed使用的例子?那麽, 這裏精選的方法代碼示例或許可以為您提供幫助。您也可以進一步了解該方法所在類skimage.morphology
的用法示例。
在下文中一共展示了morphology.watershed方法的15個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的Python代碼示例。
示例1: generate_wsl
# 需要導入模塊: from skimage import morphology [as 別名]
# 或者: from skimage.morphology import watershed [as 別名]
def generate_wsl(ws):
"""
Generates watershed line that correspond to areas of
touching objects.
"""
se = square(3)
ero = ws.copy()
ero[ero == 0] = ero.max() + 1
ero = erosion(ero, se)
ero[ws == 0] = 0
grad = dilation(ws, se) - ero
grad[ws == 0] = 0
grad[grad > 0] = 255
grad = grad.astype(np.uint8)
return grad
示例2: DynamicWatershedAlias
# 需要導入模塊: from skimage import morphology [as 別名]
# 或者: from skimage.morphology import watershed [as 別名]
def DynamicWatershedAlias(p_img, lamb, p_thresh = 0.5):
"""
Applies our dynamic watershed to 2D prob/dist image.
"""
b_img = (p_img > p_thresh) + 0
Probs_inv = PrepareProb(p_img)
Hrecons = HreconstructionErosion(Probs_inv, lamb)
markers_Probs_inv = find_maxima(Hrecons, mask = b_img)
markers_Probs_inv = label(markers_Probs_inv)
ws_labels = watershed(Hrecons, markers_Probs_inv, mask=b_img)
arrange_label = ArrangeLabel(ws_labels)
wsl = generate_wsl(arrange_label)
arrange_label[wsl > 0] = 0
return arrange_label
示例3: overlay_cut_masks
# 需要導入模塊: from skimage import morphology [as 別名]
# 或者: from skimage.morphology import watershed [as 別名]
def overlay_cut_masks(images_dir, subdir_name, target_dir, cut_size=1):
train_dir = os.path.join(images_dir, subdir_name)
for mask_dirname in tqdm(glob.glob('{}/*/masks'.format(train_dir))):
masks = []
for ind, image_filepath in enumerate(glob.glob('{}/*'.format(mask_dirname))):
image = np.asarray(Image.open(image_filepath))
image = np.where(image > 0, ind + 1, 0)
masks.append(image)
labeled_masks = np.sum(masks, axis=0)
overlayed_masks = np.where(labeled_masks, 1, 0)
watershed_mask = watershed(overlayed_masks.astype(np.bool), labeled_masks, watershed_line=True)
if watershed_mask.max() == watershed_mask.min():
cut_masks = overlayed_masks
else:
borders = (watershed_mask == 0) & overlayed_masks
selem = rectangle(cut_size, cut_size)
dilated_borders = dilation(borders, selem=selem)
cut_masks = np.where(dilated_borders, 0, overlayed_masks)
target_filepath = '/'.join(mask_dirname.replace(images_dir, target_dir).split('/')[:-1]) + '.png'
os.makedirs(os.path.dirname(target_filepath), exist_ok=True)
imwrite(target_filepath, cut_masks)
示例4: label_mask
# 需要導入模塊: from skimage import morphology [as 別名]
# 或者: from skimage.morphology import watershed [as 別名]
def label_mask(pred, main_threshold=0.3, seed_threshold=0.7, w_pixel_t=20, pixel_t=100):
av_pred = pred / 255.
av_pred = av_pred[..., 0] * (1 - av_pred[..., 2])
av_pred = 1 * (av_pred > seed_threshold)
av_pred = av_pred.astype(np.uint8)
y_pred = measure.label(av_pred, neighbors=8, background=0)
props = measure.regionprops(y_pred)
for i in range(len(props)):
if props[i].area < w_pixel_t:
y_pred[y_pred == i + 1] = 0
y_pred = measure.label(y_pred, neighbors=8, background=0)
nucl_msk = (255 - pred[..., 0])
nucl_msk = nucl_msk.astype('uint8')
y_pred = watershed(nucl_msk, y_pred, mask=(pred[..., 0] > main_threshold * 255), watershed_line=True)
props = measure.regionprops(y_pred)
for i in range(len(props)):
if props[i].area < pixel_t:
y_pred[y_pred == i + 1] = 0
y_pred = measure.label(y_pred, neighbors=8, background=0)
return y_pred
示例5: postprocess_victor
# 需要導入模塊: from skimage import morphology [as 別名]
# 或者: from skimage.morphology import watershed [as 別名]
def postprocess_victor(pred):
av_pred = pred / 255.
av_pred = av_pred[..., 2] * (1 - av_pred[..., 1])
av_pred = 1 * (av_pred > 0.5)
av_pred = av_pred.astype(np.uint8)
y_pred = measure.label(av_pred, neighbors=8, background=0)
props = measure.regionprops(y_pred)
for i in range(len(props)):
if props[i].area < 12:
y_pred[y_pred == i + 1] = 0
y_pred = measure.label(y_pred, neighbors=8, background=0)
nucl_msk = (255 - pred[..., 2])
nucl_msk = nucl_msk.astype('uint8')
y_pred = watershed(nucl_msk, y_pred, mask=((pred[..., 2] > 80)), watershed_line=True)
return y_pred
# test_dir = r'C:\dev\dsbowl\results_test\bowl_remap3\merged'
# borders_dir = r'C:\dev\dsbowl\results_test\bowl_remap_border2\merged'
示例6: _watershed
# 需要導入模塊: from skimage import morphology [as 別名]
# 或者: from skimage.morphology import watershed [as 別名]
def _watershed(self, inraster, th_tree=15.):
""" Simple implementation of a watershed tree crown delineation
Parameters
----------
inraster : ndarray
raster of height values (e.g., CHM)
th_tree : float
minimum height of tree crown
Returns
-------
ndarray
raster of individual tree crowns
"""
inraster_mask = inraster.copy()
inraster_mask[inraster <= th_tree] = 0
raster = inraster.copy()
raster[np.isnan(raster)] = 0.
labels = watershed(-raster, self.tree_markers, mask=inraster_mask)
return labels
示例7: skimage_watershed_segmentation
# 需要導入模塊: from skimage import morphology [as 別名]
# 或者: from skimage.morphology import watershed [as 別名]
def skimage_watershed_segmentation(mask, kernel=k_3x3, k=1):
# mask = cv.dilate(mask, kernel, iterations=k)
distance = ndimage.distance_transform_edt(mask)
local_maxi = peak_local_max(distance, indices=False, footprint=kernel, labels=mask)
markers = measure.label(local_maxi)
labels_ws = watershed(-distance, markers, mask=mask)
if labels_ws.max() < 2:
return [mask], labels_ws
res_masks = []
for idx in range(1, labels_ws.max() + 1):
m = labels_ws == idx
if m.sum() > 20:
res_masks.append(m.astype(np.uint8))
return res_masks, labels_ws
示例8: watersplit
# 需要導入模塊: from skimage import morphology [as 別名]
# 或者: from skimage.morphology import watershed [as 別名]
def watersplit(_probs, _points):
points = _points.copy()
points[points != 0] = np.arange(1, points.sum()+1)
points = points.astype(float)
probs = ndimage.black_tophat(_probs.copy(), 7)
seg = watershed(probs, points)
return find_boundaries(seg)
示例9: proc_np_dist
# 需要導入模塊: from skimage import morphology [as 別名]
# 或者: from skimage.morphology import watershed [as 別名]
def proc_np_dist(pred):
"""
Process Nuclei Prediction with Distance Map
Args:
pred: prediction output, assuming
channel 0 contain probability map of nuclei
channel 1 containing the regressed distance map
"""
blb_raw = pred[...,0]
dst_raw = pred[...,1]
blb = np.copy(blb_raw)
blb[blb > 0.5] = 1
blb[blb <= 0.5] = 0
blb = measurements.label(blb)[0]
blb = remove_small_objects(blb, min_size=10)
blb[blb > 0] = 1
dst_raw[dst_raw < 0] = 0
dst = np.copy(dst_raw)
dst = dst * blb
dst[dst > 0.5] = 1
dst[dst <= 0.5] = 0
marker = dst.copy()
marker = binary_fill_holes(marker)
marker = measurements.label(marker)[0]
marker = remove_small_objects(marker, min_size=10)
proced_pred = watershed(-dst_raw, marker, mask=blb)
return proced_pred
####
示例10: watershed
# 需要導入模塊: from skimage import morphology [as 別名]
# 或者: from skimage.morphology import watershed [as 別名]
def watershed(masks, seeds, borders):
seeds_detached = seeds * (1 - borders)
markers = label(seeds_detached)
labels = morph.watershed(masks, markers, mask=masks)
return labels
示例11: overlay_masks_with_borders
# 需要導入模塊: from skimage import morphology [as 別名]
# 或者: from skimage.morphology import watershed [as 別名]
def overlay_masks_with_borders(images_dir, subdir_name, target_dir, borders_size=3, dilation_size=5):
train_dir = os.path.join(images_dir, subdir_name)
for mask_dirname in tqdm(glob.glob('{}/*/masks'.format(train_dir))):
masks = []
for ind, image_filepath in enumerate(glob.glob('{}/*'.format(mask_dirname))):
image = np.asarray(Image.open(image_filepath))
image = np.where(image > 0, ind + 1, 0)
masks.append(image)
labeled_masks = np.sum(masks, axis=0)
overlayed_masks = np.where(labeled_masks, 1, 0)
selem = rectangle(dilation_size, dilation_size)
dilated_mask = dilation(overlayed_masks, selem=selem)
watershed_mask = watershed((dilated_mask >= 0).astype(np.bool), labeled_masks, watershed_line=True)
if watershed_mask.max() == watershed_mask.min():
masks_with_borders = overlayed_masks
else:
borders = (watershed_mask == 0) & (dilated_mask > 0)
selem = rectangle(borders_size, borders_size)
dilated_borders = dilation(borders, selem=selem)
masks_with_borders = np.where(dilated_borders, 2, overlayed_masks)
target_filepath = '/'.join(mask_dirname.replace(images_dir, target_dir).split('/')[:-1]) + '.png'
os.makedirs(os.path.dirname(target_filepath), exist_ok=True)
imwrite(target_filepath, masks_with_borders)
示例12: overlay_masks_with_borders_json
# 需要導入模塊: from skimage import morphology [as 別名]
# 或者: from skimage.morphology import watershed [as 別名]
def overlay_masks_with_borders_json(images_dir, subdir_name, target_dir, borders_size=3, dilation_size=5):
train_dir = os.path.join(images_dir, subdir_name)
for mask_dirname in tqdm(glob.glob('{}/*/masks'.format(train_dir))):
masks = []
for ind, image_filepath in enumerate(glob.glob('{}/*'.format(mask_dirname))):
image = np.asarray(Image.open(image_filepath))
image = np.where(image > 0, ind + 1, 0)
masks.append(image)
labeled_masks = np.sum(masks, axis=0)
overlayed_masks = np.where(labeled_masks, 1, 0)
selem = rectangle(dilation_size, dilation_size)
dilated_mask = dilation(overlayed_masks, selem=selem)
watershed_mask = watershed((dilated_mask >= 0).astype(np.bool), labeled_masks, watershed_line=True)
if watershed_mask.max() == watershed_mask.min():
dilated_borders = np.zeros_like(overlayed_masks)
else:
borders = (watershed_mask == 0) & (dilated_mask > 0)
selem = rectangle(borders_size, borders_size)
dilated_borders = dilation(borders, selem=selem)
nuclei = prepare_class_encoding(overlayed_masks)
borders = prepare_class_encoding(dilated_borders)
target_filepath = '/'.join(mask_dirname.replace(images_dir, target_dir).split('/')[:-1]) + '.json'
os.makedirs(os.path.dirname(target_filepath), exist_ok=True)
save_target_masks(target_filepath, nuclei, borders)
示例13: create_separation
# 需要導入模塊: from skimage import morphology [as 別名]
# 或者: from skimage.morphology import watershed [as 別名]
def create_separation(labels):
tmp = dilation(labels > 0, square(12))
tmp2 = watershed(tmp, labels, mask=tmp, watershed_line=True) > 0
tmp = tmp ^ tmp2
tmp = dilation(tmp, square(3))
props = measure.regionprops(labels)
msk1 = np.zeros_like(labels, dtype='bool')
for y0 in range(labels.shape[0]):
for x0 in range(labels.shape[1]):
if not tmp[y0, x0]:
continue
if labels[y0, x0] == 0:
sz = 5
else:
sz = 7
if props[labels[y0, x0] - 1].area < 300:
sz = 5
elif props[labels[y0, x0] - 1].area < 2000:
sz = 6
uniq = np.unique(labels[max(0, y0 - sz):min(labels.shape[0], y0 + sz + 1),
max(0, x0 - sz):min(labels.shape[1], x0 + sz + 1)])
if len(uniq[uniq > 0]) > 1:
msk1[y0, x0] = True
return msk1
示例14: my_watershed
# 需要導入模塊: from skimage import morphology [as 別名]
# 或者: from skimage.morphology import watershed [as 別名]
def my_watershed(what, mask1, mask2):
markers = ndi.label(mask2, output=np.uint32)[0]
labels = watershed(what, markers, mask=mask1, watershed_line=True)
return labels
示例15: segmentation_3D
# 需要導入模塊: from skimage import morphology [as 別名]
# 或者: from skimage.morphology import watershed [as 別名]
def segmentation_3D(features,field,dxy,threshold=3e-3,target='maximum',level=None,method='watershed',max_distance=None):
return segmentation(features,field,dxy,threshold=threshold,target=target,level=level,method=method,max_distance=max_distance)