add example modal

This commit is contained in:
Olivier Debeir
2012-10-18 15:21:14 +02:00
parent ce0a609579
commit 662ac3039a
+67
View File
@@ -0,0 +1,67 @@
"""
===================
Label image regions
===================
This example shows how to segment an image with image labelling. The following
steps are applied:
1. Thresholding with automatic Otsu method
2. Close small holes with binary closing
3. Remove artifacts touching image border
4. Measure image regions to filter small objects
"""
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.patches as mpatches
from skimage import data
from skimage.filter import threshold_otsu
from skimage.filter.rank import modal
from skimage.morphology import label, disk
from skimage.measure import find_contours
image = data.coins()[50:-50, 50:-50]
# apply threshold
thresh = threshold_otsu(image)
bw = image > thresh
# label image regions
label_image = label(bw)
# filter obtained labels using model filter
mod_label_image = modal(label_image.astype(np.uint16),disk(5))
# the background is here 1
contours = find_contours(mod_label_image==1,0, positive_orientation='low')
fig, axes = plt.subplots(ncols=2, nrows=2, figsize=(6, 6))
print axes
ax0, ax1, ax2, ax3 = axes.ravel()
ax0.imshow(bw, cmap='gray')
ax0.set_title('Otsu threshold')
ax1.imshow(label_image, cmap='jet')
ax1.set_title('label image')
ax2.imshow(mod_label_image, cmap='jet')
ax2.set_title('filtered labels (modal)')
ax3.imshow(image, cmap='gray')
ax3.set_title('contour overlay')
ax3.set_xlim((0,image.shape[1]))
ax3.set_ylim((image.shape[0],0))
for n, contour in enumerate(contours):
ax3.plot(contour[:, 1], contour[:, 0], linewidth=2)
plt.show()