00001 /* +---------------------------------------------------------------------------+ 00002 | The Mobile Robot Programming Toolkit (MRPT) C++ library | 00003 | | 00004 | http://mrpt.sourceforge.net/ | 00005 | | 00006 | Copyright (C) 2005-2009 University of Malaga | 00007 | | 00008 | This software was written by the Machine Perception and Intelligent | 00009 | Robotics Lab, University of Malaga (Spain). | 00010 | Contact: Jose-Luis Blanco <jlblanco@ctima.uma.es> | 00011 | | 00012 | This file is part of the MRPT project. | 00013 | | 00014 | MRPT is free software: you can redistribute it and/or modify | 00015 | it under the terms of the GNU General Public License as published by | 00016 | the Free Software Foundation, either version 3 of the License, or | 00017 | (at your option) any later version. | 00018 | | 00019 | MRPT is distributed in the hope that it will be useful, | 00020 | but WITHOUT ANY WARRANTY; without even the implied warranty of | 00021 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | 00022 | GNU General Public License for more details. | 00023 | | 00024 | You should have received a copy of the GNU General Public License | 00025 | along with MRPT. If not, see <http://www.gnu.org/licenses/>. | 00026 | | 00027 +---------------------------------------------------------------------------+ */ 00028 00029 #ifndef mrpt_vision_pinhole_H 00030 #define mrpt_vision_pinhole_H 00031 00032 #include <mrpt/vision/utils.h> 00033 00034 namespace mrpt 00035 { 00036 namespace vision 00037 { 00038 /** Functions related to pinhole camera models, point projections, etc. */ 00039 namespace pinhole 00040 { 00041 /** Project a set of 3D points into a camera at an arbitrary 6D pose using its calibration matrix (undistorted projection model) 00042 * \param in_points_3D [IN] The list of 3D points in world coordinates (meters) to project. 00043 * \param cameraPose [IN] The pose of the camera in the world. 00044 * \param intrinsicParams [IN] The 3x3 calibration matrix. See http://babel.isa.uma.es/mrpt/index.php/Camera_Parameters 00045 * \param projectedPoints [OUT] The list of image coordinates (in pixels) for the projected points. At output this list is resized to the same number of input points. 00046 * \param accept_points_behind [IN] See the note below. 00047 * 00048 * \note Points "behind" the camera (which couldn't be physically seen in the real world) are marked with pixel coordinates (-1,-1) to detect them as invalid, unless accept_points_behind is true. In that case they'll be projected normally. 00049 * 00050 * \sa projectPoints_with_distortion 00051 */ 00052 void MRPTDLLIMPEXP projectPoints_no_distortion( 00053 const std::vector<mrpt::poses::CPoint3D> &in_points_3D, 00054 const mrpt::poses::CPose3D &cameraPose, 00055 const mrpt::math::CMatrixFloat & intrinsicParams, 00056 std::vector<mrpt::vision::TPixelCoordf> &projectedPoints, 00057 bool accept_points_behind = false 00058 ); 00059 00060 /** Project a set of 3D points into a camera at an arbitrary 6D pose using its calibration matrix and distortion parameters (radial and tangential distortions projection model) 00061 * \param in_points_3D [IN] The list of 3D points in world coordinates (meters) to project. 00062 * \param cameraPose [IN] The pose of the camera in the world. 00063 * \param intrinsicParams [IN] The 3x3 calibration matrix. See http://babel.isa.uma.es/mrpt/index.php/Camera_Parameters 00064 * \param distortionParams [IN] The 4-length vector with the distortion parameters [k1 k2 p1 p2]. See http://babel.isa.uma.es/mrpt/index.php/Camera_Parameters 00065 * \param projectedPoints [OUT] The list of image coordinates (in pixels) for the projected points. At output this list is resized to the same number of input points. 00066 * \param accept_points_behind [IN] See the note below. 00067 * 00068 * \note Points "behind" the camera (which couldn't be physically seen in the real world) are marked with pixel coordinates (-1,-1) to detect them as invalid, unless accept_points_behind is true. In that case they'll be projected normally. 00069 * 00070 * \sa projectPoints_no_distortion 00071 */ 00072 void MRPTDLLIMPEXP projectPoints_with_distortion( 00073 const std::vector<mrpt::poses::CPoint3D> &in_points_3D, 00074 const mrpt::poses::CPose3D &cameraPose, 00075 const mrpt::math::CMatrixFloat & intrinsicParams, 00076 const std::vector<double> & distortionParams, 00077 std::vector<mrpt::vision::TPixelCoordf> &projectedPoints, 00078 bool accept_points_behind = false 00079 ); 00080 00081 /** Undistort a list of points given by their pixel coordinates, provided the camera matrix and distortion coefficients. 00082 * \param srcDistortedPixels [IN] The pixel coordinates as in the distorted image. 00083 * \param dstUndistortedPixels [OUT] The computed pixel coordinates without distortion. 00084 * \param intrinsicParams [IN] The 3x3 calibration matrix. See http://babel.isa.uma.es/mrpt/index.php/Camera_Parameters 00085 * \param distortionParams [IN] The 4-length vector with the distortion parameters [k1 k2 p1 p2]. See http://babel.isa.uma.es/mrpt/index.php/Camera_Parameters 00086 */ 00087 void MRPTDLLIMPEXP undistort_points( 00088 const std::vector<mrpt::vision::TPixelCoordf> &srcDistortedPixels, 00089 std::vector<mrpt::vision::TPixelCoordf> &dstUndistortedPixels, 00090 const mrpt::math::CMatrixFloat & intrinsicParams, 00091 const std::vector<double> & distortionParams ); 00092 00093 } 00094 } 00095 } 00096 00097 #endif
Page generated by Doxygen 1.5.7.1 for MRPT 0.7.1 SVN: at Mon Aug 17 22:58:25 EDT 2009 |