mirror of
https://github.com/wassname/scikit-image.git
synced 2026-06-28 03:51:05 +08:00
bfe70fe091
SLIC has been updated a few times since this example was created, adding support for grayscale images (so converting to RGB is no longer necessary) and changing the keyword "ratio" to "compactness". This commit brings the example up to date.
63 lines
1.9 KiB
Python
63 lines
1.9 KiB
Python
"""
|
|
==========================================
|
|
Find the intersection of two segmentations
|
|
==========================================
|
|
|
|
When segmenting an image, you may want to combine multiple alternative
|
|
segmentations. The `skimage.segmentation.join_segmentations` function
|
|
computes the join of two segmentations, in which a pixel is placed in
|
|
the same segment if and only if it is in the same segment in _both_
|
|
segmentations.
|
|
|
|
"""
|
|
import numpy as np
|
|
from scipy import ndimage as nd
|
|
import matplotlib.pyplot as plt
|
|
|
|
from skimage.filter import sobel
|
|
from skimage.segmentation import slic, join_segmentations
|
|
from skimage.morphology import watershed
|
|
from skimage.color import label2rgb
|
|
from skimage import data
|
|
|
|
coins = data.coins()
|
|
|
|
# make segmentation using edge-detection and watershed
|
|
edges = sobel(coins)
|
|
markers = np.zeros_like(coins)
|
|
foreground, background = 1, 2
|
|
markers[coins < 30] = background
|
|
markers[coins > 150] = foreground
|
|
|
|
ws = watershed(edges, markers)
|
|
seg1 = nd.label(ws == foreground)[0]
|
|
|
|
# make segmentation using SLIC superpixels
|
|
seg2 = slic(coins, n_segments=117, max_iter=160, sigma=1, compactness=0.75,
|
|
multichannel=False)
|
|
|
|
# combine the two
|
|
segj = join_segmentations(seg1, seg2)
|
|
|
|
# show the segmentations
|
|
fig, axes = plt.subplots(ncols=4, figsize=(9, 2.5))
|
|
axes[0].imshow(coins, cmap=plt.cm.gray, interpolation='nearest')
|
|
axes[0].set_title('Image')
|
|
|
|
color1 = label2rgb(seg1, image=coins, bg_label=0)
|
|
axes[1].imshow(color1, interpolation='nearest')
|
|
axes[1].set_title('Sobel+Watershed')
|
|
|
|
color2 = label2rgb(seg2, image=coins, image_alpha=0.5)
|
|
axes[2].imshow(color2, interpolation='nearest')
|
|
axes[2].set_title('SLIC superpixels')
|
|
|
|
color3 = label2rgb(segj, image=coins, image_alpha=0.5)
|
|
axes[3].imshow(color3, interpolation='nearest')
|
|
axes[3].set_title('Join')
|
|
|
|
for ax in axes:
|
|
ax.axis('off')
|
|
plt.subplots_adjust(hspace=0.01, wspace=0.01, top=1, bottom=0, left=0, right=1)
|
|
plt.show()
|