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