<!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>CObservationStereoImages.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> > <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 Page</span></a></li> <li><a href="pages.html"><span>Related 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 List</span></a></li> <li><a href="globals.html"><span>File Members</span></a></li> </ul> </div> <div class="header"> <div class="headertitle"> <div class="title">CObservationStereoImages.h</div> </div> </div> <div class="contents"> <a href="_c_observation_stereo_images_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 <jlblanco@ctima.uma.es> |</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 <http://www.gnu.org/licenses/>. |</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 CObservationStereoImages_H</span> <a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#define CObservationStereoImages_H</span> <a name="l00030"></a>00030 <span class="preprocessor"></span> <a name="l00031"></a>00031 <span class="preprocessor">#include <<a class="code" href="_c_serializable_8h.html">mrpt/utils/CSerializable.h</a>></span> <a name="l00032"></a>00032 <span class="preprocessor">#include <<a class="code" href="_c_image_8h.html">mrpt/utils/CImage.h</a>></span> <a name="l00033"></a>00033 <span class="preprocessor">#include <<a class="code" href="_c_observation_8h.html">mrpt/slam/CObservation.h</a>></span> <a name="l00034"></a>00034 <span class="preprocessor">#include <<a class="code" href="_c_pose3_d_8h.html">mrpt/poses/CPose3D.h</a>></span> <a name="l00035"></a>00035 <span class="preprocessor">#include <<a class="code" href="_c_pose3_d_quat_8h.html">mrpt/poses/CPose3DQuat.h</a>></span> <a name="l00036"></a>00036 <span class="preprocessor">#include <<a class="code" href="_c_pose2_d_8h.html">mrpt/poses/CPose2D.h</a>></span> <a name="l00037"></a>00037 <span class="comment">//#include <mrpt/slam/CLandmark.h></span> <a name="l00038"></a>00038 <span class="comment">//#include <mrpt/slam/CLandmarksMap.h></span> <a name="l00039"></a>00039 <span class="comment">//#include <mrpt/vision/CCamModel.h></span> <a name="l00040"></a>00040 <a name="l00041"></a>00041 <span class="keyword">namespace </span>mrpt <a name="l00042"></a>00042 { <a name="l00043"></a>00043 <span class="keyword">namespace </span>slam <a name="l00044"></a>00044 { <a name="l00045"></a>00045 <span class="keyword">using namespace </span>mrpt::utils; <a name="l00046"></a>00046 <a name="l00047"></a><a class="code" href="structmrpt_1_1slam_1_1_c_observation_stereo_images_ptr.html#a7404b857082ca5d0a73d788aa6dd9b7f">00047</a> <a class="code" href="_c_serializable_8h.html#a9ef523d787f6cb837a0585b790882588" title="This declaration must be inserted in all CSerializable classes definition, before the class declarati...">DEFINE_SERIALIZABLE_PRE_CUSTOM_BASE_LINKAGE</a>( <a class="code" href="classmrpt_1_1slam_1_1_c_observation_stereo_images.html" title="Observation class for either a pair of left+right or left+disparity images from a stereo camera...">CObservationStereoImages</a> , <a class="code" href="classmrpt_1_1slam_1_1_c_observation.html" title="Declares a class that represents any robot's observation.">CObservation</a>,<a class="code" href="obs_2include_2mrpt_2obs_2link__pragmas_8h.html#ae8bb1b2647c58d6ae2eb30ca31fcf5a1">OBS_IMPEXP</a> ) <a name="l00048"></a>00048 <a name="l00049"></a>00049 <span class="comment">/** Observation class for either a pair of left+right or left+disparity images from a stereo camera.</span> <a name="l00050"></a>00050 <span class="comment"> *</span> <a name="l00051"></a>00051 <span class="comment"> * To find whether the observation contains a right image and/or a disparity image, see the</span> <a name="l00052"></a>00052 <span class="comment"> * fields hasImageDisparity and hasImageRight, respectively.</span> <a name="l00053"></a>00053 <span class="comment"> *</span> <a name="l00054"></a>00054 <span class="comment"> * This figure illustrates the coordinate frames involved in this class:</span> <a name="l00055"></a>00055 <span class="comment"> *</span> <a name="l00056"></a>00056 <span class="comment"> * <center></span> <a name="l00057"></a>00057 <span class="comment"> * <img src="CObservationStereoImages_figRefSystem.png"></span> <a name="l00058"></a>00058 <span class="comment"> * </center></span> <a name="l00059"></a>00059 <span class="comment"> *</span> <a name="l00060"></a>00060 <span class="comment"> * \note The images stored in this class can be raw or undistorted images. In the latter case, the "distortion" params of the corresponding "leftCamera" and "rightCamera" fields should be all zeros.</span> <a name="l00061"></a>00061 <span class="comment"> * \sa CObservation</span> <a name="l00062"></a>00062 <span class="comment"> * \ingroup mrpt_obs_grp</span> <a name="l00063"></a>00063 <span class="comment"> */</span> <a name="l00064"></a>00064 class <a class="code" href="obs_2include_2mrpt_2obs_2link__pragmas_8h.html#ae8bb1b2647c58d6ae2eb30ca31fcf5a1">OBS_IMPEXP</a> <a class="code" href="classmrpt_1_1slam_1_1_c_observation_stereo_images.html" title="Observation class for either a pair of left+right or left+disparity images from a stereo camera...">CObservationStereoImages</a> : public <a class="code" href="classmrpt_1_1slam_1_1_c_observation.html" title="Declares a class that represents any robot's observation.">CObservation</a> <a name="l00065"></a>00065 { <a name="l00066"></a>00066 <span class="comment">// This must be added to any CSerializable derived class:</span> <a name="l00067"></a><a class="code" href="classmrpt_1_1slam_1_1_c_observation_stereo_images.html#a1fb1b5e069fd046a24fd555b6c4f955f">00067</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_1slam_1_1_c_observation_stereo_images.html" title="Observation class for either a pair of left+right or left+disparity images from a stereo camera...">CObservationStereoImages</a> ) <a name="l00068"></a>00068 <a name="l00069"></a>00069 public:<span class="comment"></span> <a name="l00070"></a>00070 <span class="comment"> /** Default Constructor */</span> <a name="l00071"></a>00071 <a class="code" href="classmrpt_1_1slam_1_1_c_observation_stereo_images.html" title="Observation class for either a pair of left+right or left+disparity images from a stereo camera...">CObservationStereoImages</a>( ); <a name="l00072"></a>00072 <span class="comment"></span> <a name="l00073"></a>00073 <span class="comment"> /** Constructor from "IplImage*" images, which could be NULL.</span> <a name="l00074"></a>00074 <span class="comment"> * The fields hasImageDisparity and hasImageRight will be set to true/false depending on them being !=NULL.</span> <a name="l00075"></a>00075 <span class="comment"> * Note that the IplImage's will be COPIED, so it's still the caller's reponsibility to free the original images,</span> <a name="l00076"></a>00076 <span class="comment"> * unless ownMemory is set to true: in that case the IplImage pointers are copied and those IplImage's will be automatically freed by this object.</span> <a name="l00077"></a>00077 <span class="comment"> *</span> <a name="l00078"></a>00078 <span class="comment"> */</span> <a name="l00079"></a>00079 CObservationStereoImages( <span class="keywordtype">void</span> *iplImageLeft, <span class="keywordtype">void</span> *iplImageRight, <span class="keywordtype">void</span> *iplImageDisparity = NULL, <span class="keywordtype">bool</span> ownMemory = false ); <a name="l00080"></a>00080 <span class="comment"></span> <a name="l00081"></a>00081 <span class="comment"> /** Destructor</span> <a name="l00082"></a>00082 <span class="comment"> */</span> <a name="l00083"></a>00083 ~CObservationStereoImages( ); <a name="l00084"></a>00084 <a name="l00085"></a>00085 <span class="comment"></span> <a name="l00086"></a>00086 <span class="comment"> /** @name Main observation data members</span> <a name="l00087"></a>00087 <span class="comment"> @{ */</span> <a name="l00088"></a>00088 <span class="comment"></span> <a name="l00089"></a>00089 <span class="comment"> /** Image from the left camera (this image will be ALWAYS present) */</span> <a name="l00090"></a><a class="code" href="classmrpt_1_1slam_1_1_c_observation_stereo_images.html#a9e8567f23546da8605799096ed8f5487">00090</a> mrpt::utils::<a class="code" href="classmrpt_1_1utils_1_1_c_image.html" title="A class for storing images as grayscale or RGB bitmaps.">CImage</a> imageLeft; <a name="l00091"></a>00091 <span class="comment"></span> <a name="l00092"></a>00092 <span class="comment"> /** Image from the right camera, only contains a valid image if hasImageRight == true. */</span> <a name="l00093"></a><a class="code" href="classmrpt_1_1slam_1_1_c_observation_stereo_images.html#af0eeb3434265fe85c61856dcfa60f9d6">00093</a> mrpt::utils::<a class="code" href="classmrpt_1_1utils_1_1_c_image.html" title="A class for storing images as grayscale or RGB bitmaps.">CImage</a> imageRight; <a name="l00094"></a>00094 <span class="comment"></span> <a name="l00095"></a>00095 <span class="comment"> /** Disparity image, only contains a valid image if hasImageDisparity == true.</span> <a name="l00096"></a>00096 <span class="comment"> * The relation between the actual disparity and pixels and each value in this image is... ??????????? */</span> <a name="l00097"></a><a class="code" href="classmrpt_1_1slam_1_1_c_observation_stereo_images.html#ad10ff91904be9f49c7a922bebf389e96">00097</a> mrpt::utils::<a class="code" href="classmrpt_1_1utils_1_1_c_image.html" title="A class for storing images as grayscale or RGB bitmaps.">CImage</a> imageDisparity; <a name="l00098"></a>00098 <a name="l00099"></a><a class="code" href="classmrpt_1_1slam_1_1_c_observation_stereo_images.html#aeff9035963ac021276b9895adca8a973">00099</a> <span class="keywordtype">bool</span> hasImageDisparity; <span class="comment">//!< Whether imageDisparity actually contains data (Default upon construction: false)</span> <a name="l00100"></a><a class="code" href="classmrpt_1_1slam_1_1_c_observation_stereo_images.html#a93504f1da0ae45583ff957e16dec062d">00100</a> <span class="comment"></span> <span class="keywordtype">bool</span> hasImageRight; <span class="comment">//!< Whether imageRight actually contains data (Default upon construction: true)</span> <a name="l00101"></a>00101 <span class="comment"></span><span class="comment"></span> <a name="l00102"></a>00102 <span class="comment"> /** Parameters for the left/right cameras: individual intrinsic and distortion parameters of the cameras.</span> <a name="l00103"></a>00103 <span class="comment"> * See the <a href="http://www.mrpt.org/Camera_Parameters" >tutorial</a> for a discussion of these parameters.</span> <a name="l00104"></a>00104 <span class="comment"> */</span> <a name="l00105"></a><a class="code" href="classmrpt_1_1slam_1_1_c_observation_stereo_images.html#ad71d8033ad1363fdd33f7f910959bff6">00105</a> <a class="code" href="classmrpt_1_1utils_1_1_t_camera.html" title="Structure to hold the parameters of a pinhole camera model.">TCamera</a> leftCamera, rightCamera; <a name="l00106"></a>00106 <a name="l00107"></a><a class="code" href="classmrpt_1_1slam_1_1_c_observation_stereo_images.html#a3ed7ed085a295c91329d80fb27498d43">00107</a> <a class="code" href="classmrpt_1_1poses_1_1_c_pose3_d_quat.html" title="A class used to store a 3D pose as a translation (x,y,z) and a quaternion (qr,qx,qy,qz).">CPose3DQuat</a> cameraPose; <span class="comment">//!< The pose of the LEFT camera, relative to the robot.</span> <a name="l00108"></a>00108 <span class="comment"></span><span class="comment"></span> <a name="l00109"></a>00109 <span class="comment"> /** The pose of the right camera, relative to the left one:</span> <a name="l00110"></a>00110 <span class="comment"> * Note that using the conventional reference coordinates for the left</span> <a name="l00111"></a>00111 <span class="comment"> * camera (x points to the right, y down), the "right" camera is situated</span> <a name="l00112"></a>00112 <span class="comment"> * at position (BL, 0, 0) with yaw=pitch=roll=0, where BL is the BASELINE.</span> <a name="l00113"></a>00113 <span class="comment"> */</span> <a name="l00114"></a><a class="code" href="classmrpt_1_1slam_1_1_c_observation_stereo_images.html#af4647324f7eca9b1026e0bd45e168618">00114</a> <a class="code" href="classmrpt_1_1poses_1_1_c_pose3_d_quat.html" title="A class used to store a 3D pose as a translation (x,y,z) and a quaternion (qr,qx,qy,qz).">CPose3DQuat</a> rightCameraPose; <a name="l00115"></a>00115 <span class="comment"></span> <a name="l00116"></a>00116 <span class="comment"> /** @} */</span> <a name="l00117"></a>00117 <a name="l00118"></a>00118 <span class="comment"></span> <a name="l00119"></a>00119 <span class="comment"> /** A general method to retrieve the sensor pose on the robot.</span> <a name="l00120"></a>00120 <span class="comment"> * Note that most sensors will return a full (6D) CPose3D, but see the derived classes for more details or special cases.</span> <a name="l00121"></a>00121 <span class="comment"> * \sa setSensorPose</span> <a name="l00122"></a>00122 <span class="comment"> */</span> <a name="l00123"></a><a class="code" href="classmrpt_1_1slam_1_1_c_observation_stereo_images.html#abe28a847de97928ffe6380f0b607da99">00123</a> <span class="keywordtype">void</span> getSensorPose( <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> &out_sensorPose )<span class="keyword"> const </span>{ out_sensorPose = cameraPose; } <a name="l00124"></a>00124 <a name="l00125"></a>00125 <span class="comment"></span> <a name="l00126"></a>00126 <span class="comment"> /** A general method to change the sensor pose on the robot.</span> <a name="l00127"></a>00127 <span class="comment"> * Note that most sensors will use the full (6D) CPose3D, but see the derived classes for more details or special cases.</span> <a name="l00128"></a>00128 <span class="comment"> * \sa getSensorPose</span> <a name="l00129"></a>00129 <span class="comment"> */</span> <a name="l00130"></a><a class="code" href="classmrpt_1_1slam_1_1_c_observation_stereo_images.html#a9e60c7f316e91d17d8987bf01cfd068c">00130</a> <span class="keywordtype">void</span> <a class="code" href="classmrpt_1_1slam_1_1_c_observation_stereo_images.html#a9e60c7f316e91d17d8987bf01cfd068c" title="A general method to change the sensor pose on the robot.">setSensorPose</a>( <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> &newSensorPose ) { cameraPose = <a class="code" href="namespacemrpt_1_1poses.html#a1d4ae634d5f0417a36ca15a4d928300d">CPose3DQuat</a>(newSensorPose); } <a name="l00131"></a>00131 <a name="l00132"></a>00132 <span class="keywordtype">void</span> swap( <a class="code" href="classmrpt_1_1slam_1_1_c_observation_stereo_images.html" title="Observation class for either a pair of left+right or left+disparity images from a stereo camera...">CObservationStereoImages</a> &o); <span class="comment">//!< Do an efficient swap of all data members of this object with "o".</span> <a name="l00133"></a>00133 <span class="comment"></span> <a name="l00134"></a>00134 }; <span class="comment">// End of class def.</span> <a name="l00135"></a>00135 <a name="l00136"></a>00136 } <span class="comment">// End of namespace</span> <a name="l00137"></a>00137 } <span class="comment">// End of namespace</span> <a name="l00138"></a>00138 <a name="l00139"></a>00139 <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>