diff --git a/.travis.yml b/.travis.yml index 881b79e1..aa816a4a 100644 --- a/.travis.yml +++ b/.travis.yml @@ -47,6 +47,7 @@ before_install: - pip install --use-mirrors matplotlib; - fi + - pip install --use-mirrors pillow - pip install --use-mirrors cython - pip install --use-mirrors flake8 - pip install --use-mirrors six diff --git a/doc/examples/plot_blob.py b/doc/examples/plot_blob.py new file mode 100644 index 00000000..33cc44c2 --- /dev/null +++ b/doc/examples/plot_blob.py @@ -0,0 +1,73 @@ +""" +============== +Blob Detection +============== + +Blobs are bright on dark or dark on bright regions in an image. In +this example, blobs are detected using 3 algorithms. The image used +in this case is the Hubble eXtreme Deep Field. Each bright dot in the +image is a star or a galaxy. + +Laplacian of Gaussian (LoG) +----------------------------- +This is the most accurate and slowest approach. It computes the Laplacian +of Gaussian images with successively increasing standard deviation and +stacks them up in a cube. Blobs are local maximas in this cube. Detecting +larger blobs is especially slower because of larger kernel sizes during +convolution. Only bright blobs on dark backgrounds are detected. See +:py:meth:`skimage.feature.blob_log` for usage. + +Difference of Gaussian (DoG) +---------------------------- +This is a faster approximation of LoG approach. In this case the image is +blurred with increasing standard deviations and the difference between +two successively blurred images are stacked up in a cube. This method +suffers from the same disadvantage as LoG approach for detecting larger +blobs. Blobs are again assumed to be bright on dark. See +:py:meth:`skimage.feature.blob_dog` for usage. + +Determinant of Hessian (DoH) +---------------------------- +This is the fastest approach. It detects blobs by finding maximas in the +matrix of the Determinant of Hessian of the image. The detection speed is +independent of the size of blobs as internally the implementation uses +box filters instead of convolutions. Bright on dark as well as dark on +bright blobs are detected. The downside is that small blobs (<3px) are not +detected accurately. See :py:meth:`skimage.feature.blob_doh` for usage. + +""" + +from matplotlib import pyplot as plt +from skimage import data +from skimage.feature import blob_dog, blob_log, blob_doh +from math import sqrt +from skimage.color import rgb2gray + +image = data.hubble_deep_field()[0:500, 0:500] +image_gray = rgb2gray(image) + +blobs_log = blob_log(image_gray, max_sigma=30, num_sigma=10, threshold=.1) +# Compute radii in the 3rd column. +blobs_log[:, 2] = blobs_log[:, 2] * sqrt(2) + +blobs_dog = blob_dog(image_gray, max_sigma=30, threshold=.1) +blobs_dog[:, 2] = blobs_dog[:, 2] * sqrt(2) + +blobs_doh = blob_doh(image_gray, max_sigma=30, threshold=.01) + +blobs_list = [blobs_log, blobs_dog, blobs_doh] +colors = ['yellow', 'lime', 'red'] +titles = ['Laplacian of Gaussian', 'Difference of Gaussian', + 'Determinant of Hessian'] +sequence = zip(blobs_list, colors, titles) + +for blobs, color, title in sequence: + fig, ax = plt.subplots(1, 1) + ax.set_title(title) + ax.imshow(image, interpolation='nearest') + for blob in blobs: + y, x, r = blob + c = plt.Circle((x, y), r, color=color, linewidth=2, fill=False) + ax.add_patch(c) + +plt.show() diff --git a/skimage/data/__init__.py b/skimage/data/__init__.py index ecd261f7..b06c1f83 100644 --- a/skimage/data/__init__.py +++ b/skimage/data/__init__.py @@ -24,7 +24,8 @@ __all__ = ['load', 'clock', 'immunohistochemistry', 'chelsea', - 'coffee'] + 'coffee', + 'hubble_deep_field'] def load(f): @@ -200,3 +201,23 @@ def coffee(): """ return load("coffee.png") + + +def hubble_deep_field(): + """Hubble eXtreme Deep Field. + + This photograph contains the Hubble Telescope's farthest ever view of + the universe. It can be useful as an example for multi-scale + detection. + + Notes + ----- + This image was downloaded from + `HubbleSite + `__. + + The image was captured by NASA and `may be freely used in the + public domain `_. + + """ + return load("hubble_deep_field.jpg") diff --git a/skimage/data/hubble_deep_field.jpg b/skimage/data/hubble_deep_field.jpg new file mode 100644 index 00000000..50c1b81a Binary files /dev/null and b/skimage/data/hubble_deep_field.jpg differ