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);
217 template <
typename Po
intCloudType>
void
219 float angular_resolution_x,
float angular_resolution_y,
220 const Eigen::Vector3f& point_cloud_center,
float point_cloud_radius,
221 const Eigen::Affine3f& sensor_pose = Eigen::Affine3f::Identity (),
223 float noise_level=0.0f,
float min_range=0.0f,
int border_size=0);
240 template <
typename Po
intCloudTypeWithViewpo
ints>
void
242 float max_angle_width,
float max_angle_height,
244 float min_range=0.0f,
int border_size=0);
264 template <
typename Po
intCloudTypeWithViewpo
ints>
void
266 float angular_resolution_x,
float angular_resolution_y,
267 float max_angle_width,
float max_angle_height,
269 float min_range=0.0f,
int border_size=0);
279 createEmpty (
float angular_resolution,
const Eigen::Affine3f& sensor_pose=Eigen::Affine3f::Identity (),
294 createEmpty (
float angular_resolution_x,
float angular_resolution_y,
295 const Eigen::Affine3f& sensor_pose=Eigen::Affine3f::Identity (),
311 template <
typename Po
intCloudType>
void
312 doZBuffer (
const PointCloudType& point_cloud,
float noise_level,
313 float min_range,
int& top,
int& right,
int& bottom,
int& left);
316 template <
typename Po
intCloudType>
void
327 cropImage (
int border_size=0,
int top=-1,
int right=-1,
int bottom=-1,
int left=-1);
338 inline const Eigen::Affine3f&
348 inline const Eigen::Affine3f&
388 getPoint (
int image_x,
int image_y)
const;
392 getPoint (
int image_x,
int image_y);
396 getPoint (
float image_x,
float image_y)
const;
400 getPoint (
float image_x,
float image_y);
417 getPoint (
int image_x,
int image_y, Eigen::Vector3f& point)
const;
421 getPoint (
int index, Eigen::Vector3f& point)
const;
424 inline const Eigen::Map<const Eigen::Vector3f>
428 inline const Eigen::Map<const Eigen::Vector3f>
444 calculate3DPoint (
float image_x,
float image_y,
float range, Eigen::Vector3f& point)
const;
447 calculate3DPoint (
float image_x,
float image_y, Eigen::Vector3f& point)
const;
455 getImagePoint (
const Eigen::Vector3f& point,
float& image_x,
float& image_y,
float& range)
const;
459 getImagePoint (
const Eigen::Vector3f& point,
int& image_x,
int& image_y,
float& range)
const;
463 getImagePoint (
const Eigen::Vector3f& point,
float& image_x,
float& image_y)
const;
467 getImagePoint (
const Eigen::Vector3f& point,
int& image_x,
int& image_y)
const;
471 getImagePoint (
float x,
float y,
float z,
float& image_x,
float& image_y,
float& range)
const;
475 getImagePoint (
float x,
float y,
float z,
float& image_x,
float& image_y)
const;
479 getImagePoint (
float x,
float y,
float z,
int& image_x,
int& image_y)
const;
502 real2DToInt2D (
float x,
float y,
int& xInt,
int& yInt)
const;
528 getNormal (
int x,
int y,
int radius, Eigen::Vector3f& normal,
int step_size=1)
const;
533 int no_of_nearest_neighbors, Eigen::Vector3f& normal,
int step_size=1)
const;
538 int no_of_nearest_neighbors, Eigen::Vector3f& normal,
539 Eigen::Vector3f* point_on_plane=NULL,
int step_size=1)
const;
549 int no_of_closest_neighbors,
int step_size,
550 float& max_closest_neighbor_distance_squared,
551 Eigen::Vector3f& normal, Eigen::Vector3f& mean, Eigen::Vector3f& eigen_values,
552 Eigen::Vector3f* normal_all_neighbors=NULL,
553 Eigen::Vector3f* mean_all_neighbors=NULL,
554 Eigen::Vector3f* eigen_values_all_neighbors=NULL)
const;
593 float*& acuteness_value_image_y)
const;
612 getSurfaceAngleChange (
int x,
int y,
int radius,
float& angle_change_x,
float& angle_change_y)
const;
620 getCurvature (
int x,
int y,
int radius,
int step_size)
const;
623 inline const Eigen::Vector3f
657 getSubImage (
int sub_image_image_offset_x,
int sub_image_image_offset_y,
int sub_image_width,
658 int sub_image_height,
int combine_pixels,
RangeImage& sub_image)
const;
684 inline Eigen::Affine3f
689 Eigen::Affine3f& transformation)
const;
697 float max_dist, Eigen::Affine3f& transformation)
const;
702 getIntegralImage (
float*& integral_image,
int*& valid_points_num_image)
const;
710 PCL_EXPORTS
virtual void
737 getOverlap (
const RangeImage& other_range_image,
const Eigen::Affine3f& relative_transformation,
738 int search_radius,
float max_distance,
int pixel_step=1)
const;
746 getViewingDirection (
const Eigen::Vector3f& point, Eigen::Vector3f& viewing_direction)
const;
754 PCL_EXPORTS
virtual void
809 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
818 os <<
"header: " << std::endl;
820 os <<
"points[]: " << r.
points.size () << std::endl;
821 os <<
"width: " << r.
width << std::endl;
822 os <<
"height: " << r.
height << std::endl;
823 os <<
"sensor_origin_: "
827 os <<
"sensor_orientation_: "
832 os <<
"is_dense: " << r.
is_dense << std::endl;
833 os <<
"angular resolution: "
842 #include <pcl/range_image/impl/range_image.hpp>
844 #endif //#ifndef PCL_RANGE_IMAGE_H_