219 lines
No EOL
15 KiB
HTML
219 lines
No EOL
15 KiB
HTML
|
|
|
|
<!DOCTYPE html>
|
|
<html class="writer-html5" lang="en" data-content_root="./">
|
|
<head>
|
|
<meta charset="utf-8" />
|
|
<meta name="readthedocs-addons-api-version" content="1"><meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
<title>Multi-Camera Calibration — Multi-camera Calibration documentation</title>
|
|
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=b86133f3" />
|
|
<link rel="stylesheet" type="text/css" href="_static/css/theme.css?v=e59714d7" />
|
|
<link rel="stylesheet" type="text/css" href="_static/mystnb.4510f1fc1dee50b3e5859aac5469c37c29e427902b24a333a5f9fcb2f0b3ac41.css" />
|
|
|
|
|
|
<script src="_static/jquery.js?v=5d32c60e"></script>
|
|
<script src="_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
|
|
<script src="_static/documentation_options.js?v=5929fcd5"></script>
|
|
<script src="_static/doctools.js?v=9a2dae69"></script>
|
|
<script src="_static/sphinx_highlight.js?v=dc90522c"></script>
|
|
<script src="_static/js/theme.js"></script>
|
|
<script src="_static/js/versions.js"></script>
|
|
<link rel="index" title="Index" href="genindex.html" />
|
|
<link rel="search" title="Search" href="search.html" />
|
|
<link rel="next" title="Installation" href="setup.html" />
|
|
<script async type="text/javascript" src="/_/static/javascript/readthedocs-addons.js"></script><meta name="readthedocs-project-slug" content="multi-camera-calibration" /><meta name="readthedocs-version-slug" content="latest" /><meta name="readthedocs-resolver-filename" content="/" /><meta name="readthedocs-http-status" content="200" /></head>
|
|
|
|
<body class="wy-body-for-nav">
|
|
<div class="wy-grid-for-nav">
|
|
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
|
|
<div class="wy-side-scroll">
|
|
<div class="wy-side-nav-search" >
|
|
|
|
|
|
|
|
<a href="#" class="icon icon-home">
|
|
Multi-camera Calibration
|
|
</a>
|
|
<div class="switch-menus">
|
|
<div class="version-switch"></div>
|
|
<div class="language-switch"></div>
|
|
</div>
|
|
<div role="search">
|
|
<form id="rtd-search-form" class="wy-form" action="search.html" method="get">
|
|
<input type="text" name="q" placeholder="Search docs" aria-label="Search docs" />
|
|
<input type="hidden" name="check_keywords" value="yes" />
|
|
<input type="hidden" name="area" value="default" />
|
|
</form>
|
|
</div>
|
|
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
|
|
<p class="caption" role="heading"><span class="caption-text">Setup</span></p>
|
|
<ul>
|
|
<li class="toctree-l1"><a class="reference internal" href="setup.html">Installation</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="setup.html#camera-setup">Camera setup</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="setup.html#building-the-calibration-object">Building the calibration object</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="setup.html#acquiring-calibration-videos">Acquiring calibration videos</a></li>
|
|
</ul>
|
|
<p class="caption" role="heading"><span class="caption-text">Tutorial</span></p>
|
|
<ul>
|
|
<li class="toctree-l1"><a class="reference internal" href="calibration_tutorial.html">Detect chessboard</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="calibration_tutorial.html#calibrate">Calibrate</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="calibration_tutorial.html#save-results">Save results</a></li>
|
|
</ul>
|
|
<p class="caption" role="heading"><span class="caption-text">Under the hood</span></p>
|
|
<ul>
|
|
<li class="toctree-l1"><a class="reference internal" href="math.html">Background</a></li>
|
|
</ul>
|
|
<p class="caption" role="heading"><span class="caption-text">Troubleshooting</span></p>
|
|
<ul>
|
|
<li class="toctree-l1"><a class="reference internal" href="troubleshooting.html">High reprojection error</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="troubleshooting.html#detection-errors">Detection errors</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="troubleshooting.html#poor-detection-of-calibration-object">Poor detection of calibration object</a></li>
|
|
</ul>
|
|
<p class="caption" role="heading"><span class="caption-text">API Documentation</span></p>
|
|
<ul>
|
|
<li class="toctree-l1"><a class="reference internal" href="geometry.html">General geometry utilities</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="calibration.html">Core calibration functions</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="detection.html">Calibration object detection</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="io.html">Input / Output</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="viz.html">Visualization</a></li>
|
|
</ul>
|
|
|
|
</div>
|
|
</div>
|
|
</nav>
|
|
|
|
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
|
|
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
|
|
<a href="#">Multi-camera Calibration</a>
|
|
</nav>
|
|
|
|
<div class="wy-nav-content">
|
|
<div class="rst-content">
|
|
<div role="navigation" aria-label="Page navigation">
|
|
<ul class="wy-breadcrumbs">
|
|
<li><a href="#" class="icon icon-home" aria-label="Home"></a></li>
|
|
<li class="breadcrumb-item active">Multi-Camera Calibration</li>
|
|
<li class="wy-breadcrumbs-aside">
|
|
<a href="https://github.com/calebweinreb/multicam-calibration/blob/main/docs/source/index.rst" class="fa fa-github"> Edit on GitHub</a>
|
|
</li>
|
|
</ul>
|
|
<hr/>
|
|
</div>
|
|
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
|
|
<div itemprop="articleBody">
|
|
|
|
<section id="multi-camera-calibration">
|
|
<h1>Multi-Camera Calibration<a class="headerlink" href="#multi-camera-calibration" title="Link to this heading"></a></h1>
|
|
<p>This package provides a pipeline for multi-camera calibration, as well as general geometry utilities like keypoint triangulation and reprojection. There are several other packages include their own calibration pipelines, including <a class="reference external" href="https://github.com/lambdaloop/anipose">anipose</a>, <a class="reference external" href="https://github.com/lmb-freiburg/FreiCalib">FreiPose</a> and <a class="reference external" href="https://jarvis-mocap.github.io/jarvis-docs/">JARVIS</a>. We created a new library for multicamera calibration because we wanted:</p>
|
|
<ul class="simple">
|
|
<li><p>a standalone calibration solution that can be mixed and matched with other tools</p></li>
|
|
<li><p>a modular, extendable and well-documented code base</p></li>
|
|
<li><p>a pedagogical pipeline that exposes each step of the process</p></li>
|
|
<li><p>the ability to register camera that point in opposite directions</p></li>
|
|
</ul>
|
|
<section id="what-is-calibration">
|
|
<h2>What is calibration?<a class="headerlink" href="#what-is-calibration" title="Link to this heading"></a></h2>
|
|
<p>Calibration is the process of measuring the <em>intrinsic</em> and <em>extrinsic</em> parameters of two or more cameras that are being used to track things in 3D. <strong>Intrinsics</strong> are private to each camera and include parameters like focal length and radial distortion that determine the relationship between pixels in the camera image and lines in 3D space. <strong>Extrinsics</strong> capture the relative translations and rotations between cameras (see diagram). For more details, see <a class="reference external" href="math.html">Under the hood</a>.</p>
|
|
<img alt="_images/setup_intrinsics_extrinsics.jpg" class="align-center" src="_images/setup_intrinsics_extrinsics.jpg" />
|
|
<div class="line-block">
|
|
<div class="line"><br /></div>
|
|
</div>
|
|
</section>
|
|
<section id="who-should-use-this-tool">
|
|
<h2>Who should use this tool?<a class="headerlink" href="#who-should-use-this-tool" title="Link to this heading"></a></h2>
|
|
<p>Anyone using multiple cameras (or a single camera with mirrors) to track stuff in 3D can use this package. The main use case we had in mind is 3D pose tracking for animal behavior research. We include import/export functions for a variety of 3D tracking packages, including JARVIS and GIMBAL. In fact, our pipeline can function as a drop-in replacement for the calibration steps in JARVIS or anipose. If would like to integrate <code class="docutils literal notranslate"><span class="pre">multicam_calibration</span></code> into your pipeline, feel free to open a <a class="reference external" href="https://github.com/dattalab-6-cam/multicam-calibration/issues">github issue</a>!</p>
|
|
<div class="toctree-wrapper compound">
|
|
<p class="caption" role="heading"><span class="caption-text">Setup</span></p>
|
|
<ul>
|
|
<li class="toctree-l1"><a class="reference internal" href="setup.html">Installation</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="setup.html#camera-setup">Camera setup</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="setup.html#building-the-calibration-object">Building the calibration object</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="setup.html#acquiring-calibration-videos">Acquiring calibration videos</a></li>
|
|
</ul>
|
|
</div>
|
|
<div class="toctree-wrapper compound">
|
|
<p class="caption" role="heading"><span class="caption-text">Tutorial</span></p>
|
|
<ul>
|
|
<li class="toctree-l1"><a class="reference internal" href="calibration_tutorial.html">Detect chessboard</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="calibration_tutorial.html#calibrate">Calibrate</a><ul>
|
|
<li class="toctree-l2"><a class="reference internal" href="calibration_tutorial.html#initialization">Initialization</a></li>
|
|
<li class="toctree-l2"><a class="reference internal" href="calibration_tutorial.html#bundle-adjustment">Bundle adjustment</a></li>
|
|
</ul>
|
|
</li>
|
|
<li class="toctree-l1"><a class="reference internal" href="calibration_tutorial.html#save-results">Save results</a></li>
|
|
</ul>
|
|
</div>
|
|
<div class="toctree-wrapper compound">
|
|
<p class="caption" role="heading"><span class="caption-text">Under the hood</span></p>
|
|
<ul>
|
|
<li class="toctree-l1"><a class="reference internal" href="math.html">Background</a></li>
|
|
</ul>
|
|
</div>
|
|
<div class="toctree-wrapper compound">
|
|
<p class="caption" role="heading"><span class="caption-text">Troubleshooting</span></p>
|
|
<ul>
|
|
<li class="toctree-l1"><a class="reference internal" href="troubleshooting.html">High reprojection error</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="troubleshooting.html#detection-errors">Detection errors</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="troubleshooting.html#poor-detection-of-calibration-object">Poor detection of calibration object</a></li>
|
|
</ul>
|
|
</div>
|
|
<div class="toctree-wrapper compound">
|
|
<p class="caption" role="heading"><span class="caption-text">API Documentation</span></p>
|
|
<ul>
|
|
<li class="toctree-l1"><a class="reference internal" href="geometry.html">General geometry utilities</a><ul>
|
|
<li class="toctree-l2"><a class="reference internal" href="geometry.html#multicam_calibration.geometry.rodrigues"><code class="docutils literal notranslate"><span class="pre">rodrigues()</span></code></a></li>
|
|
<li class="toctree-l2"><a class="reference internal" href="geometry.html#multicam_calibration.geometry.rodrigues_inv"><code class="docutils literal notranslate"><span class="pre">rodrigues_inv()</span></code></a></li>
|
|
<li class="toctree-l2"><a class="reference internal" href="geometry.html#multicam_calibration.geometry.rigid_transform_from_correspondences"><code class="docutils literal notranslate"><span class="pre">rigid_transform_from_correspondences()</span></code></a></li>
|
|
<li class="toctree-l2"><a class="reference internal" href="geometry.html#multicam_calibration.geometry.apply_rigid_transform"><code class="docutils literal notranslate"><span class="pre">apply_rigid_transform()</span></code></a></li>
|
|
<li class="toctree-l2"><a class="reference internal" href="geometry.html#multicam_calibration.geometry.get_transformation_matrix"><code class="docutils literal notranslate"><span class="pre">get_transformation_matrix()</span></code></a></li>
|
|
<li class="toctree-l2"><a class="reference internal" href="geometry.html#multicam_calibration.geometry.get_transformation_vector"><code class="docutils literal notranslate"><span class="pre">get_transformation_vector()</span></code></a></li>
|
|
<li class="toctree-l2"><a class="reference internal" href="geometry.html#multicam_calibration.geometry.get_projection_matrix"><code class="docutils literal notranslate"><span class="pre">get_projection_matrix()</span></code></a></li>
|
|
<li class="toctree-l2"><a class="reference internal" href="geometry.html#multicam_calibration.geometry.euclidean_to_homogenous"><code class="docutils literal notranslate"><span class="pre">euclidean_to_homogenous()</span></code></a></li>
|
|
<li class="toctree-l2"><a class="reference internal" href="geometry.html#multicam_calibration.geometry.homogeneous_to_euclidean"><code class="docutils literal notranslate"><span class="pre">homogeneous_to_euclidean()</span></code></a></li>
|
|
<li class="toctree-l2"><a class="reference internal" href="geometry.html#multicam_calibration.geometry.project_points"><code class="docutils literal notranslate"><span class="pre">project_points()</span></code></a></li>
|
|
<li class="toctree-l2"><a class="reference internal" href="geometry.html#multicam_calibration.geometry.undistort_points"><code class="docutils literal notranslate"><span class="pre">undistort_points()</span></code></a></li>
|
|
<li class="toctree-l2"><a class="reference internal" href="geometry.html#multicam_calibration.geometry.triangulate"><code class="docutils literal notranslate"><span class="pre">triangulate()</span></code></a></li>
|
|
</ul>
|
|
</li>
|
|
<li class="toctree-l1"><a class="reference internal" href="calibration.html">Core calibration functions</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="detection.html">Calibration object detection</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="io.html">Input / Output</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="viz.html">Visualization</a></li>
|
|
</ul>
|
|
</div>
|
|
</section>
|
|
</section>
|
|
|
|
|
|
</div>
|
|
</div>
|
|
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
|
|
<a href="setup.html" class="btn btn-neutral float-right" title="Installation" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
|
|
</div>
|
|
|
|
<hr/>
|
|
|
|
<div role="contentinfo">
|
|
<p>© Copyright .</p>
|
|
</div>
|
|
|
|
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
|
|
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
|
|
provided by <a href="https://readthedocs.org">Read the Docs</a>.
|
|
|
|
|
|
</footer>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
</div>
|
|
<script>
|
|
jQuery(function () {
|
|
SphinxRtdTheme.Navigation.enable(true);
|
|
});
|
|
</script>
|
|
|
|
</body>
|
|
</html> |