
.. DO NOT EDIT.
.. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY.
.. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE:
.. "examples\workflows\plot_argus_video.py"
.. LINE NUMBERS ARE GIVEN BELOW.

.. only:: html

    .. note::
        :class: sphx-glr-download-link-note

        :ref:`Go to the end <sphx_glr_download_examples_workflows_plot_argus_video.py>`
        to download the full example code.

.. rst-class:: sphx-glr-example-title

.. _sphx_glr_examples_workflows_plot_argus_video.py:


===============================================================================
Argus II: images, video, and encoders
===============================================================================

Argus II converts each camera frame into biphasic pulses on 60 epiretinal
electrodes. This example follows an image and a video through that chain::

    source -> implant (encoder, raster) -> delivered pulses -> model -> percept

and changes one link at a time: the model, the encoder, and the source.

.. GENERATED FROM PYTHON SOURCE LINES 14-25

.. code-block:: Python


    import matplotlib.pyplot as plt
    import numpy as np

    from pulse2percept.implants.retina import ArgusII
    from pulse2percept.models.retina import AxonMapModel, BiphasicAxonMapModel
    from pulse2percept.models.retina import ScoreboardModel
    from pulse2percept.stimuli import (AmplitudeEncoder, FrequencyEncoder,
                                       psychophysics, samples)
    from pulse2percept.units import Hz, dva, s, uA








.. GENERATED FROM PYTHON SOURCE LINES 27-36

From image to delivered stimulation
-----------------------------------

``ArgusII()`` carries its device defaults: an
:py:class:`~pulse2percept.stimuli.AmplitudeEncoder` that maps gray levels
0-1 to 0-50 uA at 6 Hz, and a
:py:class:`~pulse2percept.implants.SequentialRaster` that pulses one row at
a time. The image is stretched across the array, so each electrode receives
the gray level at its own position:

.. GENERATED FROM PYTHON SOURCE LINES 36-47

.. code-block:: Python


    implant = ArgusII()
    image = samples.logo_ucsb()

    fig, (ax_src, ax_dev) = plt.subplots(ncols=2, figsize=(11, 3.5))
    image.plot(ax=ax_src)
    ax_src.set_title('Source')
    implant.plot(stim=image, stim_cmap=True, ax=ax_dev)
    ax_dev.set_title('Delivered amplitude per electrode')
    fig.tight_layout()




.. image-sg:: /examples/workflows/images/sphx_glr_plot_argus_video_001.png
   :alt: Source, Delivered amplitude per electrode
   :srcset: /examples/workflows/images/sphx_glr_plot_argus_video_001.png
   :class: sphx-glr-single-img





.. GENERATED FROM PYTHON SOURCE LINES 48-57

Same stimulation, two models
----------------------------

The model sets how the delivered pulses appear.
:py:class:`~pulse2percept.models.retina.ScoreboardModel` draws one round
phosphene per electrode;
:py:class:`~pulse2percept.models.retina.AxonMapModel` spreads each one along
the nerve fiber bundles passing under it [Beyeler2019]_. ``rho`` (um) is the
spread across bundles and ``lam`` (um) the spread along them:

.. GENERATED FROM PYTHON SOURCE LINES 57-69

.. code-block:: Python


    models = {
        'ScoreboardModel': ScoreboardModel(implant=implant, rho=100),
        'AxonMapModel': AxonMapModel(implant=implant, rho=100, lam=300),
    }

    fig, axes = plt.subplots(ncols=2, figsize=(10, 4))
    for ax, (name, model) in zip(axes, models.items()):
        model.predict_percept(image).plot(ax=ax)
        ax.set_title(name)
    fig.tight_layout()




.. image-sg:: /examples/workflows/images/sphx_glr_plot_argus_video_002.png
   :alt: ScoreboardModel, AxonMapModel
   :srcset: /examples/workflows/images/sphx_glr_plot_argus_video_002.png
   :class: sphx-glr-single-img





.. GENERATED FROM PYTHON SOURCE LINES 70-83

Choosing an encoder
-------------------

Spatial-only models see one gray level per electrode, so the encoder's pulse
parameters do not change their output. A spatiotemporal model reads the
delivered pulse train.
:py:class:`~pulse2percept.models.retina.BiphasicAxonMapModel` [Granley2021]_
lets amplitude scale phosphene size and brightness, while frequency scales
brightness only.

The model takes amplitude as a multiple of perceptual threshold, so every
electrode is given an assumed 50 uA threshold. Both encoders below drive a
white pixel at the same charge per second (150 uA x 20 Hz = 50 uA x 60 Hz):

.. GENERATED FROM PYTHON SOURCE LINES 83-106

.. code-block:: Python


    implant.thresholds = 50 * uA
    model = BiphasicAxonMapModel(implant=implant, rho=100, lam=300)

    encoders = {
        'Amplitude: 0-150 uA at 20 Hz':
            AmplitudeEncoder(amp_range=(0, 150) * uA, freq=20 * Hz),
        'Frequency: 0-60 Hz at 50 uA':
            FrequencyEncoder(amp=50 * uA, freq_range=(0, 60) * Hz),
    }

    percepts = {}
    for label, encoder in encoders.items():
        implant.encoder = encoder
        percepts[label] = model.predict_percept(image)

    vmax = max(p.data.max() for p in percepts.values())
    fig, axes = plt.subplots(ncols=2, figsize=(10, 4))
    for ax, (label, percept) in zip(axes, percepts.items()):
        percept.plot(ax=ax, vmin=0, vmax=vmax)
        ax.set_title(label)
    fig.tight_layout()




.. image-sg:: /examples/workflows/images/sphx_glr_plot_argus_video_003.png
   :alt: Amplitude: 0-150 uA at 20 Hz, Frequency: 0-60 Hz at 50 uA
   :srcset: /examples/workflows/images/sphx_glr_plot_argus_video_003.png
   :class: sphx-glr-single-img





.. GENERATED FROM PYTHON SOURCE LINES 107-120

Both panels share one brightness scale. Amplitude encoding recruits wider
phosphenes; frequency encoding keeps them narrow.

Video
-----

A moving bar is a common Argus II motion task. The bar is defined in the
visual field: a :py:class:`~pulse2percept.vision.Scene` 30 dva wide, sampled
every 50 ms. Each electrode receives the part of the scene at its own
visual-field location (see :ref:`topics-vision`).

The default 6 Hz pulse rate is slower than the 20 fps video, so most frames
would deliver no pulse. A 20 Hz encoder delivers one pulse per frame:

.. GENERATED FROM PYTHON SOURCE LINES 120-130

.. code-block:: Python


    implant = ArgusII()
    implant.encoder = AmplitudeEncoder(freq=20 * Hz)
    model = AxonMapModel(implant=implant, rho=100, lam=300)

    bar = psychophysics.bar(width=2 * dva, speed=20 * dva / s, offset=-12 * dva,
                            fov=30 * dva, time=np.arange(0, 1200, 50))
    percept = model.predict_percept(bar, gaze=(0, 0) * dva)
    percept.play()






.. raw:: html

    <div class="output_subarea output_html rendered_html output_result">

    <div class="p2p-anim" id="p2p-anim-e34c74fcb478489ea372839ffe80a9b6">
      <div class="p2p-stage">
        <img class="p2p-bg" src="data:image/png;base64,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" alt="">
        <canvas class="p2p-canvas" width="800" height="500"></canvas>
      </div>
      <div class="p2p-controls">
        <button class="p2p-btn" data-p2p-go="first"
                title="First frame">&#9198;</button>
        <button class="p2p-btn" data-p2p-go="prev"
                title="Previous frame">&#9194;</button>
        <button class="p2p-btn p2p-toggle" title="Play/Pause">&#9654;</button>
        <button class="p2p-btn" data-p2p-go="next"
                title="Next frame">&#9193;</button>
        <button class="p2p-btn" data-p2p-go="last"
                title="Last frame">&#9197;</button>
        <input class="p2p-slider" type="range" min="0" max="22" value="0"
               step="1">
        <span class="p2p-count">1/23</span>
        <select class="p2p-mode" title="Loop mode">
          <option value="once">Once</option>
          <option value="loop">Loop</option>
          <option value="reflect">Reflect</option>
        </select>
      </div>
    </div>
    <style>
    #p2p-anim-e34c74fcb478489ea372839ffe80a9b6 { display: inline-block; max-width: 100%; width: 800px;
            font-family: sans-serif; font-size: 13px; }
    #p2p-anim-e34c74fcb478489ea372839ffe80a9b6 .p2p-stage { position: relative; line-height: 0; }
    #p2p-anim-e34c74fcb478489ea372839ffe80a9b6 .p2p-bg { width: 100%; height: auto; display: block; }
    #p2p-anim-e34c74fcb478489ea372839ffe80a9b6 .p2p-canvas { position: absolute; left: 0; top: 0;
                        width: 100%; height: 100%; }
    #p2p-anim-e34c74fcb478489ea372839ffe80a9b6 .p2p-controls { display: flex; align-items: center; gap: 4px;
                          padding-top: 4px; }
    #p2p-anim-e34c74fcb478489ea372839ffe80a9b6 .p2p-btn { cursor: pointer; border: 1px solid rgba(128,128,128,0.4);
                     border-radius: 3px; background: transparent; color: inherit;
                     padding: 1px 6px; font-size: 13px; line-height: 1.4; }
    #p2p-anim-e34c74fcb478489ea372839ffe80a9b6 .p2p-btn:hover { background: rgba(128,128,128,0.2); }
    #p2p-anim-e34c74fcb478489ea372839ffe80a9b6 .p2p-slider { flex: 1 1 auto; min-width: 40px; margin: 0 4px; }
    #p2p-anim-e34c74fcb478489ea372839ffe80a9b6 .p2p-count { font-variant-numeric: tabular-nums; opacity: 0.7;
                       white-space: nowrap; }
    #p2p-anim-e34c74fcb478489ea372839ffe80a9b6 .p2p-mode { background: transparent; color: inherit; font-size: 12px;
                      border-radius: 3px;
                      border: 1px solid rgba(128,128,128,0.4); }
    </style>
    <script>
    (function () {
      var cfg = {"n": 23, "layers": [{"src": "data:image/png;base64,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", "ncols": 5, "fw": 121, "fh": 121, "sw": 121, "sh": 121, "rect": [211, 60, 386, 385], "crop": [0.4999999999999705, 0.5000000000000059, 120.31168831168831, 119.99999999999999], "smooth": false, "map": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22]}], "interval": 54.34782608695652, "intervals": [50.0, 50.0, 50.0, 50.0, 50.0, 50.0, 50.0, 50.0, 50.0, 50.0, 50.0, 50.0, 50.0, 50.0, 50.0, 50.0, 50.0, 50.0, 50.0, 50.0, 50.0, 100.0, 100.0], "mode": "loop", "title": {"rect": [0, 38, 800, 19], "x": 404, "y": 47, "align": "center", "font": "normal 16.7px \"DejaVu Sans\", Verdana, sans-serif", "color": "#000000"}, "labels": ["t = 0.00 ms", "t = 50.00 ms", "t = 100.00 ms", "t = 150.00 ms", "t = 200.00 ms", "t = 250.00 ms", "t = 300.00 ms", "t = 350.00 ms", "t = 400.00 ms", "t = 450.00 ms", "t = 500.00 ms", "t = 550.00 ms", "t = 600.00 ms", "t = 650.00 ms", "t = 700.00 ms", "t = 750.00 ms", "t = 800.00 ms", "t = 850.00 ms", "t = 900.00 ms", "t = 950.00 ms", "t = 1000.00 ms", "t = 1050.00 ms", "t = 1150.00 ms"]};
      var root = document.getElementById("p2p-anim-e34c74fcb478489ea372839ffe80a9b6");
      if (!root) { return; }
      var ctx = root.querySelector(".p2p-canvas").getContext("2d");
      var slider = root.querySelector(".p2p-slider");
      var counter = root.querySelector(".p2p-count");
      var mode = root.querySelector(".p2p-mode");
      var toggle = root.querySelector(".p2p-toggle");
      var frame = 0, dir = 1, timer = null, playing = false, due = 0;
      // One sprite sheet per animated image, drawn back to front:
      var sheets = cfg.layers.map(function (layer) {
        var img = new Image();
        img.onload = draw;
        img.src = layer.src;
        return img;
      });

      function draw() {
        // Frames with an alpha channel are composited onto the static
        // background, so the previous frame has to go first or they stack up.
        // All layers are cleared before any is drawn: layers may overlap.
        cfg.layers.forEach(function (layer) {
          ctx.clearRect(layer.rect[0], layer.rect[1], layer.rect[2],
                        layer.rect[3]);
        });
        cfg.layers.forEach(function (layer, k) {
          var sheet = sheets[k];
          if (!sheet.complete || !sheet.naturalWidth) { return; }
          // A layer that does not advance one frame per display frame (a still
          // image, a source sampled at another rate) says which one it shows:
          var f = layer.map ? layer.map[frame] : frame;
          var col = f % layer.ncols, row = (f - col) / layer.ncols;
          ctx.imageSmoothingEnabled = layer.smooth;
          // Only the part of the frame the axes leave visible:
          var c = layer.crop;
          ctx.drawImage(sheet, col * layer.sw + c[0], row * layer.sh + c[1],
                        c[2], c[3], layer.rect[0], layer.rect[1], layer.rect[2],
                        layer.rect[3]);
        });
        if (cfg.title) {
          ctx.clearRect(cfg.title.rect[0], cfg.title.rect[1],
                        cfg.title.rect[2], cfg.title.rect[3]);
          ctx.font = cfg.title.font;
          ctx.fillStyle = cfg.title.color;
          ctx.textAlign = cfg.title.align;
          ctx.textBaseline = "middle";
          ctx.fillText(cfg.labels[frame], cfg.title.x, cfg.title.y);
        }
      }

      function show(i) {
        frame = Math.max(0, Math.min(cfg.n - 1, i));
        slider.value = frame;
        counter.textContent = (frame + 1) + "/" + cfg.n;
        draw();
      }

      function pause() {
        if (timer !== null) { clearTimeout(timer); timer = null; }
        playing = false;
        toggle.innerHTML = "&#9654;";
      }

      function play() {
        if (playing) { return; }
        if (mode.value === "once" && frame === cfg.n - 1) { show(0); }
        playing = true;
        toggle.innerHTML = "&#10074;&#10074;";
        // Deadline for the current frame:
        due = performance.now() + cfg.intervals[frame];
        tick();
      }

      // Schedule against wall-clock deadlines and skip overdue frames:
      function tick() {
        timer = setTimeout(function () {
          timer = null;
          for (var steps = 0; steps < cfg.n; steps++) {
            var next = step();
            // The end of the run, with whatever we caught up to still to draw:
            if (next === null) { pause(); show(frame); return; }
            frame = next;
            due += cfg.intervals[frame];
            if (due > performance.now()) { break; }
          }
          // Reset after a long stall:
          due = Math.max(due, performance.now());
          show(frame);
          if (playing) { tick(); }
        }, Math.max(0, due - performance.now()));
      }

      // Next frame, or null at the end:
      function step() {
        var next = frame + dir;
        if (next > cfg.n - 1 || next < 0) {
          if (mode.value === "loop") {
            next = dir > 0 ? 0 : cfg.n - 1;
          } else if (mode.value === "reflect" && cfg.n > 1) {
            dir = -dir;
            next = frame + dir;
          } else {
            return null;
          }
        }
        return next;
      }

      root.querySelectorAll("[data-p2p-go]").forEach(function (btn) {
        btn.addEventListener("click", function () {
          pause();
          dir = 1;
          var go = btn.dataset.p2pGo;
          show(go === "first" ? 0 : go === "last" ? cfg.n - 1 :
               go === "next" ? frame + 1 : frame - 1);
        });
      });
      toggle.addEventListener("click", function () {
        if (playing) { pause(); } else { play(); }
      });
      slider.addEventListener("input", function () {
        pause();
        dir = 1;
        show(parseInt(slider.value, 10));
      });
      mode.value = cfg.mode;
      show(0);
    })();
    </script>

    </div>
    <br />
    <br />

.. GENERATED FROM PYTHON SOURCE LINES 131-139

What this does not establish
----------------------------

* ``rho``, ``lam`` and the 50 uA threshold are illustrative values. Measured
  values vary across subjects and electrodes.
* Model brightness is in arbitrary units.
* Argus II's camera-to-electrode mapping is configured per patient and is
  not modeled; each electrode samples its own visual-field location.


.. rst-class:: sphx-glr-timing

   **Total running time of the script:** (0 minutes 3.052 seconds)


.. _sphx_glr_download_examples_workflows_plot_argus_video.py:

.. only:: html

  .. container:: sphx-glr-footer sphx-glr-footer-example

    .. container:: sphx-glr-download sphx-glr-download-jupyter

      :download:`Download Jupyter notebook: plot_argus_video.ipynb <plot_argus_video.ipynb>`

    .. container:: sphx-glr-download sphx-glr-download-python

      :download:`Download Python source code: plot_argus_video.py <plot_argus_video.py>`

    .. container:: sphx-glr-download sphx-glr-download-zip

      :download:`Download zipped: plot_argus_video.zip <plot_argus_video.zip>`


.. only:: html

 .. rst-class:: sphx-glr-signature

    `Gallery generated by Sphinx-Gallery <https://sphinx-gallery.github.io>`_
