From e84abb1b67586d3a3620ce6a21e3314527083218 Mon Sep 17 00:00:00 2001 From: Tony S Yu Date: Mon, 30 Apr 2012 21:34:19 -0400 Subject: [PATCH] DOC: Add example of adaptive thresholding. --- doc/examples/plot_threshold_adaptive.py | 48 +++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 doc/examples/plot_threshold_adaptive.py diff --git a/doc/examples/plot_threshold_adaptive.py b/doc/examples/plot_threshold_adaptive.py new file mode 100644 index 00000000..c3e20224 --- /dev/null +++ b/doc/examples/plot_threshold_adaptive.py @@ -0,0 +1,48 @@ +""" +===================== +Adaptive Thresholding +===================== + +Thresholding is the simplest way to segment objects from a background. If that +background is relatively uniform, then you can use a global threshold value to +binarize the image by pixel-intensity. If there's large variation in the +background intensity, however, adaptive thresholding (a.k.a. local or dynamic +thresholding) may produce better results. + +Here, we binarize an image using the `threshold_adaptive` function, which +calculates thresholds in regions of size `block_size` surrounding each pixel +(i.e. local neighborhoods). Each threshold value is the weighted mean of the +local neighborhood minus an offset value. + +""" +import matplotlib.pyplot as plt + +from skimage import data +from skimage.filter import threshold_otsu, threshold_adaptive + + +image = data.text() + +global_thresh = threshold_otsu(image) +binary_global = image > global_thresh + +block_size = 40 +binary_adaptive = threshold_adaptive(image, block_size, offset=10) + +fig, axes = plt.subplots(nrows=3, figsize=(7, 8)) +ax0, ax1, ax2 = axes +plt.gray() + +ax0.imshow(image) +ax0.set_title('Image') + +ax1.imshow(binary_global) +ax1.set_title('Global thresholding') + +ax2.imshow(binary_adaptive) +ax2.set_title('Adaptive thresholding') + +for ax in axes: + ax.axis('off') + +plt.show()