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-2011, Willow Garage, Inc. 00006 * 00007 * All rights reserved. 00008 * 00009 * Redistribution and use in source and binary forms, with or without 00010 * modification, are permitted provided that the following conditions 00011 * are met: 00012 * 00013 * * Redistributions of source code must retain the above copyright 00014 * notice, this list of conditions and the following disclaimer. 00015 * * Redistributions in binary form must reproduce the above 00016 * copyright notice, this list of conditions and the following 00017 * disclaimer in the documentation and/or other materials provided 00018 * with the distribution. 00019 * * Neither the name of Willow Garage, Inc. nor the names of its 00020 * contributors may be used to endorse or promote products derived 00021 * from this software without specific prior written permission. 00022 * 00023 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 00024 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 00025 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 00026 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 00027 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 00028 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 00029 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 00030 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 00031 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 00032 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN 00033 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 00034 * POSSIBILITY OF SUCH DAMAGE. 00035 * 00036 */ 00037 00038 #ifndef PCL_FEATURES_SPARSE_QUANTIZED_MULTI_MOD_TEMPLATE 00039 #define PCL_FEATURES_SPARSE_QUANTIZED_MULTI_MOD_TEMPLATE 00040 00041 #include <vector> 00042 00043 #include <pcl/recognition/region_xy.h> 00044 00045 namespace pcl 00046 { 00047 00048 /** \brief Feature that defines a position and quantized value in a specific modality. 00049 * \author Stefan Holzer 00050 */ 00051 struct QuantizedMultiModFeature 00052 { 00053 /** \brief Constructor. */ 00054 QuantizedMultiModFeature () : x (0), y (0), modality_index (0), quantized_value (0) {} 00055 00056 /** \brief x-position. */ 00057 int x; 00058 /** \brief y-position. */ 00059 int y; 00060 /** \brief the index of the corresponding modality. */ 00061 size_t modality_index; 00062 /** \brief the quantized value attached to the feature. */ 00063 unsigned char quantized_value; 00064 00065 /** \brief Compares whether two features are the same. 00066 * \param[in] base the feature to compare to. 00067 */ 00068 bool 00069 compareForEquality (const QuantizedMultiModFeature & base) 00070 { 00071 if (base.x != x) 00072 return false; 00073 if (base.y != y) 00074 return false; 00075 if (base.modality_index != modality_index) 00076 return false; 00077 if (base.quantized_value != quantized_value) 00078 return false; 00079 00080 return true; 00081 } 00082 00083 /** \brief Serializes the object to the specified stream. 00084 * \param[out] stream the stream the object will be serialized to. */ 00085 void 00086 serialize (std::ostream & stream) const 00087 { 00088 write (stream, x); 00089 write (stream, y); 00090 write (stream, modality_index); 00091 write (stream, quantized_value); 00092 } 00093 00094 /** \brief Deserializes the object from the specified stream. 00095 * \param[in] stream the stream the object will be deserialized from. */ 00096 void 00097 deserialize (std::istream & stream) 00098 { 00099 read (stream, x); 00100 read (stream, y); 00101 read (stream, modality_index); 00102 read (stream, quantized_value); 00103 } 00104 }; 00105 00106 /** \brief A multi-modality template constructed from a set of quantized multi-modality features. 00107 * \author Stefan Holzer 00108 */ 00109 struct SparseQuantizedMultiModTemplate 00110 { 00111 /** \brief Constructor. */ 00112 SparseQuantizedMultiModTemplate () : features (), region () {} 00113 00114 /** \brief The storage for the multi-modality features. */ 00115 std::vector<QuantizedMultiModFeature> features; 00116 00117 /** \brief The region assigned to the template. */ 00118 RegionXY region; 00119 00120 /** \brief Serializes the object to the specified stream. 00121 * \param[out] stream the stream the object will be serialized to. */ 00122 void 00123 serialize (std::ostream & stream) const 00124 { 00125 const int num_of_features = static_cast<int> (features.size ()); 00126 write (stream, num_of_features); 00127 for (int feature_index = 0; feature_index < num_of_features; ++feature_index) 00128 { 00129 features[feature_index].serialize (stream); 00130 } 00131 00132 region.serialize (stream); 00133 } 00134 00135 /** \brief Deserializes the object from the specified stream. 00136 * \param[in] stream the stream the object will be deserialized from. */ 00137 void 00138 deserialize (std::istream & stream) 00139 { 00140 features.clear (); 00141 00142 int num_of_features; 00143 read (stream, num_of_features); 00144 features.resize (num_of_features); 00145 for (int feature_index = 0; feature_index < num_of_features; ++feature_index) 00146 { 00147 features[feature_index].deserialize (stream); 00148 } 00149 00150 region.deserialize (stream); 00151 } 00152 }; 00153 00154 } 00155 00156 #endif