Skip to content
Snippets Groups Projects
Commit a189e797 authored by Olivier Bertrand's avatar Olivier Bertrand
Browse files

Add the doc

parent 0bf8d72a
No related branches found
No related tags found
No related merge requests found
Showing
with 421 additions and 0 deletions
# Minimal makefile for Sphinx documentation
#
# You can set these variables from the command line.
SPHINXOPTS =
SPHINXBUILD = sphinx-build
SPHINXPROJ = Navigation_Toolbox
SOURCEDIR = source
BUILDDIR = build
# Put it first so that "make" without argument is like "make help".
help:
@$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
.PHONY: help Makefile
# Catch-all target: route all unknown targets to Sphinx using the new
# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS).
%: Makefile
@$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
\ No newline at end of file
File added
File added
File added
File added
File added
File added
File added
File added
File added
File added
doc/build/html/_images/apcv.png

200 KiB

doc/build/html/_images/contrast_weighted_nearness.png

335 KiB

doc/build/html/_images/load_image_posorient.png

52.2 KiB

doc/build/html/_images/load_image_rowid.png

25.3 KiB

doc/build/html/_images/michelson_contrast.png

362 KiB

doc/build/html/_images/scene.png

200 KiB

doc/build/html/_images/skyline.png

41.9 KiB

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Overview: module code &#8212; Navigation Toolbox a0 documentation</title>
<link rel="stylesheet" href="../_static/alabaster.css" type="text/css" />
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../',
VERSION: 'a0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
SOURCELINK_SUFFIX: '.txt'
};
</script>
<script type="text/javascript" src="../_static/jquery.js"></script>
<script type="text/javascript" src="../_static/underscore.js"></script>
<script type="text/javascript" src="../_static/doctools.js"></script>
<script type="text/javascript" src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
<link rel="stylesheet" href="../_static/custom.css" type="text/css" />
<meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
</head>
<body role="document">
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<h1>All modules for which code is available</h1>
<ul><li><a href="processing.html">processing</a></li>
</ul>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper"><div class="relations">
<h3>Related Topics</h3>
<ul>
<li><a href="../index.html">Documentation overview</a><ul>
</ul></li>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
<h3>Quick search</h3>
<form class="search" action="../search.html" method="get">
<div><input type="text" name="q" /></div>
<div><input type="submit" value="Go" /></div>
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="footer">
&copy;2017, Olivier J.N. Bertrand.
|
Powered by <a href="http://sphinx-doc.org/">Sphinx 1.5.3</a>
&amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.8</a>
</div>
</body>
</html>
\ No newline at end of file
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>processing &#8212; Navigation Toolbox a0 documentation</title>
<link rel="stylesheet" href="../_static/alabaster.css" type="text/css" />
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../',
VERSION: 'a0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
SOURCELINK_SUFFIX: '.txt'
};
</script>
<script type="text/javascript" src="../_static/jquery.js"></script>
<script type="text/javascript" src="../_static/underscore.js"></script>
<script type="text/javascript" src="../_static/doctools.js"></script>
<script type="text/javascript" src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
<link rel="stylesheet" href="../_static/custom.css" type="text/css" />
<meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
</head>
<body role="document">
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<h1>Source code for processing</h1><div class="highlight"><pre>
<span></span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd">The scene processing part of the toolbox defines methodes</span>
<span class="sd">to transform an image into a place code in the sense</span>
<span class="sd">of Basten and Mallot (2010).</span>
<span class="sd">The scene is either</span>
<span class="sd">* a 4d numpy array, used when the image is a equirectangular \</span>
<span class="sd">projection, i.e. a panoramic image.</span>
<span class="sd">* a 3d numpy array, used when the viewing direction can not \</span>
<span class="sd">be mapped/projected on a regular image (e.g. insect eye).</span>
<span class="sd">We thus define the following for a scene:</span>
<span class="sd">image based scene (IBS)</span>
<span class="sd"> A classical image. Each pixel is viewed in a direction</span>
<span class="sd"> (elevation,azimuth) in a regular manner.</span>
<span class="sd"> In that case the scene is a 4d numpy array</span>
<span class="sd"> [elevation-index,azimuth-index,channel-index,1].</span>
<span class="sd">Omatidium based scene (OBS)</span>
<span class="sd"> In an ommatidia based scene, the viewing direction</span>
<span class="sd"> do not need to be regularally spaced.</span>
<span class="sd"> In that case the scene is a 3d numpy array</span>
<span class="sd"> [ommatidia-index, channel-index,1].</span>
<span class="sd">By extension a place-code is either image based or ommatidium based.</span>
<span class="sd">The number of dimension of an ib-place-code is always 4, and of an</span>
<span class="sd">ob-place-code always 3.</span>
<span class="sd">image based place-code (IBPC)</span>
<span class="sd"> A place code derived from IBS. Each pixel is viewed in a direction</span>
<span class="sd"> (elevation,azimuth) in a regular manner.</span>
<span class="sd"> In that case the scene is a 4d numpy array</span>
<span class="sd"> [elevation-index,azimuth-index,channel-index,component-index].</span>
<span class="sd">Omatidium based place-code (OBPC)</span>
<span class="sd"> A place code derived from OBS, the viewing direction</span>
<span class="sd"> do not need to be regularally spaced.</span>
<span class="sd"> In that case the scene is a 3d numpy array</span>
<span class="sd"> [ommatidia-index, channel-index,component-index].</span>
<span class="sd">Abusing the terminology of a place-code, a scene can be a place-code.</span>
<span class="sd">Therefore ibs and obs have 4 and 3 dimension, respectively.</span>
<span class="sd">.. todo:</span>
<span class="sd"> * implement optic flow vector</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span>
<span class="kn">import</span> <span class="nn">pandas</span> <span class="k">as</span> <span class="nn">pd</span>
<span class="kn">from</span> <span class="nn">scipy.ndimage</span> <span class="k">import</span> <span class="n">maximum_filter</span><span class="p">,</span> <span class="n">minimum_filter</span>
<span class="kn">import</span> <span class="nn">processing.constants</span> <span class="k">as</span> <span class="nn">prc</span>
<span class="kn">import</span> <span class="nn">processing.tools</span> <span class="k">as</span> <span class="nn">prt</span>
<div class="viewcode-block" id="scene"><a class="viewcode-back" href="../processing.html#processing.scene">[docs]</a><span class="k">def</span> <span class="nf">scene</span><span class="p">(</span><span class="n">database</span><span class="p">,</span> <span class="n">posorient</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">rowid</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot; Return a scene at a position orientation or given rowid</span>
<span class="sd"> in a given database.</span>
<span class="sd"> :param database: a DataBaseLoad class \</span>
<span class="sd"> :param posorient: a pandas Series with index: \</span>
<span class="sd">[&#39;x&#39;,&#39;y&#39;,&#39;z&#39;,&#39;alpha_0,&#39;alpha_1,&#39;alpha_2&#39;] (default None, i.e. not used)</span>
<span class="sd"> :param rowid: a row identification integer for directly reading \</span>
<span class="sd">in the database (default None, i.e. not used).</span>
<span class="sd"> :returns: a scene [elevation, azimuth, channel, 1] or \</span>
<span class="sd">[ommatidia,channel,1].</span>
<span class="sd"> :rtype: np.ndarray</span>
<span class="sd"> .. literalinclude:: example/processing/scene.py</span>
<span class="sd"> :lines: 13-14</span>
<span class="sd"> .. plot:: example/processing/scene.py</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="n">posorient</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">assert</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">posorient</span><span class="p">,</span> <span class="n">pd</span><span class="o">.</span><span class="n">Series</span><span class="p">),</span>\
<span class="s1">&#39;posorient should be a pandas Series&#39;</span>
<span class="n">scene</span> <span class="o">=</span> <span class="n">database</span><span class="o">.</span><span class="n">read_image</span><span class="p">(</span><span class="n">posorient</span><span class="o">=</span><span class="n">posorient</span><span class="p">,</span>
<span class="n">rowid</span><span class="o">=</span><span class="n">rowid</span><span class="p">)</span>
<span class="n">scene</span> <span class="o">=</span> <span class="n">scene</span><span class="p">[</span><span class="o">...</span><span class="p">,</span> <span class="n">np</span><span class="o">.</span><span class="n">newaxis</span><span class="p">]</span>
<span class="k">return</span> <span class="n">scene</span></div>
<div class="viewcode-block" id="skyline"><a class="viewcode-back" href="../processing.html#processing.skyline">[docs]</a><span class="k">def</span> <span class="nf">skyline</span><span class="p">(</span><span class="n">scene</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Return the average along the elevation of a scene</span>
<span class="sd"> :param scene: the scenery at a given location (a 4d numpy array)</span>
<span class="sd"> :returns: the skyline [1,azimuth,channel,1]</span>
<span class="sd"> :rtype: np.ndarray</span>
<span class="sd"> .. literalinclude:: example/processing/skyline.py</span>
<span class="sd"> :lines: 12-14</span>
<span class="sd"> .. plot:: example/processing/skyline.py</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">assert</span> <span class="n">prt</span><span class="o">.</span><span class="n">is_ibpc</span><span class="p">(</span><span class="n">scene</span><span class="p">),</span>\
<span class="s1">&#39;scene should be image based to compute a skyline&#39;</span>
<span class="n">skyline</span> <span class="o">=</span> <span class="n">scene</span><span class="o">.</span><span class="n">mean</span><span class="p">(</span><span class="n">axis</span><span class="o">=</span><span class="n">prc</span><span class="o">.</span><span class="n">__ibpc_indeces__</span><span class="p">[</span><span class="s1">&#39;elevation&#39;</span><span class="p">])</span>
<span class="k">return</span> <span class="n">skyline</span><span class="p">[</span><span class="n">np</span><span class="o">.</span><span class="n">newaxis</span><span class="p">,</span> <span class="p">:]</span></div>
<div class="viewcode-block" id="michelson_contrast"><a class="viewcode-back" href="../processing.html#processing.michelson_contrast">[docs]</a><span class="k">def</span> <span class="nf">michelson_contrast</span><span class="p">(</span><span class="n">scene</span><span class="p">,</span> <span class="n">size</span><span class="o">=</span><span class="mi">3</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Return the michelson constrast</span>
<span class="sd"> .. math::</span>
<span class="sd"> \\frac{I_\\text{max}-I_\\text{min}}{I_\\text{max}+I_\\text{min}}</span>
<span class="sd"> with :math:`I_\\text{max}` and :math:`I_\\text{min}` representing the \</span>
<span class="sd">highest and lowest luminance in an image region around each pixel.</span>
<span class="sd"> :param scene: an image based scene</span>
<span class="sd"> :param size: the size of the region to calculate the maximum \</span>
<span class="sd">and minimum of the local image intensity</span>
<span class="sd"> :returns: the michelson-contrast</span>
<span class="sd"> :rtype: np.ndarray</span>
<span class="sd"> .. literalinclude:: example/processing/michelson_contrast.py</span>
<span class="sd"> :lines: 12-14</span>
<span class="sd"> .. plot:: example/processing/michelson_contrast.py</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">assert</span> <span class="n">prt</span><span class="o">.</span><span class="n">is_ibpc</span><span class="p">(</span><span class="n">scene</span><span class="p">),</span> \
<span class="s1">&#39;scene should be image based to compute the michelson constrast&#39;</span>
<span class="n">contrast</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">zeros_like</span><span class="p">(</span><span class="n">scene</span><span class="p">)</span>
<span class="k">for</span> <span class="n">channel</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">scene</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="n">prc</span><span class="o">.</span><span class="n">__ibpc_indeces__</span><span class="p">[</span><span class="s1">&#39;channel&#39;</span><span class="p">]]):</span>
<span class="n">i_max</span> <span class="o">=</span> <span class="n">maximum_filter</span><span class="p">(</span><span class="n">scene</span><span class="p">[</span><span class="o">...</span><span class="p">,</span> <span class="n">channel</span><span class="p">,</span> <span class="mi">0</span><span class="p">],</span>
<span class="n">size</span><span class="o">=</span><span class="n">size</span><span class="p">,</span> <span class="n">mode</span><span class="o">=</span><span class="s1">&#39;wrap&#39;</span><span class="p">)</span>
<span class="n">i_min</span> <span class="o">=</span> <span class="n">minimum_filter</span><span class="p">(</span><span class="n">scene</span><span class="p">[</span><span class="o">...</span><span class="p">,</span> <span class="n">channel</span><span class="p">,</span> <span class="mi">0</span><span class="p">],</span>
<span class="n">size</span><span class="o">=</span><span class="n">size</span><span class="p">,</span> <span class="n">mode</span><span class="o">=</span><span class="s1">&#39;wrap&#39;</span><span class="p">)</span>
<span class="n">contrast</span><span class="p">[</span><span class="o">...</span><span class="p">,</span> <span class="n">channel</span><span class="p">,</span> <span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span><span class="n">i_max</span> <span class="o">-</span> <span class="n">i_min</span><span class="p">)</span> <span class="o">/</span> <span class="p">(</span><span class="n">i_max</span> <span class="o">+</span> <span class="n">i_min</span><span class="p">)</span>
<span class="k">return</span> <span class="n">contrast</span></div>
<div class="viewcode-block" id="contrast_weighted_nearness"><a class="viewcode-back" href="../processing.html#processing.contrast_weighted_nearness">[docs]</a><span class="k">def</span> <span class="nf">contrast_weighted_nearness</span><span class="p">(</span><span class="n">scene</span><span class="p">,</span> <span class="n">contrast_size</span><span class="o">=</span><span class="mi">3</span><span class="p">,</span> <span class="n">distance_channel</span><span class="o">=</span><span class="mi">3</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Return the michelson contrast wheighted nearness</span>
<span class="sd"> :param scene: an image based scene</span>
<span class="sd"> :param contrast_size: the size of the region to calculate the maximum \</span>
<span class="sd">and minimum of the local image intensity in the michelson-contrast.</span>
<span class="sd"> :param distance_channel: the index of the distance-channel.</span>
<span class="sd"> .. literalinclude:: example/processing/contrast_weighted_nearness.py</span>
<span class="sd"> :lines: 12-14</span>
<span class="sd"> .. plot:: example/processing/contrast_weighted_nearness.py</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">assert</span> <span class="n">prt</span><span class="o">.</span><span class="n">is_ibpc</span><span class="p">(</span><span class="n">scene</span><span class="p">),</span> \
<span class="s1">&#39;scene should be image based to compute the contrast weighted nearness&#39;</span>
<span class="n">contrast</span> <span class="o">=</span> <span class="n">michelson_contrast</span><span class="p">(</span><span class="n">scene</span><span class="p">,</span> <span class="n">size</span><span class="o">=</span><span class="n">contrast_size</span><span class="p">)</span>
<span class="n">distance</span> <span class="o">=</span> <span class="n">scene</span><span class="p">[</span><span class="o">...</span><span class="p">,</span> <span class="n">distance_channel</span><span class="p">,</span> <span class="mi">0</span><span class="p">]</span>
<span class="n">distance</span> <span class="o">=</span> <span class="n">distance</span><span class="p">[</span><span class="o">...</span><span class="p">,</span> <span class="n">np</span><span class="o">.</span><span class="n">newaxis</span><span class="p">,</span> <span class="n">np</span><span class="o">.</span><span class="n">newaxis</span><span class="p">]</span>
<span class="n">distance</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">tile</span><span class="p">(</span><span class="n">distance</span><span class="p">,</span> <span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="n">scene</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="o">-</span><span class="mi">2</span><span class="p">],</span> <span class="mi">1</span><span class="p">))</span>
<span class="k">return</span> <span class="n">contrast</span> <span class="o">/</span> <span class="n">distance</span></div>
<div class="viewcode-block" id="pcv"><a class="viewcode-back" href="../processing.html#processing.pcv">[docs]</a><span class="k">def</span> <span class="nf">pcv</span><span class="p">(</span><span class="n">place_code</span><span class="p">,</span> <span class="n">viewing_directions</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Place code vectors</span>
<span class="sd"> :param place_code: the place code at a given location (e.g. an ibs scene)</span>
<span class="sd"> :param viewing_directions: viewing direction of each pixel</span>
<span class="sd"> :returns: the place code vectors in cartesian coordinates</span>
<span class="sd"> :rtype: (np.ndarray)</span>
<span class="sd"> .. literalinclude:: example/processing/pcv.py</span>
<span class="sd"> :lines: 12-14</span>
<span class="sd"> .. plot:: example/processing/pcv.py</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="n">prt</span><span class="o">.</span><span class="n">is_ibpc</span><span class="p">(</span><span class="n">place_code</span><span class="p">):</span>
<span class="n">component_dim</span> <span class="o">=</span> <span class="n">prc</span><span class="o">.</span><span class="n">__ibpc_indeces__</span><span class="p">[</span><span class="s1">&#39;component&#39;</span><span class="p">]</span>
<span class="n">channel_dim</span> <span class="o">=</span> <span class="n">prc</span><span class="o">.</span><span class="n">__ibpc_indeces__</span><span class="p">[</span><span class="s1">&#39;channel&#39;</span><span class="p">]</span>
<span class="k">elif</span> <span class="n">prt</span><span class="o">.</span><span class="n">is_obpc</span><span class="p">(</span><span class="n">place_code</span><span class="p">):</span>
<span class="n">component_dim</span> <span class="o">=</span> <span class="n">prc</span><span class="o">.</span><span class="n">__obpc_indeces__</span><span class="p">[</span><span class="s1">&#39;component&#39;</span><span class="p">]</span>
<span class="n">channel_dim</span> <span class="o">=</span> <span class="n">prc</span><span class="o">.</span><span class="n">__obpc_indeces__</span><span class="p">[</span><span class="s1">&#39;channel&#39;</span><span class="p">]</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span><span class="s1">&#39;place code should be either an ibpc or obpc&#39;</span><span class="p">)</span>
<span class="k">assert</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">viewing_directions</span><span class="p">,</span> <span class="n">np</span><span class="o">.</span><span class="n">ndarray</span><span class="p">),</span> \
<span class="s1">&#39;viewing_directions should be a numpy array&#39;</span>
<span class="k">assert</span> <span class="n">place_code</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="n">component_dim</span><span class="p">]</span> <span class="o">==</span> <span class="mi">1</span><span class="p">,</span> \
<span class="s1">&#39;the last dimension (</span><span class="si">{}</span><span class="s1">) of the place-code should be 1&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
<span class="n">place_code</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="n">component_dim</span><span class="p">])</span>
<span class="n">elevation</span> <span class="o">=</span> <span class="n">viewing_directions</span><span class="p">[</span><span class="o">...</span><span class="p">,</span> <span class="n">prc</span><span class="o">.</span><span class="n">__spherical_indeces__</span><span class="p">[</span><span class="s1">&#39;elevation&#39;</span><span class="p">]]</span>
<span class="n">azimuth</span> <span class="o">=</span> <span class="n">viewing_directions</span><span class="p">[</span><span class="o">...</span><span class="p">,</span> <span class="n">prc</span><span class="o">.</span><span class="n">__spherical_indeces__</span><span class="p">[</span><span class="s1">&#39;azimuth&#39;</span><span class="p">]]</span>
<span class="n">unscaled_lv</span> <span class="o">=</span> <span class="n">prt</span><span class="o">.</span><span class="n">spherical_to_cartesian</span><span class="p">(</span><span class="n">elevation</span><span class="p">,</span> <span class="n">azimuth</span><span class="p">,</span> <span class="n">radius</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
<span class="n">scaled_lv</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">zeros_like</span><span class="p">(</span><span class="n">place_code</span><span class="p">)</span>
<span class="c1"># (3,) -&gt; (1,1,3) or (1,1,1,3) see numpy.tile</span>
<span class="n">scaled_lv</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">tile</span><span class="p">(</span><span class="n">scaled_lv</span><span class="p">,</span> <span class="p">(</span><span class="n">unscaled_lv</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">],))</span>
<span class="k">for</span> <span class="n">channel_index</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">scaled_lv</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="n">channel_dim</span><span class="p">]):</span>
<span class="n">radius</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">tile</span><span class="p">(</span><span class="n">place_code</span><span class="p">[</span><span class="o">...</span><span class="p">,</span> <span class="n">channel_index</span><span class="p">,</span> <span class="mi">0</span><span class="p">]</span>
<span class="p">[</span><span class="o">...</span><span class="p">,</span> <span class="n">np</span><span class="o">.</span><span class="n">newaxis</span><span class="p">],</span> <span class="p">(</span><span class="n">scaled_lv</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">],))</span>
<span class="n">scaled_lv</span><span class="p">[</span><span class="o">...</span><span class="p">,</span> <span class="n">channel_index</span><span class="p">,</span> <span class="p">:]</span> <span class="o">=</span> <span class="n">unscaled_lv</span> <span class="o">*</span> <span class="n">radius</span>
<span class="k">return</span> <span class="n">scaled_lv</span></div>
<div class="viewcode-block" id="apcv"><a class="viewcode-back" href="../processing.html#processing.apcv">[docs]</a><span class="k">def</span> <span class="nf">apcv</span><span class="p">(</span><span class="n">place_code</span><span class="p">,</span> <span class="n">viewing_directions</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Calculate the average scene vector</span>
<span class="sd"> :param place_code: the place code at a given location (e.g. an ibs scene)</span>
<span class="sd"> :param viewing_directions: viewing direction of each pixel</span>
<span class="sd"> :returns: the average place-code vector</span>
<span class="sd"> :rtype: (np.ndarray)</span>
<span class="sd"> .. literalinclude:: example/processing/apcv.py</span>
<span class="sd"> :lines: 12-14</span>
<span class="sd"> .. plot:: example/processing/apcv.py</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">scaled_lv</span> <span class="o">=</span> <span class="n">pcv</span><span class="p">(</span><span class="n">place_code</span><span class="p">,</span> <span class="n">viewing_directions</span><span class="p">)</span>
<span class="k">if</span> <span class="n">prt</span><span class="o">.</span><span class="n">is_ibpc</span><span class="p">(</span><span class="n">place_code</span><span class="p">):</span>
<span class="k">return</span> <span class="p">(</span><span class="n">scaled_lv</span><span class="o">.</span><span class="n">sum</span><span class="p">(</span><span class="n">axis</span><span class="o">=</span><span class="mi">0</span><span class="p">)</span><span class="o">.</span><span class="n">sum</span><span class="p">(</span><span class="n">axis</span><span class="o">=</span><span class="mi">0</span><span class="p">))[</span><span class="n">np</span><span class="o">.</span><span class="n">newaxis</span><span class="p">,</span> <span class="n">np</span><span class="o">.</span><span class="n">newaxis</span><span class="p">,</span> <span class="o">...</span><span class="p">]</span>
<span class="k">elif</span> <span class="n">prt</span><span class="o">.</span><span class="n">is_obpc</span><span class="p">(</span><span class="n">place_code</span><span class="p">):</span>
<span class="k">return</span> <span class="p">(</span><span class="n">scaled_lv</span><span class="o">.</span><span class="n">sum</span><span class="p">(</span><span class="n">axis</span><span class="o">=</span><span class="mi">0</span><span class="p">))[</span><span class="n">np</span><span class="o">.</span><span class="n">newaxis</span><span class="p">,</span> <span class="o">...</span><span class="p">]</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span><span class="s1">&#39;place code is neither an ibpc nor obpc&#39;</span><span class="p">)</span></div>
<div class="viewcode-block" id="optic_flow"><a class="viewcode-back" href="../processing.html#processing.optic_flow">[docs]</a><span class="k">def</span> <span class="nf">optic_flow</span><span class="p">(</span><span class="n">place_code</span><span class="p">,</span> <span class="n">viewing_directions</span><span class="p">,</span> <span class="n">velocity</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;NOT IMPLEMENTED&quot;&quot;&quot;</span>
<span class="k">raise</span> <span class="ne">NameError</span><span class="p">(</span><span class="s1">&#39;Not Implemented&#39;</span><span class="p">)</span></div>
</pre></div>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper"><div class="relations">
<h3>Related Topics</h3>
<ul>
<li><a href="../index.html">Documentation overview</a><ul>
<li><a href="index.html">Module code</a><ul>
</ul></li>
</ul></li>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
<h3>Quick search</h3>
<form class="search" action="../search.html" method="get">
<div><input type="text" name="q" /></div>
<div><input type="submit" value="Go" /></div>
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="footer">
&copy;2017, Olivier J.N. Bertrand.
|
Powered by <a href="http://sphinx-doc.org/">Sphinx 1.5.3</a>
&amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.8</a>
</div>
</body>
</html>
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment