38 #ifndef PCL_RANGE_IMAGE_H_
39 #define PCL_RANGE_IMAGE_H_
41 #include <pcl/point_cloud.h>
42 #include <pcl/pcl_macros.h>
43 #include <pcl/point_types.h>
44 #include <pcl/common/common_headers.h>
45 #include <pcl/common/vector_average.h>
61 typedef boost::shared_ptr<RangeImage>
Ptr;
62 typedef boost::shared_ptr<const RangeImage>
ConstPtr;
89 getMaxAngleSize (
const Eigen::Affine3f& viewer_pose,
const Eigen::Vector3f& center,
96 static inline Eigen::Vector3f
103 PCL_EXPORTS
static void
105 Eigen::Affine3f& transformation);
112 template <
typename Po
intCloudTypeWithViewpo
ints>
static Eigen::Vector3f
119 PCL_EXPORTS
static void
145 template <
typename Po
intCloudType>
void
148 const Eigen::Affine3f& sensor_pose = Eigen::Affine3f::Identity (),
150 float min_range=0.0f,
int border_size=0);
169 template <
typename Po
intCloudType>
void
173 const Eigen::Affine3f& sensor_pose = Eigen::Affine3f::Identity (),
175 float noise_level=0.0f,
float min_range=0.0f,
int border_size=0);
192 template <
typename Po
intCloudType>
void
194 const Eigen::Vector3f& point_cloud_center,
float point_cloud_radius,
195 const Eigen::Affine3f& sensor_pose = Eigen::Affine3f::Identity (),
197 float noise_level=0.0f,
float min_range=0.0f,
int border_size=0);
218 template <
typename Po
intCloudType>
void
220 float angular_resolution_x,
float angular_resolution_y,
221 const Eigen::Vector3f& point_cloud_center,
float point_cloud_radius,
222 const Eigen::Affine3f& sensor_pose = Eigen::Affine3f::Identity (),
224 float noise_level=0.0f,
float min_range=0.0f,
int border_size=0);
241 template <
typename Po
intCloudTypeWithViewpo
ints>
void
243 float max_angle_width,
float max_angle_height,
245 float min_range=0.0f,
int border_size=0);
265 template <
typename Po
intCloudTypeWithViewpo
ints>
void
267 float angular_resolution_x,
float angular_resolution_y,
268 float max_angle_width,
float max_angle_height,
270 float min_range=0.0f,
int border_size=0);
280 createEmpty (
float angular_resolution,
const Eigen::Affine3f& sensor_pose=Eigen::Affine3f::Identity (),
295 createEmpty (
float angular_resolution_x,
float angular_resolution_y,
296 const Eigen::Affine3f& sensor_pose=Eigen::Affine3f::Identity (),
312 template <
typename Po
intCloudType>
void
313 doZBuffer (
const PointCloudType& point_cloud,
float noise_level,
314 float min_range,
int& top,
int& right,
int& bottom,
int& left);
317 template <
typename Po
intCloudType>
void
328 cropImage (
int border_size=0,
int top=-1,
int right=-1,
int bottom=-1,
int left=-1);
339 inline const Eigen::Affine3f&
349 inline const Eigen::Affine3f&
389 getPoint (
int image_x,
int image_y)
const;
393 getPoint (
int image_x,
int image_y);
397 getPoint (
float image_x,
float image_y)
const;
401 getPoint (
float image_x,
float image_y);
418 getPoint (
int image_x,
int image_y, Eigen::Vector3f& point)
const;
422 getPoint (
int index, Eigen::Vector3f& point)
const;
425 inline const Eigen::Map<const Eigen::Vector3f>
429 inline const Eigen::Map<const Eigen::Vector3f>
445 calculate3DPoint (
float image_x,
float image_y,
float range, Eigen::Vector3f& point)
const;
448 calculate3DPoint (
float image_x,
float image_y, Eigen::Vector3f& point)
const;
456 getImagePoint (
const Eigen::Vector3f& point,
float& image_x,
float& image_y,
float& range)
const;
460 getImagePoint (
const Eigen::Vector3f& point,
int& image_x,
int& image_y,
float& range)
const;
464 getImagePoint (
const Eigen::Vector3f& point,
float& image_x,
float& image_y)
const;
468 getImagePoint (
const Eigen::Vector3f& point,
int& image_x,
int& image_y)
const;
472 getImagePoint (
float x,
float y,
float z,
float& image_x,
float& image_y,
float& range)
const;
476 getImagePoint (
float x,
float y,
float z,
float& image_x,
float& image_y)
const;
480 getImagePoint (
float x,
float y,
float z,
int& image_x,
int& image_y)
const;
503 real2DToInt2D (
float x,
float y,
int& xInt,
int& yInt)
const;
529 getNormal (
int x,
int y,
int radius, Eigen::Vector3f& normal,
int step_size=1)
const;
534 int no_of_nearest_neighbors, Eigen::Vector3f& normal,
int step_size=1)
const;
539 int no_of_nearest_neighbors, Eigen::Vector3f& normal,
540 Eigen::Vector3f* point_on_plane=NULL,
int step_size=1)
const;
550 int no_of_closest_neighbors,
int step_size,
551 float& max_closest_neighbor_distance_squared,
552 Eigen::Vector3f& normal, Eigen::Vector3f& mean, Eigen::Vector3f& eigen_values,
553 Eigen::Vector3f* normal_all_neighbors=NULL,
554 Eigen::Vector3f* mean_all_neighbors=NULL,
555 Eigen::Vector3f* eigen_values_all_neighbors=NULL)
const;
594 float*& acuteness_value_image_y)
const;
613 getSurfaceAngleChange (
int x,
int y,
int radius,
float& angle_change_x,
float& angle_change_y)
const;
621 getCurvature (
int x,
int y,
int radius,
int step_size)
const;
624 inline const Eigen::Vector3f
658 getSubImage (
int sub_image_image_offset_x,
int sub_image_image_offset_y,
int sub_image_width,
659 int sub_image_height,
int combine_pixels,
RangeImage& sub_image)
const;
685 inline Eigen::Affine3f
690 Eigen::Affine3f& transformation)
const;
698 float max_dist, Eigen::Affine3f& transformation)
const;
703 getIntegralImage (
float*& integral_image,
int*& valid_points_num_image)
const;
711 PCL_EXPORTS
virtual void
738 getOverlap (
const RangeImage& other_range_image,
const Eigen::Affine3f& relative_transformation,
739 int search_radius,
float max_distance,
int pixel_step=1)
const;
747 getViewingDirection (
const Eigen::Vector3f& point, Eigen::Vector3f& viewing_direction)
const;
755 PCL_EXPORTS
virtual void
810 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
819 os <<
"header: " << std::endl;
821 os <<
"points[]: " << r.
points.size () << std::endl;
822 os <<
"width: " << r.
width << std::endl;
823 os <<
"height: " << r.
height << std::endl;
824 os <<
"sensor_origin_: "
828 os <<
"sensor_orientation_: "
833 os <<
"is_dense: " << r.
is_dense << std::endl;
834 os <<
"angular resolution: "
843 #include <pcl/range_image/impl/range_image.hpp>
845 #endif //#ifndef PCL_RANGE_IMAGE_H_