Point Cloud Library (PCL)
1.7.0
|
00001 /* 00002 * Software License Agreement (BSD License) 00003 * 00004 * Point Cloud Library (PCL) - www.pointclouds.org 00005 * Copyright (c) 2010, Willow Garage, Inc. 00006 * Copyright (c) 2012-, Open Perception, Inc. 00007 * 00008 * All rights reserved. 00009 * 00010 * Redistribution and use in source and binary forms, with or without 00011 * modification, are permitted provided that the following conditions 00012 * are met: 00013 * 00014 * * Redistributions of source code must retain the above copyright 00015 * notice, this list of conditions and the following disclaimer. 00016 * * Redistributions in binary form must reproduce the above 00017 * copyright notice, this list of conditions and the following 00018 * disclaimer in the documentation and/or other materials provided 00019 * with the distribution. 00020 * * Neither the name of the copyright holder(s) nor the names of its 00021 * contributors may be used to endorse or promote products derived 00022 * from this software without specific prior written permission. 00023 * 00024 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 00025 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 00026 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 00027 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 00028 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 00029 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 00030 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 00031 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 00032 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 00033 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN 00034 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 00035 * POSSIBILITY OF SUCH DAMAGE. 00036 * 00037 */ 00038 00039 #ifndef PCL_COMMON_NORMS_H_ 00040 #define PCL_COMMON_NORMS_H_ 00041 00042 /** 00043 * \file norms.h 00044 * Define standard C methods to calculate different norms 00045 * \ingroup common 00046 */ 00047 00048 /*@{*/ 00049 namespace pcl 00050 { 00051 /** \brief Enum that defines all the types of norms available. 00052 * \note Any new norm type should have its own enum value and its own case in the selectNorm () method 00053 * \ingroup common 00054 */ 00055 enum NormType {L1, L2_SQR, L2, LINF, JM, B, SUBLINEAR, CS, DIV, PF, K, KL, HIK}; 00056 00057 /** \brief Method that calculates any norm type available, based on the norm_type variable 00058 * \note FloatVectorT is any type of vector with its values accessible via [ ] 00059 * \ingroup common 00060 * */ 00061 template <typename FloatVectorT> inline float 00062 selectNorm (FloatVectorT A, FloatVectorT B, int dim, NormType norm_type); 00063 00064 /** \brief Compute the L1 norm of the vector between two points 00065 * \param A the first point 00066 * \param B the second point 00067 * \param dim the number of dimensions in \a A and \a B (dimensions must match) 00068 * \note FloatVectorT is any type of vector with its values accessible via [ ] 00069 * \ingroup common 00070 */ 00071 template <typename FloatVectorT> inline float 00072 L1_Norm (FloatVectorT A, FloatVectorT B, int dim); 00073 00074 /** \brief Compute the squared L2 norm of the vector between two points 00075 * \param A the first point 00076 * \param B the second point 00077 * \param dim the number of dimensions in \a A and \a B (dimensions must match) 00078 * \note FloatVectorT is any type of vector with its values accessible via [ ] 00079 * \ingroup common 00080 */ 00081 template <typename FloatVectorT> inline float 00082 L2_Norm_SQR (FloatVectorT A, FloatVectorT B, int dim); 00083 00084 /** \brief Compute the L2 norm of the vector between two points 00085 * \param A the first point 00086 * \param B the second point 00087 * \param dim the number of dimensions in \a A and \a B (dimensions must match) 00088 * \note FloatVectorT is any type of vector with its values accessible via [ ] 00089 * \ingroup common 00090 */ 00091 template <typename FloatVectorT> inline float 00092 L2_Norm (FloatVectorT A, FloatVectorT B, int dim); 00093 00094 /** \brief Compute the L-infinity norm of the vector between two points 00095 * \param A the first point 00096 * \param B the second point 00097 * \param dim the number of dimensions in \a A and \a B (dimensions must match) 00098 * \note FloatVectorT is any type of vector with its values accessible via [ ] 00099 * \ingroup common 00100 */ 00101 template <typename FloatVectorT> inline float 00102 Linf_Norm (FloatVectorT A, FloatVectorT B, int dim); 00103 00104 /** \brief Compute the JM norm of the vector between two points 00105 * \param A the first point 00106 * \param B the second point 00107 * \param dim the number of dimensions in \a A and \a B (dimensions must match) 00108 * \note FloatVectorT is any type of vector with its values accessible via [ ] 00109 * \ingroup common 00110 */ 00111 template <typename FloatVectorT> inline float 00112 JM_Norm (FloatVectorT A, FloatVectorT B, int dim); 00113 00114 /** \brief Compute the B norm of the vector between two points 00115 * \param A the first point 00116 * \param B the second point 00117 * \param dim the number of dimensions in \a A and \a B (dimensions must match) 00118 * \note FloatVectorT is any type of vector with its values accessible via [ ] 00119 * \ingroup common 00120 */ 00121 template <typename FloatVectorT> inline float 00122 B_Norm (FloatVectorT A, FloatVectorT B, int dim); 00123 00124 /** \brief Compute the sublinear norm of the vector between two points 00125 * \param A the first point 00126 * \param B the second point 00127 * \param dim the number of dimensions in \a A and \a B (dimensions must match) 00128 * \note FloatVectorT is any type of vector with its values accessible via [ ] 00129 * \ingroup common 00130 */ 00131 template <typename FloatVectorT> inline float 00132 Sublinear_Norm (FloatVectorT A, FloatVectorT B, int dim); 00133 00134 /** \brief Compute the CS norm of the vector between two points 00135 * \param A the first point 00136 * \param B the second point 00137 * \param dim the number of dimensions in \a A and \a B (dimensions must match) 00138 * \note FloatVectorT is any type of vector with its values accessible via [ ] 00139 * \ingroup common 00140 */ 00141 template <typename FloatVectorT> inline float 00142 CS_Norm (FloatVectorT A, FloatVectorT B, int dim); 00143 00144 /** \brief Compute the div norm of the vector between two points 00145 * \param A the first point 00146 * \param B the second point 00147 * \param dim the number of dimensions in \a A and \a B (dimensions must match) 00148 * \note FloatVectorT is any type of vector with its values accessible via [ ] 00149 * \ingroup common 00150 */ 00151 template <typename FloatVectorT> inline float 00152 Div_Norm (FloatVectorT A, FloatVectorT B, int dim); 00153 00154 /** \brief Compute the PF norm of the vector between two points 00155 * \param A the first point 00156 * \param B the second point 00157 * \param dim the number of dimensions in \a A and \a B (dimensions must match) 00158 * \param P1 the first parameter 00159 * \param P2 the second parameter 00160 * \note FloatVectorT is any type of vector with its values accessible via [ ] 00161 * \ingroup common 00162 */ 00163 template <typename FloatVectorT> inline float 00164 PF_Norm (FloatVectorT A, FloatVectorT B, int dim, float P1, float P2); 00165 00166 /** \brief Compute the K norm of the vector between two points 00167 * \param A the first point 00168 * \param B the second point 00169 * \param dim the number of dimensions in \a A and \a B (dimensions must match) 00170 * \param P1 the first parameter 00171 * \param P2 the second parameter 00172 * \note FloatVectorT is any type of vector with its values accessible via [ ] 00173 * \ingroup common 00174 */ 00175 template <typename FloatVectorT> inline float 00176 K_Norm (FloatVectorT A, FloatVectorT B, int dim, float P1, float P2); 00177 00178 /** \brief Compute the KL between two discrete probability density functions 00179 * \param A the first discrete PDF 00180 * \param B the second discrete PDF 00181 * \param dim the number of dimensions in \a A and \a B (dimensions must match) 00182 * \note FloatVectorT is any type of vector with its values accessible via [ ] 00183 * \ingroup common 00184 */ 00185 template <typename FloatVectorT> inline float 00186 KL_Norm (FloatVectorT A, FloatVectorT B, int dim); 00187 00188 /** \brief Compute the HIK norm of the vector between two points 00189 * \param A the first point 00190 * \param B the second point 00191 * \param dim the number of dimensions in \a A and \a B (dimensions must match) 00192 * \note FloatVectorT is any type of vector with its values accessible via [ ] 00193 * \ingroup common 00194 */ 00195 template <typename FloatVectorT> inline float 00196 HIK_Norm (FloatVectorT A, FloatVectorT B, int dim); 00197 } 00198 /*@}*/ 00199 #include <pcl/common/impl/norms.hpp> 00200 00201 #endif //#ifndef PCL_NORMS_H_