diff --git a/.buildinfo b/.buildinfo index 1e9bfcec..d621ee30 100644 --- a/.buildinfo +++ b/.buildinfo @@ -1,4 +1,4 @@ # Sphinx build info version 1 # This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. -config: 73eb998e14fd2132a732d009e358aee8 +config: ce414a2ba73a00c5a7f97cc1fa7502a7 tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/.doctrees/api/movement.analysis.kinematics.compute_acceleration.doctree b/.doctrees/api/movement.analysis.kinematics.compute_acceleration.doctree new file mode 100644 index 00000000..8a065190 Binary files /dev/null and b/.doctrees/api/movement.analysis.kinematics.compute_acceleration.doctree differ diff --git a/.doctrees/api/movement.analysis.kinematics.compute_displacement.doctree b/.doctrees/api/movement.analysis.kinematics.compute_displacement.doctree new file mode 100644 index 00000000..1831a57a Binary files /dev/null and b/.doctrees/api/movement.analysis.kinematics.compute_displacement.doctree differ diff --git a/.doctrees/api/movement.analysis.kinematics.compute_velocity.doctree b/.doctrees/api/movement.analysis.kinematics.compute_velocity.doctree new file mode 100644 index 00000000..f0590c7b Binary files /dev/null and b/.doctrees/api/movement.analysis.kinematics.compute_velocity.doctree differ diff --git a/.doctrees/api/movement.filtering.filter_by_confidence.doctree b/.doctrees/api/movement.filtering.filter_by_confidence.doctree new file mode 100644 index 00000000..d506e561 Binary files /dev/null and b/.doctrees/api/movement.filtering.filter_by_confidence.doctree differ diff --git a/.doctrees/api/movement.filtering.interpolate_over_time.doctree b/.doctrees/api/movement.filtering.interpolate_over_time.doctree new file mode 100644 index 00000000..a319feb6 Binary files /dev/null and b/.doctrees/api/movement.filtering.interpolate_over_time.doctree differ diff --git a/.doctrees/api/movement.filtering.report_nan_values.doctree b/.doctrees/api/movement.filtering.report_nan_values.doctree new file mode 100644 index 00000000..df6e674f Binary files /dev/null and b/.doctrees/api/movement.filtering.report_nan_values.doctree differ diff --git a/.doctrees/api/movement.io.load_poses.from_file.doctree b/.doctrees/api/movement.io.load_poses.from_file.doctree new file mode 100644 index 00000000..79bcbb3c Binary files /dev/null and b/.doctrees/api/movement.io.load_poses.from_file.doctree differ diff --git a/.doctrees/api/movement.move_accessor.MoveAccessor.doctree b/.doctrees/api/movement.move_accessor.MoveAccessor.doctree new file mode 100644 index 00000000..2a891146 Binary files /dev/null and b/.doctrees/api/movement.move_accessor.MoveAccessor.doctree differ diff --git a/.doctrees/api/movement.sample_data.fetch_sample_data.doctree b/.doctrees/api/movement.sample_data.fetch_sample_data.doctree new file mode 100644 index 00000000..c5bf22f6 Binary files /dev/null and b/.doctrees/api/movement.sample_data.fetch_sample_data.doctree differ diff --git a/.doctrees/api/movement.datasets.fetch_pose_data_path.doctree b/.doctrees/api/movement.sample_data.fetch_sample_data_path.doctree similarity index 63% rename from .doctrees/api/movement.datasets.fetch_pose_data_path.doctree rename to .doctrees/api/movement.sample_data.fetch_sample_data_path.doctree index 75f15b53..076be91c 100644 Binary files a/.doctrees/api/movement.datasets.fetch_pose_data_path.doctree and b/.doctrees/api/movement.sample_data.fetch_sample_data_path.doctree differ diff --git a/.doctrees/api/movement.datasets.list_pose_data.doctree b/.doctrees/api/movement.sample_data.list_sample_data.doctree similarity index 63% rename from .doctrees/api/movement.datasets.list_pose_data.doctree rename to .doctrees/api/movement.sample_data.list_sample_data.doctree index 3eae2867..43a02bf7 100644 Binary files a/.doctrees/api/movement.datasets.list_pose_data.doctree and b/.doctrees/api/movement.sample_data.list_sample_data.doctree differ diff --git a/.doctrees/api_index.doctree b/.doctrees/api_index.doctree index c613bca8..bd1ff51c 100644 Binary files a/.doctrees/api_index.doctree and b/.doctrees/api_index.doctree differ diff --git a/.doctrees/community/contributing.doctree b/.doctrees/community/contributing.doctree index c3c25085..62371771 100644 Binary files a/.doctrees/community/contributing.doctree and b/.doctrees/community/contributing.doctree differ diff --git a/.doctrees/environment.pickle b/.doctrees/environment.pickle index d07dbcff..cfa0436f 100644 Binary files a/.doctrees/environment.pickle and b/.doctrees/environment.pickle differ diff --git a/.doctrees/examples/filter_and_interpolate.doctree b/.doctrees/examples/filter_and_interpolate.doctree new file mode 100644 index 00000000..e86e09f7 Binary files /dev/null and b/.doctrees/examples/filter_and_interpolate.doctree differ diff --git a/.doctrees/examples/index.doctree b/.doctrees/examples/index.doctree index a7aecaf5..4d13a69f 100644 Binary files a/.doctrees/examples/index.doctree and b/.doctrees/examples/index.doctree differ diff --git a/.doctrees/examples/load_and_explore_poses.doctree b/.doctrees/examples/load_and_explore_poses.doctree index 4098b950..67e4c162 100644 Binary files a/.doctrees/examples/load_and_explore_poses.doctree and b/.doctrees/examples/load_and_explore_poses.doctree differ diff --git a/.doctrees/examples/sg_execution_times.doctree b/.doctrees/examples/sg_execution_times.doctree index 2cd8d1b1..80c05406 100644 Binary files a/.doctrees/examples/sg_execution_times.doctree and b/.doctrees/examples/sg_execution_times.doctree differ diff --git a/.doctrees/getting_started.doctree b/.doctrees/getting_started.doctree index 9c0d2c0b..6379ba90 100644 Binary files a/.doctrees/getting_started.doctree and b/.doctrees/getting_started.doctree differ diff --git a/.doctrees/sg_execution_times.doctree b/.doctrees/sg_execution_times.doctree index 138638f4..2bd18160 100644 Binary files a/.doctrees/sg_execution_times.doctree and b/.doctrees/sg_execution_times.doctree differ diff --git a/_downloads/122338c6db2328ed9eeb5e9961344704/filter_and_interpolate.ipynb b/_downloads/122338c6db2328ed9eeb5e9961344704/filter_and_interpolate.ipynb new file mode 100644 index 00000000..827c035d --- /dev/null +++ b/_downloads/122338c6db2328ed9eeb5e9961344704/filter_and_interpolate.ipynb @@ -0,0 +1,240 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n# Filtering and interpolation\n\nFilter out points with low confidence scores and interpolate over\nmissing values.\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Imports\n\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "from movement import sample_data\nfrom movement.filtering import filter_by_confidence, interpolate_over_time" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Load a sample dataset\n\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "ds = sample_data.fetch_sample_data(\"DLC_single-wasp.predictions.h5\")\nprint(ds)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can see that this dataset contains the 2D pose tracks and confidence\nscores for a single wasp, generated with DeepLabCut. There are 2 keypoints:\n\"head\" and \"stinger\".\n\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Visualise the pose tracks\n\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "pose_tracks = ds.pose_tracks.sel(individuals=\"individual_0\")\npose_tracks.plot.line(\n x=\"time\", row=\"keypoints\", hue=\"space\", aspect=2, size=2.5\n)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can see that the pose tracks contain some implausible \"jumps\", such\nas the the big shift in the final second, and the \"spikes\" of the stinger\nnear the 14th second. Perhaps we can get rid of those based on the model's\nreported confidence scores?\n\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Visualise confidence scores\nThe confidence scores are stored in the ``confidence`` data variable.\nSince the predicted poses in this example have been generated by DeepLabCut,\nthe confidence scores should be likelihood values between 0 and 1.\nThat said, confidence scores are not standardised across pose\nestimation frameworks, and their ranges can vary. Therefore,\nit's always a good idea to inspect the actual confidence values in the data.\n\nLet's first look at a histogram of the confidence scores.\n\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "ds.confidence.plot.hist(bins=20)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Based on the above histogram, we can confirm that the confidence scores\nindeed range between 0 and 1, with most values closer to 1. Now let's see how\nthey evolve over time.\n\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "confidence = ds.confidence.sel(individuals=\"individual_0\")\nconfidence.plot.line(x=\"time\", row=\"keypoints\", aspect=2, size=2.5)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Encouragingly, some of the drops in confidence scores do seem to correspond\nto the implausible jumps and spikes we had seen in the pose tracks.\nWe can use that to our advantage.\n\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Filter out points with low confidence\nWe can filter out points with confidence scores below a certain threshold.\nHere, we use ``threshold=0.6``. Points in the ``pose tracks`` data variable\nwith confidence scores below this threshold will be converted to NaN.\nThe ``print_report`` argument, which is True by default, reports the number\nof NaN values in the dataset before and after the filtering operation.\n\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "ds_filtered = filter_by_confidence(ds, threshold=0.6, print_report=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can see that the filtering operation has introduced NaN values in the\n``pose_tracks`` data variable. Let's visualise the filtered pose tracks.\n\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "pose_tracks_filtered = ds_filtered.pose_tracks.sel(individuals=\"individual_0\")\npose_tracks_filtered.plot.line(\n x=\"time\", row=\"keypoints\", hue=\"space\", aspect=2, size=2.5\n)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here we can see that gaps have appeared in the pose tracks, some of which\nare over the implausible jumps and spikes we had seen earlier. Moreover,\nmost gaps seem to be brief, lasting < 1 second.\n\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Interpolate over missing values\nWe can interpolate over the gaps we've introduced in the pose tracks.\nHere we use the default linear interpolation method and ``max_gap=1``,\nmeaning that we will only interpolate over gaps of 1 second or shorter.\nSetting ``max_gap=None`` would interpolate over all gaps, regardless of\ntheir length, which should be used with caution as it can introduce\nspurious data. The ``print_report`` argument acts as described above.\n\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "ds_interpolated = interpolate_over_time(\n ds_filtered, method=\"linear\", max_gap=1, print_report=True\n)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We see that all NaN values have disappeared, meaning that all gaps were\nindeed shorter than 1 second. Let's visualise the interpolated pose tracks\n\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "pose_tracks_interpolated = ds_interpolated.pose_tracks.sel(\n individuals=\"individual_0\"\n)\npose_tracks_interpolated.plot.line(\n x=\"time\", row=\"keypoints\", hue=\"space\", aspect=2, size=2.5\n)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Log of processing steps\nSo, far we've processed the pose tracks first by filtering out points with\nlow confidence scores, and then by interpolating over missing values.\nThe order of these operations and the parameters with which they were\nperformed are saved in the ``log`` attribute of the dataset.\nThis is useful for keeping track of the processing steps that have been\napplied to the data.\n\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "for log_entry in ds_interpolated.log:\n print(log_entry)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.8" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} \ No newline at end of file diff --git a/_downloads/307bfbce3b04c474f9b3bd90e970e4c9/load_and_explore_poses.py b/_downloads/307bfbce3b04c474f9b3bd90e970e4c9/load_and_explore_poses.py index de5f5196..4a68ee7e 100644 --- a/_downloads/307bfbce3b04c474f9b3bd90e970e4c9/load_and_explore_poses.py +++ b/_downloads/307bfbce3b04c474f9b3bd90e970e4c9/load_and_explore_poses.py @@ -10,7 +10,7 @@ # ------- from matplotlib import pyplot as plt -from movement import datasets +from movement import sample_data from movement.io import load_poses # %% @@ -18,14 +18,14 @@ # ------------------------ # Print a list of available datasets: -for file_name in datasets.list_pose_data(): +for file_name in sample_data.list_sample_data(): print(file_name) # %% # Fetch the path to an example dataset. # Feel free to replace this with the path to your own dataset. # e.g., ``file_path = "/path/to/my/data.h5"``) -file_path = datasets.fetch_pose_data_path( +file_path = sample_data.fetch_sample_data_path( "SLEAP_three-mice_Aeon_proofread.analysis.h5" ) diff --git a/_downloads/7f0c10d5c8b88801f34de1b2292ae010/load_and_explore_poses.ipynb b/_downloads/7f0c10d5c8b88801f34de1b2292ae010/load_and_explore_poses.ipynb index ccc14ec3..8b0cda2a 100644 --- a/_downloads/7f0c10d5c8b88801f34de1b2292ae010/load_and_explore_poses.ipynb +++ b/_downloads/7f0c10d5c8b88801f34de1b2292ae010/load_and_explore_poses.ipynb @@ -22,7 +22,7 @@ }, "outputs": [], "source": [ - "from matplotlib import pyplot as plt\n\nfrom movement import datasets\nfrom movement.io import load_poses" + "from matplotlib import pyplot as plt\n\nfrom movement import sample_data\nfrom movement.io import load_poses" ] }, { @@ -40,7 +40,7 @@ }, "outputs": [], "source": [ - "for file_name in datasets.list_pose_data():\n print(file_name)" + "for file_name in sample_data.list_sample_data():\n print(file_name)" ] }, { @@ -58,7 +58,7 @@ }, "outputs": [], "source": [ - "file_path = datasets.fetch_pose_data_path(\n \"SLEAP_three-mice_Aeon_proofread.analysis.h5\"\n)" + "file_path = sample_data.fetch_sample_data_path(\n \"SLEAP_three-mice_Aeon_proofread.analysis.h5\"\n)" ] }, { @@ -186,7 +186,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.11.7" + "version": "3.11.8" } }, "nbformat": 4, diff --git a/_downloads/8616797cd8df925412b19674f364ffea/filter_and_interpolate.py b/_downloads/8616797cd8df925412b19674f364ffea/filter_and_interpolate.py new file mode 100644 index 00000000..004e3a04 --- /dev/null +++ b/_downloads/8616797cd8df925412b19674f364ffea/filter_and_interpolate.py @@ -0,0 +1,130 @@ +""" +Filtering and interpolation +============================ + +Filter out points with low confidence scores and interpolate over +missing values. +""" + +# %% +# Imports +# ------- +from movement import sample_data +from movement.filtering import filter_by_confidence, interpolate_over_time + +# %% +# Load a sample dataset +# --------------------- + +ds = sample_data.fetch_sample_data("DLC_single-wasp.predictions.h5") +print(ds) + +# %% +# We can see that this dataset contains the 2D pose tracks and confidence +# scores for a single wasp, generated with DeepLabCut. There are 2 keypoints: +# "head" and "stinger". + +# %% +# Visualise the pose tracks +# ------------------------- + +pose_tracks = ds.pose_tracks.sel(individuals="individual_0") +pose_tracks.plot.line( + x="time", row="keypoints", hue="space", aspect=2, size=2.5 +) + +# %% +# We can see that the pose tracks contain some implausible "jumps", such +# as the the big shift in the final second, and the "spikes" of the stinger +# near the 14th second. Perhaps we can get rid of those based on the model's +# reported confidence scores? + +# %% +# Visualise confidence scores +# --------------------------- +# The confidence scores are stored in the ``confidence`` data variable. +# Since the predicted poses in this example have been generated by DeepLabCut, +# the confidence scores should be likelihood values between 0 and 1. +# That said, confidence scores are not standardised across pose +# estimation frameworks, and their ranges can vary. Therefore, +# it's always a good idea to inspect the actual confidence values in the data. +# +# Let's first look at a histogram of the confidence scores. +ds.confidence.plot.hist(bins=20) + +# %% +# Based on the above histogram, we can confirm that the confidence scores +# indeed range between 0 and 1, with most values closer to 1. Now let's see how +# they evolve over time. + +confidence = ds.confidence.sel(individuals="individual_0") +confidence.plot.line(x="time", row="keypoints", aspect=2, size=2.5) + +# %% +# Encouragingly, some of the drops in confidence scores do seem to correspond +# to the implausible jumps and spikes we had seen in the pose tracks. +# We can use that to our advantage. + + +# %% +# Filter out points with low confidence +# ------------------------------------- +# We can filter out points with confidence scores below a certain threshold. +# Here, we use ``threshold=0.6``. Points in the ``pose tracks`` data variable +# with confidence scores below this threshold will be converted to NaN. +# The ``print_report`` argument, which is True by default, reports the number +# of NaN values in the dataset before and after the filtering operation. + +ds_filtered = filter_by_confidence(ds, threshold=0.6, print_report=True) + +# %% +# We can see that the filtering operation has introduced NaN values in the +# ``pose_tracks`` data variable. Let's visualise the filtered pose tracks. + +pose_tracks_filtered = ds_filtered.pose_tracks.sel(individuals="individual_0") +pose_tracks_filtered.plot.line( + x="time", row="keypoints", hue="space", aspect=2, size=2.5 +) + +# %% +# Here we can see that gaps have appeared in the pose tracks, some of which +# are over the implausible jumps and spikes we had seen earlier. Moreover, +# most gaps seem to be brief, lasting < 1 second. + +# %% +# Interpolate over missing values +# ------------------------------- +# We can interpolate over the gaps we've introduced in the pose tracks. +# Here we use the default linear interpolation method and ``max_gap=1``, +# meaning that we will only interpolate over gaps of 1 second or shorter. +# Setting ``max_gap=None`` would interpolate over all gaps, regardless of +# their length, which should be used with caution as it can introduce +# spurious data. The ``print_report`` argument acts as described above. + +ds_interpolated = interpolate_over_time( + ds_filtered, method="linear", max_gap=1, print_report=True +) + +# %% +# We see that all NaN values have disappeared, meaning that all gaps were +# indeed shorter than 1 second. Let's visualise the interpolated pose tracks + +pose_tracks_interpolated = ds_interpolated.pose_tracks.sel( + individuals="individual_0" +) +pose_tracks_interpolated.plot.line( + x="time", row="keypoints", hue="space", aspect=2, size=2.5 +) + +# %% +# Log of processing steps +# ----------------------- +# So, far we've processed the pose tracks first by filtering out points with +# low confidence scores, and then by interpolating over missing values. +# The order of these operations and the parameters with which they were +# performed are saved in the ``log`` attribute of the dataset. +# This is useful for keeping track of the processing steps that have been +# applied to the data. + +for log_entry in ds_interpolated.log: + print(log_entry) diff --git a/_downloads/bc82bea3a5dd7bdba60b65220891d9e5/examples_python.zip b/_downloads/bc82bea3a5dd7bdba60b65220891d9e5/examples_python.zip index 0b2f10d6..fbb3b3a8 100644 Binary files a/_downloads/bc82bea3a5dd7bdba60b65220891d9e5/examples_python.zip and b/_downloads/bc82bea3a5dd7bdba60b65220891d9e5/examples_python.zip differ diff --git a/_downloads/fb625db3c50d423b1b7881136ffdeec8/examples_jupyter.zip b/_downloads/fb625db3c50d423b1b7881136ffdeec8/examples_jupyter.zip index 31503bce..eec11755 100644 Binary files a/_downloads/fb625db3c50d423b1b7881136ffdeec8/examples_jupyter.zip and b/_downloads/fb625db3c50d423b1b7881136ffdeec8/examples_jupyter.zip differ diff --git a/_images/sphx_glr_filter_and_interpolate_001.png b/_images/sphx_glr_filter_and_interpolate_001.png new file mode 100644 index 00000000..6f30664a Binary files /dev/null and b/_images/sphx_glr_filter_and_interpolate_001.png differ diff --git a/_images/sphx_glr_filter_and_interpolate_002.png b/_images/sphx_glr_filter_and_interpolate_002.png new file mode 100644 index 00000000..d3c7892b Binary files /dev/null and b/_images/sphx_glr_filter_and_interpolate_002.png differ diff --git a/_images/sphx_glr_filter_and_interpolate_003.png b/_images/sphx_glr_filter_and_interpolate_003.png new file mode 100644 index 00000000..72e84963 Binary files /dev/null and b/_images/sphx_glr_filter_and_interpolate_003.png differ diff --git a/_images/sphx_glr_filter_and_interpolate_004.png b/_images/sphx_glr_filter_and_interpolate_004.png new file mode 100644 index 00000000..c3d720e8 Binary files /dev/null and b/_images/sphx_glr_filter_and_interpolate_004.png differ diff --git a/_images/sphx_glr_filter_and_interpolate_005.png b/_images/sphx_glr_filter_and_interpolate_005.png new file mode 100644 index 00000000..00b80418 Binary files /dev/null and b/_images/sphx_glr_filter_and_interpolate_005.png differ diff --git a/_images/sphx_glr_filter_and_interpolate_thumb.png b/_images/sphx_glr_filter_and_interpolate_thumb.png new file mode 100644 index 00000000..d3bc823c Binary files /dev/null and b/_images/sphx_glr_filter_and_interpolate_thumb.png differ diff --git a/_images/sphx_glr_load_and_explore_poses_001.png b/_images/sphx_glr_load_and_explore_poses_001.png index f1477585..57a279a6 100644 Binary files a/_images/sphx_glr_load_and_explore_poses_001.png and b/_images/sphx_glr_load_and_explore_poses_001.png differ diff --git a/_images/sphx_glr_load_and_explore_poses_002.png b/_images/sphx_glr_load_and_explore_poses_002.png index 659638a0..34dd04d9 100644 Binary files a/_images/sphx_glr_load_and_explore_poses_002.png and b/_images/sphx_glr_load_and_explore_poses_002.png differ diff --git a/_images/sphx_glr_load_and_explore_poses_003.png b/_images/sphx_glr_load_and_explore_poses_003.png index 8e242141..6a9bad7f 100644 Binary files a/_images/sphx_glr_load_and_explore_poses_003.png and b/_images/sphx_glr_load_and_explore_poses_003.png differ diff --git a/_modules/index.html b/_modules/index.html index 34b36d67..832183da 100644 --- a/_modules/index.html +++ b/_modules/index.html @@ -17,15 +17,15 @@ - - - + + + - - - - + + + + @@ -36,11 +36,11 @@ - - - + + + - + @@ -59,10 +59,9 @@ - Skip to main content + Skip to main content
-