41 #include <pcl/memory.h>
42 #include <pcl/pcl_macros.h>
43 #include <pcl/PCLPointField.h>
44 #include <pcl/point_types.h>
45 #include <pcl/register_point_struct.h>
47 #include <boost/mpl/and.hpp>
48 #include <boost/mpl/bool.hpp>
49 #include <boost/mpl/contains.hpp>
50 #include <boost/mpl/fold.hpp>
51 #include <boost/mpl/or.hpp>
52 #include <boost/mpl/placeholders.hpp>
53 #include <boost/mpl/vector.hpp>
60 #include <type_traits>
63 #define PCL_POINT_TYPES \
73 (pcl::InterestPoint) \
77 (pcl::PointXYZRGBNormal) \
78 (pcl::PointXYZINormal) \
79 (pcl::PointXYZLNormal) \
80 (pcl::PointWithRange) \
81 (pcl::PointWithViewpoint) \
82 (pcl::MomentInvariants) \
83 (pcl::PrincipalRadiiRSD) \
85 (pcl::PrincipalCurvatures) \
86 (pcl::PFHSignature125) \
87 (pcl::PFHRGBSignature250) \
89 (pcl::CPPFSignature) \
90 (pcl::PPFRGBSignature) \
91 (pcl::NormalBasedSignature12) \
92 (pcl::FPFHSignature33) \
93 (pcl::VFHSignature308) \
94 (pcl::GASDSignature512) \
95 (pcl::GASDSignature984) \
96 (pcl::GASDSignature7992) \
97 (pcl::GRSDSignature21) \
98 (pcl::ESFSignature640) \
99 (pcl::BRISKSignature512) \
101 (pcl::IntensityGradient) \
102 (pcl::PointWithScale) \
104 (pcl::ShapeContext1980) \
105 (pcl::UniqueShapeContext1960) \
109 (pcl::ReferenceFrame) \
113 #define PCL_RGB_POINT_TYPES \
114 (pcl::PointXYZRGBA) \
116 (pcl::PointXYZRGBL) \
117 (pcl::PointXYZRGBNormal) \
121 #define PCL_XYZ_POINT_TYPES \
125 (pcl::PointXYZRGBA) \
127 (pcl::PointXYZRGBL) \
129 (pcl::InterestPoint) \
131 (pcl::PointXYZRGBNormal) \
132 (pcl::PointXYZINormal) \
133 (pcl::PointXYZLNormal) \
134 (pcl::PointWithRange) \
135 (pcl::PointWithViewpoint) \
136 (pcl::PointWithScale) \
141 #define PCL_XYZL_POINT_TYPES \
143 (pcl::PointXYZRGBL) \
144 (pcl::PointXYZLNormal)
147 #define PCL_NORMAL_POINT_TYPES \
150 (pcl::PointXYZRGBNormal) \
151 (pcl::PointXYZINormal) \
152 (pcl::PointXYZLNormal) \
156 #define PCL_FEATURE_POINT_TYPES \
157 (pcl::PFHSignature125) \
158 (pcl::PFHRGBSignature250) \
159 (pcl::PPFSignature) \
160 (pcl::CPPFSignature) \
161 (pcl::PPFRGBSignature) \
162 (pcl::NormalBasedSignature12) \
163 (pcl::FPFHSignature33) \
164 (pcl::VFHSignature308) \
165 (pcl::GASDSignature512) \
166 (pcl::GASDSignature984) \
167 (pcl::GASDSignature7992) \
168 (pcl::GRSDSignature21) \
169 (pcl::ESFSignature640) \
170 (pcl::BRISKSignature512) \
178 using Array4fMap = Eigen::Map<Eigen::Array4f, Eigen::Aligned>;
185 using Vector3c = Eigen::Matrix<std::uint8_t, 3, 1>;
188 using Vector4c = Eigen::Matrix<std::uint8_t, 4, 1>;
192 #define PCL_ADD_UNION_POINT4D \
193 union EIGEN_ALIGN16 { \
202 #define PCL_ADD_EIGEN_MAPS_POINT4D \
203 inline pcl::Vector3fMap getVector3fMap () { return (pcl::Vector3fMap (data)); } \
204 inline pcl::Vector3fMapConst getVector3fMap () const { return (pcl::Vector3fMapConst (data)); } \
205 inline pcl::Vector4fMap getVector4fMap () { return (pcl::Vector4fMap (data)); } \
206 inline pcl::Vector4fMapConst getVector4fMap () const { return (pcl::Vector4fMapConst (data)); } \
207 inline pcl::Array3fMap getArray3fMap () { return (pcl::Array3fMap (data)); } \
208 inline pcl::Array3fMapConst getArray3fMap () const { return (pcl::Array3fMapConst (data)); } \
209 inline pcl::Array4fMap getArray4fMap () { return (pcl::Array4fMap (data)); } \
210 inline pcl::Array4fMapConst getArray4fMap () const { return (pcl::Array4fMapConst (data)); }
212 #define PCL_ADD_POINT4D \
213 PCL_ADD_UNION_POINT4D \
214 PCL_ADD_EIGEN_MAPS_POINT4D
216 #define PCL_ADD_UNION_NORMAL4D \
217 union EIGEN_ALIGN16 { \
227 #define PCL_ADD_EIGEN_MAPS_NORMAL4D \
228 inline pcl::Vector3fMap getNormalVector3fMap () { return (pcl::Vector3fMap (data_n)); } \
229 inline pcl::Vector3fMapConst getNormalVector3fMap () const { return (pcl::Vector3fMapConst (data_n)); } \
230 inline pcl::Vector4fMap getNormalVector4fMap () { return (pcl::Vector4fMap (data_n)); } \
231 inline pcl::Vector4fMapConst getNormalVector4fMap () const { return (pcl::Vector4fMapConst (data_n)); }
233 #define PCL_ADD_NORMAL4D \
234 PCL_ADD_UNION_NORMAL4D \
235 PCL_ADD_EIGEN_MAPS_NORMAL4D
237 #define PCL_ADD_UNION_RGB \
251 std::uint32_t rgba; \
254 #define PCL_ADD_EIGEN_MAPS_RGB \
255 inline Eigen::Vector3i getRGBVector3i () { return (Eigen::Vector3i (r, g, b)); } \
256 inline const Eigen::Vector3i getRGBVector3i () const { return (Eigen::Vector3i (r, g, b)); } \
257 inline Eigen::Vector4i getRGBVector4i () { return (Eigen::Vector4i (r, g, b, a)); } \
258 inline const Eigen::Vector4i getRGBVector4i () const { return (Eigen::Vector4i (r, g, b, a)); } \
259 inline Eigen::Vector4i getRGBAVector4i () { return (Eigen::Vector4i (r, g, b, a)); } \
260 inline const Eigen::Vector4i getRGBAVector4i () const { return (Eigen::Vector4i (r, g, b, a)); } \
261 inline pcl::Vector3cMap getBGRVector3cMap () { return (pcl::Vector3cMap (reinterpret_cast<std::uint8_t*> (&rgba))); } \
262 inline pcl::Vector3cMapConst getBGRVector3cMap () const { return (pcl::Vector3cMapConst (reinterpret_cast<const std::uint8_t*> (&rgba))); } \
263 inline pcl::Vector4cMap getBGRAVector4cMap () { return (pcl::Vector4cMap (reinterpret_cast<std::uint8_t*> (&rgba))); } \
264 inline pcl::Vector4cMapConst getBGRAVector4cMap () const { return (pcl::Vector4cMapConst (reinterpret_cast<const std::uint8_t*> (&rgba))); }
266 #define PCL_ADD_RGB \
268 PCL_ADD_EIGEN_MAPS_RGB
270 #define PCL_ADD_INTENSITY \
276 #define PCL_ADD_INTENSITY_8U \
279 std::uint8_t intensity; \
282 #define PCL_ADD_INTENSITY_32U \
285 std::uint32_t intensity; \
308 x = _x; y = _y; z = _z;
325 PCL_EXPORTS std::ostream&
operator << (std::ostream& os,
const RGB& p);
354 inline RGB (std::uint8_t _r, std::uint8_t _g, std::uint8_t _b)
356 r = _r; g = _g; b = _b;
360 friend std::ostream&
operator << (std::ostream& os,
const RGB& p);
377 intensity = p.intensity;
382 intensity = _intensity;
403 intensity = p.intensity;
408 intensity = _intensity;
411 #if defined(_LIBCPP_VERSION) && _LIBCPP_VERSION <= 1101
412 operator unsigned char()
const
435 intensity = p.intensity;
440 intensity = _intensity;
463 PCL_EXPORTS std::ostream&
operator << (std::ostream& os,
const PointXYZI& p);
468 x = p.x; y = p.y; z = p.z; data[3] = 1.0f;
474 inline PointXYZI (
float _x,
float _y,
float _z,
float _intensity = 0.f)
476 x = _x; y = _y; z = _z;
497 x = p.x; y = p.y; z = p.z; data[3] = 1.0f;
503 inline PointXYZL (
float _x,
float _y,
float _z, std::uint32_t _label = 0)
505 x = _x; y = _y; z = _z;
514 PCL_EXPORTS std::ostream&
operator << (std::ostream& os,
const Label& p);
519 Label (std::uint32_t _label = 0): label(_label) {}
557 x = p.x; y = p.y; z = p.z; data[3] = 1.0f;
563 inline PointXYZRGBA (std::uint8_t _r, std::uint8_t _g, std::uint8_t _b, std::uint8_t _a):
570 std::uint8_t _g, std::uint8_t _b, std::uint8_t _a)
572 x = _x; y = _y; z = _z;
574 r = _r; g = _g; b = _b; a = _a;
632 x = p.x; y = p.y; z = p.z; data[3] = 1.0f;
638 inline PointXYZRGB (std::uint8_t _r, std::uint8_t _g, std::uint8_t _b):
645 std::uint8_t _r, std::uint8_t _g, std::uint8_t _b)
647 x = _x; y = _y; z = _z;
649 r = _r; g = _g; b = _b;
658 PCL_EXPORTS std::ostream&
operator << (std::ostream& os,
const PointXYZRGBL& p);
663 x = p.x; y = p.y; z = p.z; data[3] = 1.0f;
671 inline PointXYZRGBL (std::uint8_t _r, std::uint8_t _g, std::uint8_t _b):
678 std::uint8_t _r, std::uint8_t _g, std::uint8_t _b,
679 std::uint32_t _label = 0)
681 x = _x; y = _y; z = _z;
683 r = _r; g = _g; b = _b;
709 PCL_EXPORTS std::ostream&
operator << (std::ostream& os,
const PointXYZHSV& p);
714 x = p.x; y = p.y; z = p.z; data[3] = 1.0f;
715 h = p.
h; s = p.
s; v = p.
v;
726 float _h,
float _s,
float _v)
728 x = _x; y = _y; z = _z;
730 h = _h; s = _s; v = _v;
740 PCL_EXPORTS std::ostream&
operator << (std::ostream& os,
const PointXY& p);
751 inline PointXY(
float _x,
float _y): x(_x), y(_y) {}
756 PCL_EXPORTS std::ostream&
operator << (std::ostream& os,
const PointUV& p);
768 inline PointUV(
float _u,
float _v): u(_u), v(_v) {}
773 PCL_EXPORTS std::ostream&
operator << (std::ostream& os,
const InterestPoint& p);
808 PCL_EXPORTS std::ostream&
operator << (std::ostream& os,
const Normal& p);
816 normal_x = p.normal_x; normal_y = p.normal_y; normal_z = p.normal_z;
821 inline Normal (
float _curvature = 0.f):
Normal (0.f, 0.f, 0.f, _curvature) {}
823 inline Normal (
float n_x,
float n_y,
float n_z,
float _curvature = 0.f)
825 normal_x = n_x; normal_y = n_y; normal_z = n_z;
841 PCL_EXPORTS std::ostream&
operator << (std::ostream& os,
const Axis& p);
849 normal_x = p.normal_x; normal_y = p.normal_y; normal_z = p.normal_z;
855 inline Axis (
float n_x,
float n_y,
float n_z)
857 normal_x = n_x; normal_y = n_y; normal_z = n_z;
881 PCL_EXPORTS std::ostream&
operator << (std::ostream& os,
const PointNormal& p);
889 x = p.x; y = p.y; z = p.z; data[3] = 1.0f;
890 normal_x = p.normal_x; normal_y = p.normal_y; normal_z = p.normal_z; data_n[3] = 0.0f;
899 inline PointNormal (
float _x,
float _y,
float _z,
float n_x,
float n_y,
float n_z,
float _curvature = 0.f)
901 x = _x; y = _y; z = _z;
903 normal_x = n_x; normal_y = n_y; normal_z = n_z;
963 x = p.x; y = p.y; z = p.z; data[3] = 1.0f;
964 normal_x = p.normal_x; normal_y = p.normal_y; normal_z = p.normal_z; data_n[3] = 0.0f;
978 inline PointXYZRGBNormal (
float _x,
float _y,
float _z, std::uint8_t _r, std::uint8_t _g, std::uint8_t _b):
981 inline PointXYZRGBNormal (
float _x,
float _y,
float _z, std::uint8_t _r, std::uint8_t _g, std::uint8_t _b,
982 float n_x,
float n_y,
float n_z,
float _curvature = 0.f)
984 x = _x; y = _y; z = _z;
986 r = _r; g = _g; b = _b;
988 normal_x = n_x; normal_y = n_y; normal_z = n_z;
1012 PCL_EXPORTS std::ostream&
operator << (std::ostream& os,
const PointXYZINormal& p);
1020 x = p.x; y = p.y; z = p.z; data[3] = 1.0f;
1021 normal_x = p.normal_x; normal_y = p.normal_y; normal_z = p.normal_z; data_n[3] = 0.0f;
1032 float n_x,
float n_y,
float n_z,
float _curvature = 0.f)
1034 x = _x; y = _y; z = _z;
1037 normal_x = n_x; normal_y = n_y; normal_z = n_z;
1062 PCL_EXPORTS std::ostream&
operator << (std::ostream& os,
const PointXYZLNormal& p);
1070 x = p.x; y = p.y; z = p.z; data[3] = 1.0f;
1071 normal_x = p.normal_x; normal_y = p.normal_y; normal_z = p.normal_z; data_n[3] = 0.0f;
1082 float n_x,
float n_y,
float n_z,
float _curvature = 0.f)
1084 x = _x; y = _y; z = _z;
1087 normal_x = n_x; normal_y = n_y; normal_z = n_z;
1112 PCL_EXPORTS std::ostream&
operator << (std::ostream& os,
const PointWithRange& p);
1120 x = p.x; y = p.y; z = p.z; data[3] = 1.0f;
1128 x = _x; y = _y; z = _z;
1153 PCL_EXPORTS std::ostream&
operator << (std::ostream& os,
const PointWithViewpoint& p);
1161 x = p.x; y = p.y; z = p.z; data[3] = 1.0f;
1167 PCL_DEPRECATED(1, 12,
"Use ctor accepting all position (x, y, z) data")
1171 PCL_DEPRECATED(1, 12,
"Use ctor accepting all viewpoint (vp_x, vp_y, vp_z) data")
1179 x = _x; y = _y; z = _z;
1181 vp_x = _vp_x; vp_y = _vp_y; vp_z = _vp_z;
1187 PCL_EXPORTS std::ostream&
operator << (std::ostream& os,
const MomentInvariants& p);
1202 PCL_EXPORTS std::ostream&
operator << (std::ostream& os,
const PrincipalRadiiRSD& p);
1217 PCL_EXPORTS std::ostream&
operator << (std::ostream& os,
const Boundary& p);
1225 #if defined(_LIBCPP_VERSION) && _LIBCPP_VERSION <= 1101
1226 operator unsigned char()
const
1232 inline Boundary (std::uint8_t _boundary = 0): boundary_point (_boundary) {}
1237 PCL_EXPORTS std::ostream&
operator << (std::ostream& os,
const PrincipalCurvatures& p);
1268 PCL_EXPORTS std::ostream&
operator << (std::ostream& os,
const PFHSignature125& p);
1282 PCL_EXPORTS std::ostream&
operator << (std::ostream& os,
const PFHRGBSignature250& p);
1296 PCL_EXPORTS std::ostream&
operator << (std::ostream& os,
const PPFSignature& p);
1307 inline PPFSignature (
float _f1,
float _f2,
float _f3,
float _f4,
float _alpha = 0.f):
1308 f1 (_f1),
f2 (_f2),
f3 (_f3),
f4 (_f4), alpha_m (_alpha) {}
1313 PCL_EXPORTS std::ostream&
operator << (std::ostream& os,
const CPPFSignature& p);
1323 CPPFSignature (0.f, 0.f, 0.f, 0.f, 0.f, 0.f, 0.f, 0.f, 0.f, 0.f, _alpha) {}
1325 inline CPPFSignature (
float _f1,
float _f2,
float _f3,
float _f4,
float _f5,
float _f6,
1326 float _f7,
float _f8,
float _f9,
float _f10,
float _alpha = 0.f):
1327 f1 (_f1), f2 (_f2), f3 (_f3), f4 (_f4), f5 (_f5), f6 (_f6),
1328 f7 (_f7), f8 (_f8), f9 (_f9), f10 (_f10), alpha_m (_alpha) {}
1333 PCL_EXPORTS std::ostream&
operator << (std::ostream& os,
const PPFRGBSignature& p);
1348 inline PPFRGBSignature (
float _f1,
float _f2,
float _f3,
float _f4,
float _alpha,
float _r,
float _g,
float _b):
1349 f1 (_f1),
f2 (_f2),
f3 (_f3),
f4 (_f4), r_ratio (_r),
g_ratio (_g),
b_ratio (_b), alpha_m (_alpha) {}
1354 PCL_EXPORTS std::ostream&
operator << (std::ostream& os,
const NormalBasedSignature12& p);
1368 PCL_EXPORTS std::ostream&
operator << (std::ostream& os,
const ShapeContext1980& p);
1383 PCL_EXPORTS std::ostream&
operator << (std::ostream& os,
const UniqueShapeContext1960& p);
1398 PCL_EXPORTS std::ostream&
operator << (std::ostream& os,
const SHOT352& p);
1414 PCL_EXPORTS std::ostream&
operator << (std::ostream& os,
const SHOT1344& p);
1447 inline const Eigen::Map<const Eigen::Vector3f>
getXAxisVector3fMap ()
const {
return (Eigen::Vector3f::Map (x_axis)); }
1449 inline const Eigen::Map<const Eigen::Vector3f>
getYAxisVector3fMap ()
const {
return (Eigen::Vector3f::Map (y_axis)); }
1451 inline const Eigen::Map<const Eigen::Vector3f>
getZAxisVector3fMap ()
const {
return (Eigen::Vector3f::Map (z_axis)); }
1452 inline Eigen::Map<Eigen::Matrix3f>
getMatrix3fMap () {
return (Eigen::Matrix3f::Map (rf)); }
1453 inline const Eigen::Map<const Eigen::Matrix3f>
getMatrix3fMap ()
const {
return (Eigen::Matrix3f::Map (rf)); }
1458 PCL_EXPORTS std::ostream&
operator << (std::ostream& os,
const ReferenceFrame& p);
1463 std::copy_n(p.
rf, 9, rf);
1468 std::fill_n(x_axis, 3, 0.f);
1469 std::fill_n(y_axis, 3, 0.f);
1470 std::fill_n(z_axis, 3, 0.f);
1480 PCL_EXPORTS std::ostream&
operator << (std::ostream& os,
const FPFHSignature33& p);
1494 PCL_EXPORTS std::ostream&
operator << (std::ostream& os,
const VFHSignature308& p);
1508 PCL_EXPORTS std::ostream&
operator << (std::ostream& os,
const GRSDSignature21& p);
1522 PCL_EXPORTS std::ostream&
operator << (std::ostream& os,
const BRISKSignature512& p);
1535 inline BRISKSignature512 (
float _scale,
float _orientation): scale (_scale), orientation (_orientation) {}
1540 PCL_EXPORTS std::ostream&
operator << (std::ostream& os,
const ESFSignature640& p);
1554 PCL_EXPORTS std::ostream&
operator << (std::ostream& os,
const GASDSignature512& p);
1568 PCL_EXPORTS std::ostream&
operator << (std::ostream& os,
const GASDSignature984& p);
1582 PCL_EXPORTS std::ostream&
operator << (std::ostream& os,
const GASDSignature7992& p);
1596 PCL_EXPORTS std::ostream&
operator << (std::ostream& os,
const GFPFHSignature16& p);
1610 PCL_EXPORTS std::ostream&
operator << (std::ostream& os,
const Narf36& p);
1620 inline Narf36 () =
default;
1622 inline Narf36 (
float _x,
float _y,
float _z):
Narf36 (_x, _y, _z, 0.f, 0.f, 0.f) {}
1624 inline Narf36 (
float _x,
float _y,
float _z,
float _roll,
float _pitch,
float _yaw):
1625 x (_x),
y (_y),
z (_z),
roll (_roll),
pitch (_pitch),
yaw (_yaw) {}
1630 PCL_EXPORTS std::ostream&
operator << (std::ostream& os,
const BorderDescription& p);
1712 x = p.x; y = p.y; z = p.z; data[3] = 1.0f;
1722 float _angle = -1.f,
float _response = 0.f,
int _octave = 0)
1724 x = _x; y = _y; z = _z;
1763 x = p.x; y = p.y; z = p.z; data[3] = 1.0f;
1774 normal_x = normal_y = normal_z = data_n[3] = 0.0f;
1802 x = p.x; y = p.y; z = p.z; data[3] = 1.0f;
1812 inline PointDEM (
float _x,
float _y,
float _z,
float _intensity,
1813 float _intensity_variance,
float _height_variance)
1815 x = _x; y = _y; z = _z;
1825 template <
int N> std::ostream&
1826 operator << (std::ostream& os, const Histogram<N>& p)
1831 os <<
"(" << p.histogram[0];
1832 std::for_each(p.histogram + 1, std::end(p.histogram),
1833 [&os](
const auto& hist) { os <<
", " << hist; });
1842 (std::uint32_t, rgba, rgba)
1844 POINT_CLOUD_REGISTER_POINT_WRAPPER(
pcl::RGB,
pcl::_RGB)
1847 (
float, intensity, intensity)
1849 POINT_CLOUD_REGISTER_POINT_WRAPPER(
pcl::Intensity,
pcl::_Intensity)
1852 (
std::uint8_t, intensity, intensity)
1854 POINT_CLOUD_REGISTER_POINT_WRAPPER(
pcl::Intensity8u,
pcl::_Intensity8u)
1857 (
std::uint32_t, intensity, intensity)
1859 POINT_CLOUD_REGISTER_POINT_WRAPPER(
pcl::Intensity32u,
pcl::_Intensity32u)
1866 POINT_CLOUD_REGISTER_POINT_WRAPPER(
pcl::PointXYZ,
pcl::_PointXYZ)
1872 (
std::uint32_t, rgba, rgba)
1874 POINT_CLOUD_REGISTER_POINT_WRAPPER(
pcl::PointXYZRGBA,
pcl::_PointXYZRGBA)
1882 POINT_CLOUD_REGISTER_POINT_WRAPPER(
pcl::PointXYZRGB,
pcl::_PointXYZRGB)
1888 (
std::uint32_t, rgba, rgba)
1889 (
std::uint32_t, label, label)
1891 POINT_CLOUD_REGISTER_POINT_WRAPPER(
pcl::PointXYZRGBL,
pcl::_PointXYZRGBL)
1901 POINT_CLOUD_REGISTER_POINT_WRAPPER(
pcl::PointXYZHSV,
pcl::_PointXYZHSV)
1917 (
float, strength, strength)
1924 (
float, intensity, intensity)
1926 POINT_CLOUD_REGISTER_POINT_WRAPPER(
pcl::PointXYZI,
pcl::_PointXYZI)
1932 (
std::uint32_t, label, label)
1936 (
std::uint32_t, label, label)
1940 (
float, normal_x, normal_x)
1941 (
float, normal_y, normal_y)
1942 (
float, normal_z, normal_z)
1943 (
float, curvature, curvature)
1945 POINT_CLOUD_REGISTER_POINT_WRAPPER(
pcl::Normal,
pcl::_Normal)
1948 (
float, normal_x, normal_x)
1949 (
float, normal_y, normal_y)
1950 (
float, normal_z, normal_z)
1952 POINT_CLOUD_REGISTER_POINT_WRAPPER(
pcl::Axis,
pcl::_Axis)
1958 (
float, normal_x, normal_x)
1959 (
float, normal_y, normal_y)
1960 (
float, normal_z, normal_z)
1961 (
float, curvature, curvature)
1968 (
float, normal_x, normal_x)
1969 (
float, normal_y, normal_y)
1970 (
float, normal_z, normal_z)
1971 (
float, curvature, curvature)
1973 POINT_CLOUD_REGISTER_POINT_WRAPPER(
pcl::PointXYZRGBNormal,
pcl::_PointXYZRGBNormal)
1978 (
float, intensity, intensity)
1979 (
float, normal_x, normal_x)
1980 (
float, normal_y, normal_y)
1981 (
float, normal_z, normal_z)
1982 (
float, curvature, curvature)
1988 (
std::uint32_t, label, label)
1989 (
float, normal_x, normal_x)
1990 (
float, normal_y, normal_y)
1991 (
float, normal_z, normal_z)
1992 (
float, curvature, curvature)
1998 (
float, range, range)
2009 POINT_CLOUD_REGISTER_POINT_WRAPPER(
pcl::PointWithViewpoint,
pcl::_PointWithViewpoint)
2018 (
float, r_min, r_min)
2019 (
float, r_max, r_max)
2023 (
std::uint8_t, boundary_point, boundary_point)
2027 (
float, principal_curvature_x, principal_curvature_x)
2028 (
float, principal_curvature_y, principal_curvature_y)
2029 (
float, principal_curvature_z, principal_curvature_z)
2035 (
float[125], histogram, pfh)
2039 (
float[250], histogram, pfhrgb)
2047 (
float, alpha_m, alpha_m)
2061 (
float, alpha_m, alpha_m)
2069 (
float, r_ratio, r_ratio)
2070 (
float, g_ratio, g_ratio)
2071 (
float, b_ratio, b_ratio)
2072 (
float, alpha_m, alpha_m)
2076 (
float[12], values, values)
2080 (
float[1980], descriptor, shape_context)
2085 (
float[1960], descriptor, shape_context)
2090 (
float[352], descriptor, shot)
2095 (
float[1344], descriptor, shot)
2100 (
float[33], histogram, fpfh)
2104 (
float, scale, brisk_scale)
2105 (
float, orientation, brisk_orientation)
2106 (
unsigned char[64], descriptor, brisk_descriptor512)
2110 (
float[308], histogram, vfh)
2114 (
float[21], histogram, grsd)
2118 (
float[640], histogram, esf)
2122 (
float[512], histogram, gasd)
2126 (
float[984], histogram, gasd)
2130 (
float[7992], histogram, gasd)
2134 (
float[36], descriptor, descriptor)
2138 (
float[16], histogram, gfpfh)
2142 (
float, gradient_x, gradient_x)
2143 (
float, gradient_y, gradient_y)
2144 (
float, gradient_z, gradient_z)
2151 (
float, scale, scale)
2158 (
float, normal_x, normal_x)
2159 (
float, normal_y, normal_y)
2160 (
float, normal_z, normal_z)
2161 (
std::uint32_t, rgba, rgba)
2162 (
float, radius, radius)
2163 (
float, confidence, confidence)
2164 (
float, curvature, curvature)
2168 (
float[3], x_axis, x_axis)
2169 (
float[3], y_axis, y_axis)
2170 (
float[3], z_axis, z_axis)
2172 POINT_CLOUD_REGISTER_POINT_WRAPPER(
pcl::ReferenceFrame,
pcl::_ReferenceFrame)
2178 (
float, intensity, intensity)
2179 (
float, intensity_variance, intensity_variance)
2180 (
float, height_variance, height_variance)
2182 POINT_CLOUD_REGISTER_POINT_WRAPPER(
pcl::PointDEM,
pcl::_PointDEM)
2189 template<
typename Po
intT>
2190 struct FieldMatches<
PointT, ::pcl::fields::rgba>
2194 if (field.
name ==
"rgb")
2204 return (field.
name == traits::name<PointT, fields::rgba>::value &&
2205 field.
datatype == traits::datatype<PointT, fields::rgba>::value &&
2206 field.
count == traits::datatype<PointT, fields::rgba>::size);
2210 template<
typename Po
intT>
2215 if (field.
name ==
"rgba")
2223 return (field.
name == traits::name<PointT, fields::rgb>::value &&
2224 (field.
datatype == traits::datatype<PointT, fields::rgb>::value ||
2226 field.
count == traits::datatype<PointT, fields::rgb>::size);
2234 #if defined _MSC_VER
2235 #pragma warning(disable: 4201)
2257 template <
typename Po
intT,
typename Field>
2258 struct has_field : boost::mpl::contains<typename pcl::traits::fieldList<PointT>::type, Field>::type
2262 template <
typename Po
intT,
typename Field>
2264 boost::mpl::bool_<true>,
2265 boost::mpl::and_<boost::mpl::_1,
2266 has_field<PointT, boost::mpl::_2> > >::type
2270 template <
typename Po
intT,
typename Field>
2272 boost::mpl::bool_<false>,
2273 boost::mpl::or_<boost::mpl::_1,
2274 has_field<PointT, boost::mpl::_2> > >::type
2285 template <
typename Po
intT>
2290 template <
typename Po
intT>
2293 template <
typename Po
intT>
2294 using HasXY = std::enable_if_t<has_xy_v<PointT>,
bool>;
2296 template <
typename Po
intT>
2297 using HasNoXY = std::enable_if_t<!has_xy_v<PointT>,
bool>;
2300 template <
typename Po
intT>
2306 template <
typename Po
intT>
2309 template <
typename Po
intT>
2310 using HasXYZ = std::enable_if_t<has_xyz_v<PointT>,
bool>;
2312 template <
typename Po
intT>
2313 using HasNoXYZ = std::enable_if_t<!has_xyz_v<PointT>,
bool>;
2317 template <
typename Po
intT>
2319 pcl::fields::normal_y,
2320 pcl::fields::normal_z> >
2323 template <
typename Po
intT>
2326 template <
typename Po
intT>
2327 using HasNormal = std::enable_if_t<has_normal_v<PointT>,
bool>;
2329 template <
typename Po
intT>
2333 template <
typename Po
intT>
2337 template <
typename Po
intT>
2340 template <
typename Po
intT>
2343 template <
typename Po
intT>
2347 template <
typename Po
intT>
2351 template <
typename Po
intT>
2354 template <
typename Po
intT>
2357 template <
typename Po
intT>
2361 template <
typename Po
intT>
2363 pcl::fields::rgba> >
2366 template <
typename Po
intT>
2369 template <
typename Po
intT>
2370 using HasColor = std::enable_if_t<has_color_v<PointT>,
bool>;
2372 template <
typename Po
intT>
2376 template <
typename Po
intT>
2380 template <
typename Po
intT>
2383 template <
typename Po
intT>
2384 using HasLabel = std::enable_if_t<has_label_v<PointT>,
bool>;
2386 template <
typename Po
intT>
2390 #if defined _MSC_VER
2391 #pragma warning(default: 4201)
PFHRGBSignature250()=default
A point structure representing normal coordinates and the surface curvature estimate.
Eigen::Map< Eigen::Vector3f > Vector3fMap
A point structure representing the grayscale intensity in single-channel images.
friend std::ostream & operator<<(std::ostream &os, const CPPFSignature &p)
constexpr auto has_color_v
A point structure representing a Shape Context.
PointXYZRGBNormal(float _x, float _y, float _z)
PointWithViewpoint(float _x, float _y, float _z)
PrincipalRadiiRSD(float _r_min, float _r_max)
Eigen::Map< Eigen::Vector3f > getXAxisVector3fMap()
std::bitset< 32 > BorderTraits
Data type to store extended information about a transition from foreground to backgroundSpecification...
friend std::ostream & operator<<(std::ostream &os, const UniqueShapeContext1960 &p)
PointNormal(float _x, float _y, float _z)
GASDSignature512()=default
Label(std::uint32_t _label=0)
A point structure representing a description of whether a point is lying on a surface boundary or not...
PPFRGBSignature(float _f1, float _f2, float _f3, float _f4, float _alpha, float _r, float _g, float _b)
friend std::ostream & operator<<(std::ostream &os, const GASDSignature7992 &p)
A point structure representing Euclidean xyz coordinates, a label, together with normal coordinates a...
std::enable_if_t< has_curvature_v< PointT >, bool > HasCurvature
static int descriptorSize()
friend std::ostream & operator<<(std::ostream &os, const PointDEM &p)
A point structure representing Euclidean xyz coordinates, padded with an extra range float...
Traits defined for ease of use with fields already registered before.
PointDEM(const _PointDEM &p)
PointXYZI(float _x, float _y, float _z, float _intensity=0.f)
friend std::ostream & operator<<(std::ostream &os, const Normal &p)
const Eigen::Map< const Eigen::Vector4f, Eigen::Aligned > Vector4fMapConst
PrincipalCurvatures(float _pc1, float _pc2)
PointXYZRGBA(std::uint8_t _r, std::uint8_t _g, std::uint8_t _b, std::uint8_t _a)
static int descriptorSize()
PointXYZRGBL(float _x, float _y, float _z)
float scale
Diameter of the meaningful keypoint neighborhood.
A point structure representing the Normal Based Signature for a feature matrix of 4-by-3...
float principal_curvature[3]
A point structure representing a Unique Shape Context.
PointXYZL(float _x, float _y, float _z, std::uint32_t _label=0)
PointXYZI(float _intensity=0.f)
PointXYZRGB(float _x, float _y, float _z, std::uint8_t _r, std::uint8_t _g, std::uint8_t _b)
constexpr auto has_normal_v
GASDSignature7992()=default
Eigen::Map< Eigen::Vector3f > getZAxisVector3fMap()
A structure representing the Local Reference Frame of a point.
Metafunction to check if a given point type has normal_x, normal_y, and normal_z fields.
unsigned char descriptor[64]
friend std::ostream & operator<<(std::ostream &os, const PointXY &p)
std::enable_if_t<!has_xy_v< PointT >, bool > HasNoXY
constexpr auto has_label_v
float angle
Computed orientation of the keypoint (-1 if not applicable).
PPFRGBSignature(float _f1, float _f2, float _f3, float _f4, float _alpha=0.f)
PPFSignature(float _alpha=0.f)
PointXYZRGBNormal(const _PointXYZRGBNormal &p)
static int descriptorSize()
PrincipalCurvatures(float _x, float _y, float _z, float _pc1, float _pc2)
friend std::ostream & operator<<(std::ostream &os, const GASDSignature512 &p)
PointXYZRGBL(std::uint8_t _r, std::uint8_t _g, std::uint8_t _b)
const Eigen::Map< const Eigen::Vector3f > getZAxisVector3fMap() const
A point structure representing Digital Elevation Map.
friend std::ostream & operator<<(std::ostream &os, const MomentInvariants &p)
static int descriptorSize()
friend std::ostream & operator<<(std::ostream &os, const GFPFHSignature16 &p)
Intensity(float _intensity=0.f)
UniqueShapeContext1960()=default
A point structure representing the Binary Robust Invariant Scalable Keypoints (BRISK).
PointXYZ(float _x, float _y, float _z)
friend std::ostream & operator<<(std::ostream &os, const Intensity8u &p)
PointXYZRGBA(const _PointXYZRGBA &p)
friend std::ostream & operator<<(std::ostream &os, const PointXYZI &p)
float response
The response by which the most strong keypoints have been selected.
Eigen::Map< Vector3c > Vector3cMap
static int descriptorSize()
PointWithViewpoint(float _x, float _y, float _z, float _vp_x, float _vp_y, float _vp_z)
std::enable_if_t<!has_xyz_v< PointT >, bool > HasNoXYZ
Normal(float n_x, float n_y, float n_z, float _curvature=0.f)
A point structure representing an Axis using its normal coordinates.
#define PCL_MAKE_ALIGNED_OPERATOR_NEW
Macro to signal a class requires a custom allocator.
friend std::ostream & operator<<(std::ostream &os, const FPFHSignature33 &p)
PointXYZRGB(float _x, float _y, float _z)
constexpr auto has_intensity_v
friend std::ostream & operator<<(std::ostream &os, const PrincipalCurvatures &p)
PointNormal(float _x, float _y, float _z, float n_x, float n_y, float n_z, float _curvature=0.f)
GASDSignature984()=default
A point structure representing Euclidean xyz coordinates, and the RGBA color.
Intensity8u(const _Intensity8u &p)
PointXYZINormal(float _intensity=0.f)
A point structure representing the grayscale intensity in single-channel images.
VFHSignature308()=default
PointXYZRGBA(float _x, float _y, float _z, std::uint8_t _r, std::uint8_t _g, std::uint8_t _b, std::uint8_t _a)
std::ostream & operator<<(std::ostream &os, const BivariatePolynomialT< real > &p)
A point structure representing the Fast Point Feature Histogram (FPFH).
PointWithRange(float _x, float _y, float _z, float _range=0.f)
A 2D point structure representing Euclidean xy coordinates.
std::enable_if_t<!has_label_v< PointT >, bool > HasNoLabel
PointXYZRGBNormal(std::uint8_t _r, std::uint8_t _g, std::uint8_t _b)
friend std::ostream & operator<<(std::ostream &os, const ShapeContext1980 &p)
PointWithScale(float _x, float _y, float _z, float _scale=1.f, float _angle=-1.f, float _response=0.f, int _octave=0)
Narf36(float _x, float _y, float _z)
PointXYZ(const _PointXYZ &p)
PointXYZRGBNormal(float _x, float _y, float _z, std::uint8_t _r, std::uint8_t _g, std::uint8_t _b)
friend std::ostream & operator<<(std::ostream &os, const PointSurfel &p)
std::enable_if_t< has_color_v< PointT >, bool > HasColor
friend std::ostream & operator<<(std::ostream &os, const PointNormal &p)
PointWithRange(float _range=0.f)
A structure representing RGB color information.
Metafunction to check if a given point type has either rgb or rgba field.
friend std::ostream & operator<<(std::ostream &os, const Boundary &p)
A point structure representing an N-D histogram.
A 2D point structure representing pixel image coordinates.
std::enable_if_t<!has_color_v< PointT >, bool > HasNoColor
Metafunction to check if a given point type has curvature field.
A point structure representing the GFPFH descriptor with 16 bins.
friend std::ostream & operator<<(std::ostream &os, const SHOT352 &p)
const Eigen::Map< const Eigen::Vector3f > getXAxisVector3fMap() const
friend std::ostream & operator<<(std::ostream &os, const PointWithScale &p)
A point structure representing the Point Feature Histogram with colors (PFHRGB).
Metafunction to check if a given point type has intensity field.
float principal_curvature_z
A point structure representing Euclidean xyz coordinates, and the intensity value.
Eigen::Map< Eigen::Array3f > Array3fMap
friend std::ostream & operator<<(std::ostream &os, const PointUV &p)
PointXYZINormal(float _x, float _y, float _z, float _intensity=0.f)
PointXYZLNormal(float _x, float _y, float _z, std::uint32_t _label=0.f)
static int descriptorSize()
Metafunction to check if a given point type has any of the given fields.
float principal_curvature_x
float principal_curvature_y
friend std::ostream & operator<<(std::ostream &os, const ESFSignature640 &p)
Metafunction to check if a given point type has x, y, and z fields.
PointXYZRGBL(const _PointXYZRGBL &p)
PointXYZHSV(float _h, float _s, float _v)
POINT_CLOUD_REGISTER_POINT_STRUCT(pcl::_PointXYZLAB,(float, x, x)(float, y, y)(float, z, z)(float, L, L)(float, a, a)(float, b, b)) namespace pcl
friend std::ostream & operator<<(std::ostream &os, const PPFSignature &p)
PointXYZRGBA(float _x, float _y, float _z)
A point structure representing Euclidean xyz coordinates.
A point structure representing Euclidean xyz coordinates, intensity, together with normal coordinates...
std::enable_if_t<!has_intensity_v< PointT >, bool > HasNoIntensity
MomentInvariants()=default
std::enable_if_t< has_xyz_v< PointT >, bool > HasXYZ
A point structure representing the Globally Aligned Spatial Distribution (GASD) shape and color descr...
static int descriptorSize()
A point structure representing an interest point with Euclidean xyz coordinates, and an interest valu...
PointXYZINormal(const _PointXYZINormal &p)
PointDEM(float _x, float _y, float _z, float _intensity, float _intensity_variance, float _height_variance)
friend std::ostream & operator<<(std::ostream &os, const GASDSignature984 &p)
const Eigen::Map< const Vector4c, Eigen::Aligned > Vector4cMapConst
A point structure representing the three moment invariants.
PointXYZLNormal(const _PointXYZLNormal &p)
const Eigen::Map< const Eigen::Vector3f > Vector3fMapConst
BRISKSignature512()=default
friend std::ostream & operator<<(std::ostream &os, const Intensity32u &p)
PointXYZL(std::uint32_t _label=0)
std::enable_if_t< has_intensity_v< PointT >, bool > HasIntensity
Eigen::Map< Eigen::Vector3f > getYAxisVector3fMap()
PointXYZI(const _PointXYZI &p)
const Eigen::Map< const Eigen::Matrix3f > getMatrix3fMap() const
static int descriptorSize()
friend std::ostream & operator<<(std::ostream &os, const PointXYZINormal &p)
MomentInvariants(float _j1, float _j2, float _j3)
constexpr auto has_curvature_v
A point structure representing the grayscale intensity in single-channel images.
PointUV(float _u, float _v)
CPPFSignature(float _alpha=0.f)
GRSDSignature21()=default
friend std::ostream & operator<<(std::ostream &os, const PointXYZLNormal &p)
PointXYZHSV(const _PointXYZHSV &p)
static int descriptorSize()
std::uint8_t boundary_point
A point structure representing the generic Signature of Histograms of OrienTations (SHOT) - shape onl...
static int descriptorSize()
PointXYZLNormal(float _x, float _y, float _z, std::uint32_t _label, float n_x, float n_y, float n_z, float _curvature=0.f)
Axis(float n_x, float n_y, float n_z)
PointSurfel(const _PointSurfel &p)
friend std::ostream & operator<<(std::ostream &os, const RGB &p)
friend std::ostream & operator<<(std::ostream &os, const GRSDSignature21 &p)
static int descriptorSize()
PointXYZRGBL(std::uint32_t _label=0)
int octave
octave (pyramid layer) from which the keypoint has been extracted.
A structure to store if a point in a range image lies on a border between an obstacle and the backgro...
Metafunction to check if a given point type has all given fields.
friend std::ostream & operator<<(std::ostream &os, const PointWithRange &p)
friend std::ostream & operator<<(std::ostream &os, const BorderDescription &p)
ReferenceFrame(const _ReferenceFrame &p)
A point structure representing Euclidean xyz coordinates, together with normal coordinates and the su...
Eigen::Map< Eigen::Array4f, Eigen::Aligned > Array4fMap
PPFRGBSignature(float _alpha=0.f)
friend std::ostream & operator<<(std::ostream &os, const PPFRGBSignature &p)
const Eigen::Map< const Eigen::Array4f, Eigen::Aligned > Array4fMapConst
friend std::ostream & operator<<(std::ostream &os, const IntensityGradient &p)
PFHSignature125()=default
friend std::ostream & operator<<(std::ostream &os, const PointXYZL &p)
PrincipalRadiiRSD()=default
Intensity32u(std::uint32_t _intensity=0)
std::enable_if_t<!has_normal_v< PointT >, bool > HasNoNormal
friend std::ostream & operator<<(std::ostream &os, const Narf36 &p)
std::enable_if_t< has_xy_v< PointT >, bool > HasXY
Intensity32u(const _Intensity32u &p)
CPPFSignature(float _f1, float _f2, float _f3, float _f4, float _f5, float _f6, float _f7, float _f8, float _f9, float _f10, float _alpha=0.f)
A point structure representing the Globally Aligned Spatial Distribution (GASD) shape and color descr...
A point structure for storing the Point Pair Feature (CPPF) values.
A point structure representing Euclidean xyz coordinates together with the viewpoint from which it wa...
friend std::ostream & operator<<(std::ostream &os, const PrincipalRadiiRSD &p)
PointDEM(float _x, float _y, float _z)
A point structure representing the intensity gradient of an XYZI point cloud.
PointXYZRGBNormal(float _curvature=0.f)
std::enable_if_t< has_label_v< PointT >, bool > HasLabel
friend std::ostream & operator<<(std::ostream &os, const PFHSignature125 &p)
PPFSignature(float _f1, float _f2, float _f3, float _f4, float _alpha=0.f)
ESFSignature640()=default
A point structure representing the generic Signature of Histograms of OrienTations (SHOT) - shape+col...
std::enable_if_t<!has_curvature_v< PointT >, bool > HasNoCurvature
static int descriptorSize()
Normal(float _curvature=0.f)
PointXYZRGB(std::uint8_t _r, std::uint8_t _g, std::uint8_t _b)
PointXYZINormal(float _x, float _y, float _z, float _intensity, float n_x, float n_y, float n_z, float _curvature=0.f)
PointXYZRGBL(float _x, float _y, float _z, std::uint8_t _r, std::uint8_t _g, std::uint8_t _b, std::uint32_t _label=0)
BRISKSignature512(float _scale, float _orientation)
PointXYZRGBNormal(float _x, float _y, float _z, std::uint8_t _r, std::uint8_t _g, std::uint8_t _b, float n_x, float n_y, float n_z, float _curvature=0.f)
friend std::ostream & operator<<(std::ostream &os, const BRISKSignature512 &p)
friend std::ostream & operator<<(std::ostream &os, const PointXYZRGBNormal &p)
Metafunction to check if a given point type has label field.
GFPFHSignature16()=default
friend std::ostream & operator<<(std::ostream &os, const SHOT1344 &p)
PointXYZRGB(const _PointXYZRGB &p)
A point structure representing the Viewpoint Feature Histogram (VFH).
friend std::ostream & operator<<(std::ostream &os, const PFHRGBSignature250 &p)
ShapeContext1980()=default
A point structure representing a 3-D position and scale.
A point structure representing the minimum and maximum surface radii (in meters) computed using RSD...
Eigen::Matrix< std::uint8_t, 4, 1 > Vector4c
A point structure representing the Narf descriptor.
const Eigen::Map< const Vector3c > Vector3cMapConst
A point structure representing Euclidean xyz coordinates, and the RGB color.
A point structure representing the principal curvatures and their magnitudes.
Metafunction to check if a given point type has a given field.
PointWithRange(const _PointWithRange &p)
Eigen::Map< Vector4c, Eigen::Aligned > Vector4cMap
PointWithScale(const _PointWithScale &p)
PointXYZHSV(float _x, float _y, float _z, float _h, float _s, float _v)
friend std::ostream & operator<<(std::ostream &os, const VFHSignature308 &p)
A point structure representing the Point Feature Histogram (PFH).
static int descriptorSize()
Narf36(float _x, float _y, float _z, float _roll, float _pitch, float _yaw)
PointWithViewpoint(const _PointWithViewpoint &p)
PointNormal(float _curvature=0.f)
Intensity8u(std::uint8_t _intensity=0)
A point structure representing the Ensemble of Shape Functions (ESF).
FPFHSignature33()=default
static int descriptorSize()
const Eigen::Map< const Eigen::Array3f > Array3fMapConst
PrincipalCurvatures(float _x, float _y, float _z)
A point structure representing the Globally Aligned Spatial Distribution (GASD) shape descriptor...
Intensity(const _Intensity &p)
friend std::ostream & operator<<(std::ostream &os, const Label &p)
PointXYZLNormal(std::uint32_t _label=0)
static int descriptorSize()
A point structure representing the Global Radius-based Surface Descriptor (GRSD). ...
friend std::ostream & operator<<(std::ostream &os, const NormalBasedSignature12 &p)
Boundary(std::uint8_t _boundary=0)
std::enable_if_t< has_normal_v< PointT >, bool > HasNormal
PointXYZL(const _PointXYZL &p)
IntensityGradient(float _x, float _y, float _z)
RGB(std::uint8_t _r, std::uint8_t _g, std::uint8_t _b)
A surfel, that is, a point structure representing Euclidean xyz coordinates, together with normal coo...
Eigen::Map< Eigen::Vector4f, Eigen::Aligned > Vector4fMap
Eigen::Matrix< std::uint8_t, 3, 1 > Vector3c
PointNormal(const _PointNormal &p)
friend std::ostream & operator<<(std::ostream &os, const Intensity &p)
static int descriptorSize()
A point structure representing Euclidean xyz coordinates, and the RGB color, together with normal coo...
A point structure for storing the Point Pair Feature (PPF) values.
static int descriptorSize()
PointXY(float _x, float _y)
NormalBasedSignature12()=default
BorderDescription()=default
const Eigen::Map< const Eigen::Vector3f > getYAxisVector3fMap() const
Eigen::Map< Eigen::Matrix3f > getMatrix3fMap()
A point structure for storing the Point Pair Color Feature (PPFRGB) values.