Minor fixes and improvements: PEP8, appearance, etc.

Removed a clumsy workaround (about paths)

Fixed links to image files to fix sphinx warning.

Removed non-ascii character

Another non ascii character

And another non-ascii character... (to be squashed later on)

Corrected some typos in the docstrings of sphinx-gallery files

These corrections have also been submitted as a patch to the original
sphinx-gallery project (#121)

Corrected the appearance of two examples of the gallery

Tweaked CSS for larger images

Added sphinx-gallery's license and a README.txt about the origin of
this directory.

Edited gabor_from_astronaut example for nicer popup

PEP 8 + minor fixes

Removed commented lines of code
This commit is contained in:
emmanuelle
2016-05-17 23:37:12 +02:00
parent d998e7e534
commit 8b2dbd56e5
15 changed files with 101 additions and 72 deletions
+6 -6
View File
@@ -72,12 +72,12 @@ img_adapteq = exposure.equalize_adapthist(img, clip_limit=0.03)
# Display results
fig = plt.figure(figsize=(8, 5))
axes = np.zeros((2,4), dtype=np.object)
axes[0,0] = fig.add_subplot(2, 4, 1)
for i in range(1,4):
axes[0,i] = fig.add_subplot(2, 4, 1+i, sharex=axes[0,0], sharey=axes[0,0])
for i in range(0,4):
axes[1,i] = fig.add_subplot(2, 4, 5+i)
axes = np.zeros((2, 4), dtype=np.object)
axes[0, 0] = fig.add_subplot(2, 4, 1)
for i in range(1, 4):
axes[0, i] = fig.add_subplot(2, 4, 1+i, sharex=axes[0,0], sharey=axes[0,0])
for i in range(0, 4):
axes[1, i] = fig.add_subplot(2, 4, 5+i)
ax_img, ax_hist, ax_cdf = plot_img_and_hist(img, axes[:, 0])
ax_img.set_title('Low contrast image')
@@ -60,7 +60,6 @@ h = rescale_intensity(ihc_hed[:, :, 0], out_range=(0, 1))
d = rescale_intensity(ihc_hed[:, :, 2], out_range=(0, 1))
zdh = np.dstack((np.zeros_like(h), d, h))
#fig, ax = plt.subplots()
fig = plt.figure()
ax = plt.subplot(1, 1, 1, sharex=ax0, sharey=ax0, adjustable='box-forced')
ax.imshow(zdh)
@@ -3,7 +3,7 @@
Gabors / Primary Visual Cortex "Simple Cells" from an Image
============================================================
How to build a (bio-plausible) "sparse" dictionary (or 'codebook', or
How to build a (bio-plausible) *sparse* dictionary (or 'codebook', or
'filterbank') for e.g. image classification without any fancy math and
with just standard python scientific libraries?
@@ -3,11 +3,10 @@
Filling holes and finding peaks
===============================
In this example, we fill holes (i.e. isolated, dark spots) in an image using
morphological reconstruction by erosion. Erosion expands the minimal values of
the seed image until it encounters a mask image. Thus, the seed image and mask
image represent the maximum and minimum possible values of the reconstructed
image.
We fill holes (i.e. isolated, dark spots) in an image using morphological
reconstruction by erosion. Erosion expands the minimal values of the seed image
until it encounters a mask image. Thus, the seed image and mask image represent
the maximum and minimum possible values of the reconstructed image.
We start with an image containing both peaks and holes:
@@ -21,14 +20,6 @@ image = data.moon()
# Rescale image intensity so that we can see dim features.
image = rescale_intensity(image, in_range=(50, 200))
fig,ax = plt.subplots(2, 2, figsize=(5, 4), sharex=True, sharey=True, subplot_kw={'adjustable':'box-forced'})
ax = ax.ravel()
ax[0].imshow(image)
ax[0].set_title('Original image')
ax[0].axis('off')
######################################################################
# Now we need to create the seed image, where the minima represent the
# starting points for erosion. To fill holes, we initialize the seed image
@@ -46,21 +37,12 @@ mask = image
filled = reconstruction(seed, mask, method='erosion')
ax[1].imshow(filled)
ax[1].set_title('after filling holes')
ax[1].axis('off')
######################################################################
# As shown above, eroding inward from the edges removes holes, since (by
# definition) holes are surrounded by pixels of brighter value. Finally, we
# can isolate the dark regions by subtracting the reconstructed image from
# the original image.
ax[2].imshow(image-filled)
ax[2].set_title('holes')
ax[2].axis('off')
######################################################################
#
# Alternatively, we can find bright spots in an image using morphological
# reconstruction by dilation. Dilation is the inverse of erosion and expands
# the *maximal* values of the seed image until it encounters a mask image.
@@ -72,7 +54,23 @@ seed = np.copy(image)
seed[1:-1, 1:-1] = image.min()
rec = reconstruction(seed, mask, method='dilation')
ax[3].imshow(image-rec)
fig, ax = plt.subplots(2, 2, figsize=(5, 4), sharex=True, sharey=True,
subplot_kw={'adjustable': 'box-forced'})
ax = ax.ravel()
ax[0].imshow(image, cmap='gray')
ax[0].set_title('Original image')
ax[0].axis('off')
ax[1].imshow(filled, cmap='gray')
ax[1].set_title('after filling holes')
ax[1].axis('off')
ax[2].imshow(image-filled, cmap='gray')
ax[2].set_title('holes')
ax[2].axis('off')
ax[3].imshow(image-rec, cmap='gray')
ax[3].set_title('peaks')
ax[3].axis('off')
plt.show()
@@ -12,19 +12,12 @@ neighborhood around a pixel.
In this document we outline the following basic morphological operations:
1. Erosion
2. Dilation
3. Opening
4. Closing
5. White Tophat
6. Black Tophat
7. Skeletonize
8. Convex Hull
@@ -46,6 +39,7 @@ ax.imshow(orig_phantom, cmap=plt.cm.gray)
######################################################################
# Let's also define a convenience function for plotting comparisons:
def plot_comparison(original, filtered, filter_name):
fig, (ax1, ax2) = plt.subplots(ncols=2, figsize=(8, 4), sharex=True,
@@ -188,9 +182,9 @@ plot_comparison(phantom, b_tophat, 'black tophat')
#
# 1. Erosion <-> Dilation
#
# 2. Opening <-> Closing
# 2. Opening <-> Closing
#
# 3. White tophat <-> Black tophat
# 3. White tophat <-> Black tophat
#
#Skeletonize
#===========
@@ -467,7 +467,7 @@ for ax in ax.ravel():
######################################################################
#
# Feature extraction
# ===================
# ===================
#
# Local histograms can be exploited to compute local entropy, which is
# related to the local image complexity. Entropy is computed using base 2
+27
View File
@@ -0,0 +1,27 @@
Copyright (c) 2015, Óscar Nájera
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
* Neither the name of sphinx-gallery nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+6
View File
@@ -0,0 +1,6 @@
This directory was taken from
https://github.com/sphinx-gallery/sphinx-gallery
Files should not diverge from the original sphinx-gallery project, and
any modifications should be submitted as pull requests to sphinx-gallery
(with some exceptions such as CSS tweaking).
+17 -7
View File
@@ -1,8 +1,8 @@
/*
Sphinx-Gallery is has compatible CSS to fix default sphinx themes
Sphinx-Gallery has compatible CSS to fix default sphinx themes
Tested for Sphinx 1.3.1 for all themes: default, alabaster, sphinxdoc,
scrolls, agogo, traditional, nature, haiku, pyramid
Tested for Read the docs theme 0.1.7 */
Tested for Read the Docs theme 0.1.7 */
.sphx-glr-thumbcontainer {
background: #fff;
border: solid #fff 1px;
@@ -12,7 +12,7 @@ Tested for Read the docs theme 0.1.7 */
box-shadow: none;
float: left;
margin: 5px;
min-height: 230px;
min-height: 240px;
padding-top: 5px;
position: relative;
}
@@ -40,12 +40,12 @@ thumbnail with its default link Background color */
}
.sphx-glr-thumbcontainer .figure {
margin: 10px;
width: 160px;
width: 200px;
}
.sphx-glr-thumbcontainer img {
display: inline;
max-height: 160px;
width: 160px;
max-height: 200px;
width: 200px;
}
.sphx-glr-thumbcontainer[tooltip]:hover:after {
background: rgba(0, 0, 0, 0.8);
@@ -58,7 +58,7 @@ thumbnail with its default link Background color */
padding: 5px 15px;
position: absolute;
z-index: 98;
width: 220px;
width: 240px;
bottom: 52%;
}
.sphx-glr-thumbcontainer[tooltip]:hover:before {
@@ -125,3 +125,13 @@ ul.sphx-glr-horizontal li {
ul.sphx-glr-horizontal img {
height: auto !important;
}
p.sphx-glr-signature a.reference.external {
background-color: #EBECED;
-moz-border-radius: 5px;
-webkit-border-radius: 5px;
border-radius: 5px;
padding: 3px;
position: absolute;
right: 15px;
}
+3 -7
View File
@@ -58,11 +58,7 @@ def get_data(url, gallery_dir):
if sys.version_info[0] == 2 and isinstance(url, unicode):
url = url.encode('utf-8')
cwd = os.getcwd()
if 'source' in cwd:
cached_file = os.path.join(gallery_dir, 'searchindex')
else:
cached_file = os.path.join('source', gallery_dir, 'searchindex')
cached_file = os.path.join(gallery_dir, 'searchindex')
search_index = shelve.open(cached_file)
if url in search_index:
data = search_index[url]
@@ -321,6 +317,8 @@ class SphinxDocLinkResolver(object):
def _embed_code_links(app, gallery_conf, gallery_dir):
# Add resolvers for the packages for which we want to show links
working_dir = os.getcwd()
os.chdir(app.builder.srcdir)
doc_resolvers = {}
for this_module, url in gallery_conf['reference_url'].items():
try:
@@ -344,8 +342,6 @@ def _embed_code_links(app, gallery_conf, gallery_dir):
"Error:\n".format(this_module))
print(e.args)
working_dir = os.getcwd()
os.chdir(app.builder.srcdir)
html_gallery_dir = os.path.abspath(os.path.join(app.builder.outdir,
gallery_dir))
# patterns for replacement
+3 -3
View File
@@ -4,7 +4,7 @@ r"""
Parser for Jupyter notebooks
============================
Class that holds the Ipython notebook information
Class that holds the Jupyter notebook information
"""
# Author: Óscar Nájera
@@ -48,7 +48,7 @@ def ipy_notebook_skeleton():
def rst2md(text):
"""Converts the RST text from the examples docstrigs and comments
into markdown text for the IPython notebooks"""
into markdown text for the Jupyter notebooks"""
top_heading = re.compile(r'^=+$\s^([\w\s-]+)^=+$', flags=re.M)
text = re.sub(top_heading, r'# \1', text)
@@ -64,7 +64,7 @@ def rst2md(text):
class Notebook(object):
"""Ipython notebook object
"""Jupyter notebook object
Constructs the file cell-by-cell and writes it at the end"""
-1
View File
@@ -31,7 +31,6 @@ extensions = ['sphinx.ext.autodoc',
'sphinx.ext.imgmath',
'numpydoc',
'sphinx.ext.autosummary',
#'plot2rst',
'sphinx.ext.intersphinx',
'sphinx.ext.linkcode',
'sphinx_gallery.gen_gallery'
+1 -1
View File
@@ -81,7 +81,7 @@ disk: ::
... (nrows / 2)**2)
>>> camera[outer_disk_mask] = 0
.. image:: ../../_images/sphx_glr_plot_camera_numpy_001.png
.. image:: ../auto_examples/numpy_operations/images/sphx_glr_plot_camera_numpy_001.png
:width: 45%
:target: ../auto_examples/numpy_operations/plot_camera_numpy.html
@@ -78,7 +78,7 @@ using an array of labels to encode the regions to be represented with the
same color.
.. image:: ../../_images/sphx_glr_plot_join_segmentations_001.png
.. image:: ../auto_examples/segmentation/images/sphx_glr_plot_join_segmentations_001.png
:target: ../auto_examples/segmentation/plot_join_segmentations.html
:align: center
:width: 80%
@@ -159,7 +159,7 @@ image with :func:`equalize_adapthist`, in order to correct for exposure
gradients across the image. See the example
:ref:`sphx_glr_auto_examples_color_exposure_plot_equalize.py`.
.. image:: ../../_images/sphx_glr_plot_equalize_001.png
.. image:: ../auto_examples/color_exposure/images/sphx_glr_plot_equalize_001.png
:target: ../auto_examples/color_exposure/plot_equalize.html
:align: center
:width: 90%
@@ -11,7 +11,7 @@ the coins cannot be done directly from the histogram of grey values,
because the background shares enough grey levels with the coins that a
thresholding segmentation is not sufficient.
.. image:: ../../_images/sphx_glr_plot_coins_segmentation_001.png
.. image:: ../auto_examples/xx_applications/images/sphx_glr_plot_coins_segmentation_001.png
:target: ../auto_examples/xx_applications/plot_coins_segmentation.html
:align: center
@@ -26,7 +26,7 @@ Simply thresholding the image leads either to missing significant parts
of the coins, or to merging parts of the background with the
coins. This is due to the inhomogeneous lighting of the image.
.. image:: ../../_images/sphx_glr_plot_coins_segmentation_002.png
.. image:: ../auto_examples/xx_applications/images/sphx_glr_plot_coins_segmentation_002.png
:target: ../auto_examples/xx_applications/plot_coins_segmentation.html
:align: center
@@ -53,7 +53,7 @@ boundary of the coins, or inside the coins.
>>> from scipy import ndimage as ndi
>>> fill_coins = ndi.binary_fill_holes(edges)
.. image:: ../../_images/sphx_glr_plot_coins_segmentation_003.png
.. image:: ../auto_examples/xx_applications/images/sphx_glr_plot_coins_segmentation_003.png
:target: ../auto_examples/xx_applications/plot_coins_segmentation.html
:align: center
@@ -62,7 +62,7 @@ we fill the inner part of the coins using the
``ndi.binary_fill_holes`` function, which uses mathematical morphology
to fill the holes.
.. image:: ../../_images/sphx_glr_plot_coins_segmentation_004.png
.. image:: ../auto_examples/xx_applications/images/sphx_glr_plot_coins_segmentation_004.png
:target: ../auto_examples/xx_applications/plot_coins_segmentation.html
:align: center
@@ -83,7 +83,7 @@ has not been segmented correctly at all. The reason is that the contour
that we got from the Canny detector was not completely closed, therefore
the filling function did not fill the inner part of the coin.
.. image:: ../../_images/sphx_glr_plot_coins_segmentation_005.png
.. image:: ../auto_examples/xx_applications/images/sphx_glr_plot_coins_segmentation_005.png
:target: ../auto_examples/xx_applications/plot_coins_segmentation.html
:align: center
@@ -128,7 +128,7 @@ separate the coins from the background.
and here is the corresponding 2-D plot:
.. image:: ../../_images/sphx_glr_plot_coins_segmentation_006.png
.. image:: ../auto_examples/xx_applications/images/sphx_glr_plot_coins_segmentation_006.png
:target: ../auto_examples/xx_applications/plot_coins_segmentation.html
:align: center
@@ -139,7 +139,7 @@ extreme parts of the histogram of grey values::
>>> markers[coins < 30] = 1
>>> markers[coins > 150] = 2
.. image:: ../../_images/sphx_glr_plot_coins_segmentation_007.png
.. image:: ../auto_examples/xx_applications/images/sphx_glr_plot_coins_segmentation_007.png
:target: ../auto_examples/xx_applications/plot_coins_segmentation.html
:align: center
@@ -148,7 +148,7 @@ Let us now compute the watershed transform::
>>> from skimage.morphology import watershed
>>> segmentation = watershed(elevation_map, markers)
.. image:: ../../_images/sphx_glr_plot_coins_segmentation_008.png
.. image:: ../auto_examples/xx_applications/images/sphx_glr_plot_coins_segmentation_008.png
:target: ../auto_examples/xx_applications/plot_coins_segmentation.html
:align: center
@@ -165,7 +165,7 @@ We can now label all the coins one by one using ``ndi.label``::
>>> labeled_coins, _ = ndi.label(segmentation)
.. image:: ../../_images/sphx_glr_plot_coins_segmentation_009.png
.. image:: ../auto_examples/xx_applications/images/sphx_glr_plot_coins_segmentation_009.png
:target: ../auto_examples/xx_applications/plot_coins_segmentation.html
:align: center