New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Gallery: Use Horse to illustrate Convex Hull #2431
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -6,51 +6,44 @@ | |
The convex hull of a binary image is the set of pixels included in the | ||
smallest convex polygon that surround all white pixels in the input. | ||
|
||
In this example, we show how the input pixels (white) get filled in by the | ||
convex hull (white and grey). | ||
|
||
A good overview of the algorithm is given on `Steve Eddin's blog | ||
<http://blogs.mathworks.com/steve/2011/10/04/binary-image-convex-hull-algorithm-notes/>`__. | ||
|
||
""" | ||
|
||
import numpy as np | ||
import matplotlib.pyplot as plt | ||
|
||
from skimage.morphology import convex_hull_image | ||
from skimage import data, img_as_float | ||
from skimage.util import invert | ||
|
||
|
||
image = np.array( | ||
[[0, 0, 0, 0, 0, 0, 0, 0, 0], | ||
[0, 0, 0, 0, 1, 0, 0, 0, 0], | ||
[0, 0, 0, 1, 0, 1, 0, 0, 0], | ||
[0, 0, 1, 0, 0, 0, 1, 0, 0], | ||
[0, 1, 0, 0, 0, 0, 0, 1, 0], | ||
[0, 0, 0, 0, 0, 0, 0, 0, 0]], dtype=float) | ||
|
||
original_image = np.copy(image) | ||
# The original image is inverted as the object must be white. | ||
image = invert(data.horse()) | ||
|
||
chull = convex_hull_image(image) | ||
image[chull] += 1 | ||
|
||
# image is now: | ||
# [[ 0. 0. 0. 0. 0. 0. 0. 0. 0.] | ||
# [ 0. 0. 0. 0. 2. 0. 0. 0. 0.] | ||
# [ 0. 0. 0. 2. 1. 2. 0. 0. 0.] | ||
# [ 0. 0. 2. 1. 1. 1. 2. 0. 0.] | ||
# [ 0. 2. 1. 1. 1. 1. 1. 2. 0.] | ||
# [ 0. 0. 0. 0. 0. 0. 0. 0. 0.]] | ||
|
||
fig, axes = plt.subplots(1, 2, figsize=(9, 3)) | ||
fig, axes = plt.subplots(1, 2, figsize=(8, 4)) | ||
ax = axes.ravel() | ||
|
||
ax[0].set_title('Original picture') | ||
ax[0].imshow(original_image, cmap=plt.cm.gray, interpolation='nearest') | ||
ax[0].imshow(image, cmap=plt.cm.gray, interpolation='nearest') | ||
ax[0].set_axis_off() | ||
|
||
ax[1].set_title('Transformed picture') | ||
ax[1].imshow(image, cmap=plt.cm.gray, interpolation='nearest') | ||
ax[1].imshow(chull, cmap=plt.cm.gray, interpolation='nearest') | ||
ax[1].set_axis_off() | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I really like the way the current example looks. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. OK. I think I'll try to make a second plot to better explain that gray = added pixels. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. done |
||
|
||
plt.tight_layout() | ||
plt.show() | ||
|
||
###################################################################### | ||
# We prepare a second plot to show the difference. | ||
# | ||
|
||
chull_diff = img_as_float(chull.copy()) | ||
chull_diff[image] = 2 | ||
|
||
fig, ax = plt.subplots() | ||
ax.imshow(chull_diff, cmap=plt.cm.gray, interpolation='nearest') | ||
ax.set_title('Difference') | ||
plt.show() |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
-> "Invert the image so to make horse silhouette have higher intensity values"?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
But Convex-hull works only on binary images. Do you think that "higher" is appropriated?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I just think that it is worthwhile to mention the correspondence between intensities and colors here.
From the first read this sentence was very unclear to me: object be white -> it was black? -> what does it mean to be white? -> what does invert actually do?. I think if you could clarify this a bit, it wil be perfect!