diff --git a/doc/examples/plot_entropy.py b/doc/examples/plot_entropy.py index 39e2a740..363c88ed 100644 --- a/doc/examples/plot_entropy.py +++ b/doc/examples/plot_entropy.py @@ -7,22 +7,17 @@ In information theory, information entropy is the log-base-2 of the number of possible outcomes for a message. For an image, local entropy is related to the complexity contained in a given -neighborhood, typically defined by a structuring element. +neighborhood, typically defined by a structuring element. The entropy filter can +detect subtle variations in the local gray level distribution. -The entropy filter can detect subtle variations in the local gray level -distribution. -In the example, the image is composed of two surfaces with two slightly -different distributions. - -The image has a uniform random distribution in the range [-14, +14] in the -middle of the image and a uniform random distribution in the range [-15, 15] -at the image borders, both centered at a gray value of 128. - -We apply the local entropy measure using a circular structuring element of -radius 10. As a result, one can detect the central square. The radius is -big enough to efficiently sample the local gray level distribution. - -In the second example, the local entropy is used to detect image texture. +In the first example, the image is composed of two surfaces with two slightly +different distributions. The image has a uniform random distribution in the +range [-14, +14] in the middle of the image and a uniform random distribution in +the range [-15, 15] at the image borders, both centered at a gray value of 128. +To detect the central square, we compute the local entropy measure using a +circular structuring element of a radius big enough to capture the local gray +level distribution. The second example shows how to detect texture in the camera +image using a smaller structuring element. """ import matplotlib.pyplot as plt @@ -33,40 +28,47 @@ from skimage.util import img_as_ubyte from skimage.filters.rank import entropy from skimage.morphology import disk +# First example: object detection. + noise_mask = 28 * np.ones((128, 128), dtype=np.uint8) noise_mask[32:-32, 32:-32] = 30 -noise = (noise_mask * np.random.random(noise_mask.shape) - .5 * +noise = (noise_mask * np.random.random(noise_mask.shape) - 0.5 * noise_mask).astype(np.uint8) img = noise + 128 -radius = 10 -e = entropy(img, disk(radius)) +entr_img = entropy(img, disk(10)) -fig, ax = plt.subplots(1, 3, figsize=(8, 5)) -ax1, ax2, ax3 = ax.ravel() +fig, ax = plt.subplots(1, 3, figsize=(8, 3)) +ax0, ax1, ax2 = ax.ravel() -ax1.imshow(noise_mask, cmap=plt.cm.gray) -ax1.set_xlabel('Noise mask') -ax2.imshow(img, cmap=plt.cm.gray) -ax2.set_xlabel('Noised image') -ax3.imshow(e) -ax3.set_xlabel('Local entropy ($r=%d$)' % radius) +ax0.imshow(noise_mask, cmap=plt.cm.gray) +ax0.set_xlabel("Noise mask") +ax1.imshow(img, cmap=plt.cm.gray) +ax1.set_xlabel("Noisy image") +ax2.imshow(entr_img) +ax2.set_xlabel("Local entropy") -# second example: texture detection +fig.tight_layout() + +# Second example: texture detection. image = img_as_ubyte(data.camera()) -fig, (ax0, ax1) = plt.subplots(ncols=2, figsize=(10, 4), sharex=True, sharey=True, subplot_kw={'adjustable':'box-forced'}) +fig, (ax0, ax1) = plt.subplots(ncols=2, figsize=(10, 4), sharex=True, + sharey=True, + subplot_kw={"adjustable": "box-forced"}) img0 = ax0.imshow(image, cmap=plt.cm.gray) -ax0.set_title('Image') -ax0.axis('off') +ax0.set_title("Image") +ax0.axis("off") fig.colorbar(img0, ax=ax0) img1 = ax1.imshow(entropy(image, disk(5)), cmap=plt.cm.jet) -ax1.set_title('Entropy') -ax1.axis('off') +ax1.set_title("Entropy") +ax1.axis("off") fig.colorbar(img1, ax=ax1) +fig.tight_layout() + plt.show()