Sophie

Sophie

distrib > Fedora > 16 > i386 > by-pkgid > 4bc66056a634db26a1f4d0845dc41ca6 > files > 1525

mrpt-doc-0.9.5-0.1.20110925svn2670.fc16.i686.rpm

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>CPoint2DPDFGaussian.h Source File</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
<link href="tabs.css" rel="stylesheet" type="text/css">
</head><body>
<div align="left"><a href="http://www.mrpt.org/">Main MRPT website</a> &gt; <b>C++ reference</b> </div>
<div align="right">
<a href="index.html"><img border="0" src="mrpt_logo.png" alt="MRPT logo"></a>
</div>
<!-- Generated by Doxygen 1.7.5 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
  <div id="navrow1" class="tabs">
    <ul class="tablist">
      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
      <li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
      <li><a href="modules.html"><span>Modules</span></a></li>
      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
      <li><a href="annotated.html"><span>Classes</span></a></li>
      <li class="current"><a href="files.html"><span>Files</span></a></li>
      <li>
        <div id="MSearchBox" class="MSearchBoxInactive">
          <div class="left">
            <form id="FSearchBox" action="search.php" method="get">
              <img id="MSearchSelect" src="search/mag.png" alt=""/>
              <input type="text" id="MSearchField" name="query" value="Search" size="20" accesskey="S" 
                     onfocus="searchBox.OnSearchFieldFocus(true)" 
                     onblur="searchBox.OnSearchFieldFocus(false)"/>
            </form>
          </div><div class="right"></div>
        </div>
      </li>
    </ul>
  </div>
  <div id="navrow2" class="tabs2">
    <ul class="tablist">
      <li><a href="files.html"><span>File&#160;List</span></a></li>
      <li><a href="globals.html"><span>File&#160;Members</span></a></li>
    </ul>
  </div>
<div class="header">
  <div class="headertitle">
<div class="title">CPoint2DPDFGaussian.h</div>  </div>
</div>
<div class="contents">
<a href="_c_point2_d_p_d_f_gaussian_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* +---------------------------------------------------------------------------+</span>
<a name="l00002"></a>00002 <span class="comment">   |          The Mobile Robot Programming Toolkit (MRPT) C++ library          |</span>
<a name="l00003"></a>00003 <span class="comment">   |                                                                           |</span>
<a name="l00004"></a>00004 <span class="comment">   |                       http://www.mrpt.org/                                |</span>
<a name="l00005"></a>00005 <span class="comment">   |                                                                           |</span>
<a name="l00006"></a>00006 <span class="comment">   |   Copyright (C) 2005-2011  University of Malaga                           |</span>
<a name="l00007"></a>00007 <span class="comment">   |                                                                           |</span>
<a name="l00008"></a>00008 <span class="comment">   |    This software was written by the Machine Perception and Intelligent    |</span>
<a name="l00009"></a>00009 <span class="comment">   |      Robotics Lab, University of Malaga (Spain).                          |</span>
<a name="l00010"></a>00010 <span class="comment">   |    Contact: Jose-Luis Blanco  &lt;jlblanco@ctima.uma.es&gt;                     |</span>
<a name="l00011"></a>00011 <span class="comment">   |                                                                           |</span>
<a name="l00012"></a>00012 <span class="comment">   |  This file is part of the MRPT project.                                   |</span>
<a name="l00013"></a>00013 <span class="comment">   |                                                                           |</span>
<a name="l00014"></a>00014 <span class="comment">   |     MRPT is free software: you can redistribute it and/or modify          |</span>
<a name="l00015"></a>00015 <span class="comment">   |     it under the terms of the GNU General Public License as published by  |</span>
<a name="l00016"></a>00016 <span class="comment">   |     the Free Software Foundation, either version 3 of the License, or     |</span>
<a name="l00017"></a>00017 <span class="comment">   |     (at your option) any later version.                                   |</span>
<a name="l00018"></a>00018 <span class="comment">   |                                                                           |</span>
<a name="l00019"></a>00019 <span class="comment">   |   MRPT is distributed in the hope that it will be useful,                 |</span>
<a name="l00020"></a>00020 <span class="comment">   |     but WITHOUT ANY WARRANTY; without even the implied warranty of        |</span>
<a name="l00021"></a>00021 <span class="comment">   |     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         |</span>
<a name="l00022"></a>00022 <span class="comment">   |     GNU General Public License for more details.                          |</span>
<a name="l00023"></a>00023 <span class="comment">   |                                                                           |</span>
<a name="l00024"></a>00024 <span class="comment">   |     You should have received a copy of the GNU General Public License     |</span>
<a name="l00025"></a>00025 <span class="comment">   |     along with MRPT.  If not, see &lt;http://www.gnu.org/licenses/&gt;.         |</span>
<a name="l00026"></a>00026 <span class="comment">   |                                                                           |</span>
<a name="l00027"></a>00027 <span class="comment">   +---------------------------------------------------------------------------+ */</span>
<a name="l00028"></a>00028 <span class="preprocessor">#ifndef CPoint2DPDFGaussian_H</span>
<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#define CPoint2DPDFGaussian_H</span>
<a name="l00030"></a>00030 <span class="preprocessor"></span>
<a name="l00031"></a>00031 <span class="preprocessor">#include &lt;<a class="code" href="_c_point2_d_p_d_f_8h.html">mrpt/poses/CPoint2DPDF.h</a>&gt;</span>
<a name="l00032"></a>00032 
<a name="l00033"></a>00033 <span class="keyword">namespace </span>mrpt
<a name="l00034"></a>00034 {
<a name="l00035"></a>00035 <span class="keyword">namespace </span>poses
<a name="l00036"></a>00036 {
<a name="l00037"></a>00037         <span class="keyword">using namespace </span>mrpt::math;
<a name="l00038"></a>00038 
<a name="l00039"></a><a class="code" href="structmrpt_1_1poses_1_1_c_point2_d_p_d_f_gaussian_ptr.html#a69a324672a3a4bdb343d6e89d3f50b8a">00039</a>         <a class="code" href="_c_serializable_8h.html#ab89b7a3de0a1baf5a5af4454add7d0f8" title="This declaration must be inserted in all CSerializable classes definition, before the class declarati...">DEFINE_SERIALIZABLE_PRE_CUSTOM_BASE</a>( <a class="code" href="classmrpt_1_1poses_1_1_c_point2_d_p_d_f_gaussian.html" title="A gaussian distribution for 2D points.">CPoint2DPDFGaussian</a>, <a class="code" href="classmrpt_1_1poses_1_1_c_point2_d_p_d_f.html" title="Declares a class that represents a Probability Distribution function (PDF) of a 2D point (x...">CPoint2DPDF</a> )
<a name="l00040"></a>00040 
<a name="l00041"></a>00041         <span class="comment">/** A gaussian distribution for 2D points. Also a method for bayesian fusion is provided.</span>
<a name="l00042"></a>00042 <span class="comment">         * \ingroup poses_pdf_grp</span>
<a name="l00043"></a>00043 <span class="comment">         * \sa CPoint2DPDF</span>
<a name="l00044"></a>00044 <span class="comment">         */</span>
<a name="l00045"></a>00045         class <a class="code" href="base_2include_2mrpt_2base_2link__pragmas_8h.html#a6045fa0129b1a3d6c8bf895470e66574">BASE_IMPEXP</a> <a class="code" href="classmrpt_1_1poses_1_1_c_point2_d_p_d_f_gaussian.html" title="A gaussian distribution for 2D points.">CPoint2DPDFGaussian</a> : public <a class="code" href="classmrpt_1_1poses_1_1_c_point2_d_p_d_f.html" title="Declares a class that represents a Probability Distribution function (PDF) of a 2D point (x...">CPoint2DPDF</a>
<a name="l00046"></a>00046         {
<a name="l00047"></a>00047                 <span class="comment">// This must be added to any CSerializable derived class:</span>
<a name="l00048"></a><a class="code" href="classmrpt_1_1poses_1_1_c_point2_d_p_d_f_gaussian.html#ac8924a0bd7bda57d3f6d9f03f6e58a26">00048</a>                 <a class="code" href="_c_serializable_8h.html#a72ab55bf7ae009c89b75715cfa21e84d" title="This declaration must be inserted in all CSerializable classes definition, within the class declarati...">DEFINE_SERIALIZABLE</a>( <a class="code" href="classmrpt_1_1poses_1_1_c_point2_d_p_d_f_gaussian.html" title="A gaussian distribution for 2D points.">CPoint2DPDFGaussian</a> )
<a name="l00049"></a>00049 
<a name="l00050"></a>00050          public:<span class="comment"></span>
<a name="l00051"></a>00051 <span class="comment">                /** Default constructor</span>
<a name="l00052"></a>00052 <span class="comment">                  */</span>
<a name="l00053"></a>00053                 <a class="code" href="classmrpt_1_1poses_1_1_c_point2_d_p_d_f_gaussian.html" title="A gaussian distribution for 2D points.">CPoint2DPDFGaussian</a>();
<a name="l00054"></a>00054 <span class="comment"></span>
<a name="l00055"></a>00055 <span class="comment">                /** Constructor</span>
<a name="l00056"></a>00056 <span class="comment">                  */</span>
<a name="l00057"></a>00057                 CPoint2DPDFGaussian( const <a class="code" href="classmrpt_1_1poses_1_1_c_point2_d.html" title="A class used to store a 2D point.">CPoint2D</a> &amp;init_Mean );
<a name="l00058"></a>00058 <span class="comment"></span>
<a name="l00059"></a>00059 <span class="comment">                /** Constructor</span>
<a name="l00060"></a>00060 <span class="comment">                  */</span>
<a name="l00061"></a>00061                 CPoint2DPDFGaussian( const <a class="code" href="classmrpt_1_1poses_1_1_c_point2_d.html" title="A class used to store a 2D point.">CPoint2D</a> &amp;init_Mean, const <a class="code" href="classmrpt_1_1math_1_1_c_matrix_fixed_numeric.html">CMatrixDouble22</a> &amp;init_Cov );
<a name="l00062"></a>00062 <span class="comment"></span>
<a name="l00063"></a>00063 <span class="comment">                /** The mean value</span>
<a name="l00064"></a>00064 <span class="comment">                 */</span>
<a name="l00065"></a><a class="code" href="classmrpt_1_1poses_1_1_c_point2_d_p_d_f_gaussian.html#a58c38ae2623f2406b6753eb905aec045">00065</a>                 <a class="code" href="classmrpt_1_1poses_1_1_c_point2_d.html" title="A class used to store a 2D point.">CPoint2D</a>        <a class="code" href="eigen__plugins_8h.html#a378ef7ee1218e4aa29b595c6e0f8ee4a" title="Computes the mean of the entire matrix.">mean</a>;
<a name="l00066"></a>00066 <span class="comment"></span>
<a name="l00067"></a>00067 <span class="comment">                /** The 2x2 covariance matrix</span>
<a name="l00068"></a>00068 <span class="comment">                 */</span>
<a name="l00069"></a><a class="code" href="classmrpt_1_1poses_1_1_c_point2_d_p_d_f_gaussian.html#a8880d9eaf954b12f2215056fb5abc481">00069</a>                 <a class="code" href="classmrpt_1_1math_1_1_c_matrix_fixed_numeric.html">CMatrixDouble22</a>         <a class="code" href="namespacemrpt_1_1math.html#a43f4e051fc574fd75b6800ad4fb25037" title="Computes the covariance matrix from a list of samples in an NxM matrix, where each row is a sample...">cov</a>;
<a name="l00070"></a>00070 <span class="comment"></span>
<a name="l00071"></a>00071 <span class="comment">                 /** Returns an estimate of the point, (the mean, or mathematical expectation of the PDF)</span>
<a name="l00072"></a>00072 <span class="comment">                  */</span>
<a name="l00073"></a><a class="code" href="classmrpt_1_1poses_1_1_c_point2_d_p_d_f_gaussian.html#a02208003c371b4b904933b02a6d2d38f">00073</a>                 <span class="keywordtype">void</span> getMean(<a class="code" href="classmrpt_1_1poses_1_1_c_point2_d.html" title="A class used to store a 2D point.">CPoint2D</a> &amp;p)<span class="keyword"> const </span>{
<a name="l00074"></a>00074                         p = this-&gt;<a class="code" href="eigen__plugins_8h.html#a378ef7ee1218e4aa29b595c6e0f8ee4a" title="Computes the mean of the entire matrix.">mean</a>;
<a name="l00075"></a>00075                 }
<a name="l00076"></a>00076 <span class="comment"></span>
<a name="l00077"></a>00077 <span class="comment">                /** Returns an estimate of the point covariance matrix (2x2 cov matrix) and the mean, both at once.</span>
<a name="l00078"></a>00078 <span class="comment">                  * \sa getMean</span>
<a name="l00079"></a>00079 <span class="comment">                  */</span>
<a name="l00080"></a><a class="code" href="classmrpt_1_1poses_1_1_c_point2_d_p_d_f_gaussian.html#a21c12806554e09c465b1b84f0edeb72a">00080</a>                 <span class="keywordtype">void</span> <a class="code" href="classmrpt_1_1poses_1_1_c_point2_d_p_d_f_gaussian.html#a21c12806554e09c465b1b84f0edeb72a" title="Returns an estimate of the point covariance matrix (2x2 cov matrix) and the mean, both at once...">getCovarianceAndMean</a>(<a class="code" href="classmrpt_1_1math_1_1_c_matrix_fixed_numeric.html">CMatrixDouble22</a> &amp;<a class="code" href="namespacemrpt_1_1math.html#a43f4e051fc574fd75b6800ad4fb25037" title="Computes the covariance matrix from a list of samples in an NxM matrix, where each row is a sample...">cov</a>,<a class="code" href="classmrpt_1_1poses_1_1_c_point2_d.html" title="A class used to store a 2D point.">CPoint2D</a> &amp;mean_point)<span class="keyword"> const </span>{
<a name="l00081"></a>00081                         cov = this-&gt;<a class="code" href="namespacemrpt_1_1math.html#a43f4e051fc574fd75b6800ad4fb25037" title="Computes the covariance matrix from a list of samples in an NxM matrix, where each row is a sample...">cov</a>;
<a name="l00082"></a>00082                         mean_point = this-&gt;<a class="code" href="eigen__plugins_8h.html#a378ef7ee1218e4aa29b595c6e0f8ee4a" title="Computes the mean of the entire matrix.">mean</a>;
<a name="l00083"></a>00083                 }
<a name="l00084"></a>00084 <span class="comment"></span>
<a name="l00085"></a>00085 <span class="comment">                /** Copy operator, translating if necesary (for example, between particles and gaussian representations)</span>
<a name="l00086"></a>00086 <span class="comment">                  */</span>
<a name="l00087"></a>00087                 <span class="keywordtype">void</span>  copyFrom(<span class="keyword">const</span> CPoint2DPDF &amp;o);
<a name="l00088"></a>00088 <span class="comment"></span>
<a name="l00089"></a>00089 <span class="comment">                /** Save PDF&#39;s particles to a text file, containing the 2D pose in the first line, then the covariance matrix in next 3 lines.</span>
<a name="l00090"></a>00090 <span class="comment">                 */</span>
<a name="l00091"></a>00091                 <span class="keywordtype">void</span>  <a class="code" href="eigen__plugins_8h.html#abea6659e38ab7a50b625ea1a4af3ec72" title="Save matrix to a text file, compatible with MATLAB text format (see also the methods of matrix classe...">saveToTextFile</a>(<span class="keyword">const</span> <a class="code" href="classstd_1_1string.html" title="STL class.">std::string</a> &amp;file) <span class="keyword">const</span>;
<a name="l00092"></a>00092 <span class="comment"></span>
<a name="l00093"></a>00093 <span class="comment">                /** This can be used to convert a PDF from local coordinates to global, providing the point (newReferenceBase) from which</span>
<a name="l00094"></a>00094 <span class="comment">                  *   &quot;to project&quot; the current pdf. Result PDF substituted the currently stored one in the object. Both the mean value and the covariance matrix are updated correctly.</span>
<a name="l00095"></a>00095 <span class="comment">                  */</span>
<a name="l00096"></a>00096                 <span class="keywordtype">void</span>  changeCoordinatesReference( <span class="keyword">const</span> <a class="code" href="classmrpt_1_1poses_1_1_c_pose3_d.html" title="A class used to store a 3D pose (a 3D translation + a rotation in 3D).">CPose3D</a> &amp;newReferenceBase );
<a name="l00097"></a>00097 <span class="comment"></span>
<a name="l00098"></a>00098 <span class="comment">                /** Bayesian fusion of two points gauss. distributions, then save the result in this object.</span>
<a name="l00099"></a>00099 <span class="comment">                  *  The process is as follows:&lt;br&gt;</span>
<a name="l00100"></a>00100 <span class="comment">                  *             - (x1,S1): Mean and variance of the p1 distribution.</span>
<a name="l00101"></a>00101 <span class="comment">                  *             - (x2,S2): Mean and variance of the p2 distribution.</span>
<a name="l00102"></a>00102 <span class="comment">                  *             - (x,S): Mean and variance of the resulting distribution.</span>
<a name="l00103"></a>00103 <span class="comment">                  *</span>
<a name="l00104"></a>00104 <span class="comment">                  *    S = (S1&lt;sup&gt;-1&lt;/sup&gt; + S2&lt;sup&gt;-1&lt;/sup&gt;)&lt;sup&gt;-1&lt;/sup&gt;;</span>
<a name="l00105"></a>00105 <span class="comment">                  *    x = S * ( S1&lt;sup&gt;-1&lt;/sup&gt;*x1 + S2&lt;sup&gt;-1&lt;/sup&gt;*x2 );</span>
<a name="l00106"></a>00106 <span class="comment">                  */</span>
<a name="l00107"></a>00107                 <span class="keywordtype">void</span>  bayesianFusion( <span class="keyword">const</span> <a class="code" href="classmrpt_1_1poses_1_1_c_point2_d_p_d_f_gaussian.html" title="A gaussian distribution for 2D points.">CPoint2DPDFGaussian</a> &amp;p1, <span class="keyword">const</span> <a class="code" href="classmrpt_1_1poses_1_1_c_point2_d_p_d_f_gaussian.html" title="A gaussian distribution for 2D points.">CPoint2DPDFGaussian</a> &amp;p2 );
<a name="l00108"></a>00108 <span class="comment"></span>
<a name="l00109"></a>00109 <span class="comment">                /** Computes the &quot;correspondence likelihood&quot; of this PDF with another one: This is implemented as the integral from -inf to +inf of the product of both PDF.</span>
<a name="l00110"></a>00110 <span class="comment">                  * The resulting number is &gt;=0.</span>
<a name="l00111"></a>00111 <span class="comment">                  * \sa productIntegralNormalizedWith</span>
<a name="l00112"></a>00112 <span class="comment">                  * \exception std::exception On errors like covariance matrix with null determinant, etc...</span>
<a name="l00113"></a>00113 <span class="comment">                  */</span>
<a name="l00114"></a>00114                 <span class="keywordtype">double</span>  productIntegralWith( <span class="keyword">const</span> <a class="code" href="classmrpt_1_1poses_1_1_c_point2_d_p_d_f_gaussian.html" title="A gaussian distribution for 2D points.">CPoint2DPDFGaussian</a> &amp;p) <span class="keyword">const</span>;
<a name="l00115"></a>00115 <span class="comment"></span>
<a name="l00116"></a>00116 <span class="comment">                /** Computes the &quot;correspondence likelihood&quot; of this PDF with another one: This is implemented as the integral from -inf to +inf of the product of both PDF.</span>
<a name="l00117"></a>00117 <span class="comment">                  * The resulting number is in the range [0,1].</span>
<a name="l00118"></a>00118 <span class="comment">                  *  Note that the resulting value is in fact</span>
<a name="l00119"></a>00119 <span class="comment">                  *  \f[ exp( -\frac{1}{2} D^2 ) \f]</span>
<a name="l00120"></a>00120 <span class="comment">                  *  , with \f$ D^2 \f$ being the square Mahalanobis distance between the two pdfs.</span>
<a name="l00121"></a>00121 <span class="comment">                  * \sa productIntegralWith</span>
<a name="l00122"></a>00122 <span class="comment">                  * \exception std::exception On errors like covariance matrix with null determinant, etc...</span>
<a name="l00123"></a>00123 <span class="comment">                  */</span>
<a name="l00124"></a>00124                 <span class="keywordtype">double</span>  productIntegralNormalizedWith( <span class="keyword">const</span> <a class="code" href="classmrpt_1_1poses_1_1_c_point2_d_p_d_f_gaussian.html" title="A gaussian distribution for 2D points.">CPoint2DPDFGaussian</a> &amp;p) <span class="keyword">const</span>;
<a name="l00125"></a>00125 <span class="comment"></span>
<a name="l00126"></a>00126 <span class="comment">                /** Draw a sample from the pdf.</span>
<a name="l00127"></a>00127 <span class="comment">                  */</span>
<a name="l00128"></a>00128                 <span class="keywordtype">void</span> drawSingleSample(<a class="code" href="classmrpt_1_1poses_1_1_c_point2_d.html" title="A class used to store a 2D point.">CPoint2D</a>  &amp;outSample) <span class="keyword">const</span>;
<a name="l00129"></a>00129 <span class="comment"></span>
<a name="l00130"></a>00130 <span class="comment">                /** Bayesian fusion of two point distributions (product of two distributions-&gt;new distribution), then save the result in this object (WARNING: See implementing classes to see classes that can and cannot be mixtured!)</span>
<a name="l00131"></a>00131 <span class="comment">                  * \param p1 The first distribution to fuse</span>
<a name="l00132"></a>00132 <span class="comment">                  * \param p2 The second distribution to fuse</span>
<a name="l00133"></a>00133 <span class="comment">                  * \param minMahalanobisDistToDrop If set to different of 0, the result of very separate Gaussian modes (that will result in negligible components) in SOGs will be dropped to reduce the number of modes in the output.</span>
<a name="l00134"></a>00134 <span class="comment">                  */</span>
<a name="l00135"></a>00135                 <span class="keywordtype">void</span>  bayesianFusion( <span class="keyword">const</span> CPoint2DPDF &amp;p1, <span class="keyword">const</span> CPoint2DPDF &amp;p2, <span class="keyword">const</span> <span class="keywordtype">double</span> &amp;minMahalanobisDistToDrop = 0);
<a name="l00136"></a>00136 
<a name="l00137"></a>00137 <span class="comment"></span>
<a name="l00138"></a>00138 <span class="comment">                /** Returns the Mahalanobis distance from this PDF to another PDF, that is, it&#39;s evaluation at (0,0,0)</span>
<a name="l00139"></a>00139 <span class="comment">                  */</span>
<a name="l00140"></a>00140                 <span class="keywordtype">double</span> mahalanobisDistanceTo( <span class="keyword">const</span> <a class="code" href="classmrpt_1_1poses_1_1_c_point2_d_p_d_f_gaussian.html" title="A gaussian distribution for 2D points.">CPoint2DPDFGaussian</a> &amp; other ) <span class="keyword">const</span>;
<a name="l00141"></a>00141 
<a name="l00142"></a>00142 
<a name="l00143"></a>00143         }; <span class="comment">// End of class def.</span>
<a name="l00144"></a>00144 
<a name="l00145"></a>00145 
<a name="l00146"></a>00146         } <span class="comment">// End of namespace</span>
<a name="l00147"></a>00147 } <span class="comment">// End of namespace</span>
<a name="l00148"></a>00148 
<a name="l00149"></a>00149 <span class="preprocessor">#endif</span>
</pre></div></div>
</div>
<br><hr><br> <table border="0" width="100%"> <tr> <td> Page generated by <a href="http://www.doxygen.org" target="_blank">Doxygen 1.7.5</a> for MRPT 0.9.5 SVN: at Sun Sep 25 17:20:18 UTC 2011</td><td></td> <td width="100"> </td> <td width="150">  </td></tr> </table>  </body></html>