RangeImage is derived from pcl/PointCloud and provides functionalities with focus on situations where a 3D scene was captured from a specific view point. More...
#include <range_image.h>
Public Types | |
typedef pcl::PointCloud < PointWithRange > | BaseClass |
enum | CoordinateFrame { CAMERA_FRAME = 0, LASER_FRAME = 1 } |
typedef std::vector < Eigen::Vector3f, Eigen::aligned_allocator < Eigen::Vector3f > > | VectorOfEigenVector3f |
Public Member Functions | |
void | calculate3DPoint (float image_x, float image_y, Eigen::Vector3f &point) const |
virtual void | calculate3DPoint (float image_x, float image_y, float range, Eigen::Vector3f &point) const |
void | calculate3DPoint (float image_x, float image_y, PointWithRange &point) const |
void | calculate3DPoint (float image_x, float image_y, float range, PointWithRange &point) const |
void | change3dPointsToLocalCoordinateFrame () |
This function sets the sensor pose to 0 and transforms all point positions to this local coordinate frame. | |
float | checkPoint (const Eigen::Vector3f &point, PointWithRange &point_in_image) const |
template<typename PointCloudType > | |
void | createFromPointCloud (const PointCloudType &point_cloud, float angular_resolution, float max_angle_width, float max_angle_height, const Eigen::Affine3f &sensor_pose, CoordinateFrame coordinate_frame=CAMERA_FRAME, float noise_level=0.0f, float min_range=0.0f, int border_size=0) |
Create the depth image from a point cloud. | |
template<typename PointCloudType > | |
void | createFromPointCloudWithKnownSize (const PointCloudType &point_cloud, float angular_resolution, const Eigen::Vector3f &point_cloud_center, float point_cloud_radius, const Eigen::Affine3f &sensor_pose, CoordinateFrame coordinate_frame=CAMERA_FRAME, float noise_level=0.0f, float min_range=0.0f, int border_size=0) |
Create the depth image from a point cloud, getting a hint about the size of the scene for faster calculation. | |
template<typename PointCloudTypeWithViewpoints > | |
void | createFromPointCloudWithViewpoints (const PointCloudTypeWithViewpoints &point_cloud, float angular_resolution, float max_angle_width, float max_angle_height, CoordinateFrame coordinate_frame=CAMERA_FRAME, float noise_level=0.0f, float min_range=0.0f, int border_size=0) |
Create the depth image from a point cloud, using the average viewpoint of the points (vp_x,vp_y,vp_z in the point type) in the point cloud as sensor pose (assuming a rotation of (0,0,0)). | |
void | cropImage (int border_size=0, int top=-1, int right=-1, int bottom=-1, int left=-1) |
Cut the range image to the minimal size so that it still contains all actual range readings. | |
Eigen::Affine3f | doIcp (const VectorOfEigenVector3f &points, const Eigen::Affine3f &initial_guess, int search_radius, float max_distance_start, float max_distance_end, int num_iterations) const |
void | get1dPointAverage (int x, int y, int delta_x, int delta_y, int no_of_points, PointWithRange &average_point) const |
float | getAcutenessValue (int x1, int y1, int x2, int y2) const |
Same as above. | |
float | getAcutenessValue (const PointWithRange &point1, const PointWithRange &point2) const |
void | getAcutenessValueImages (int pixel_distance, float *´ness_value_image_x, float *´ness_value_image_y) const |
void | getAnglesFromImagePoint (float image_x, float image_y, float &angle_x, float &angle_y) const |
float | getAngularResolution () const |
float | getAverageEuclideanDistance (int x, int y, int offset_x, int offset_y, int max_steps) const |
Doing the above for some steps in the given direction and averaging. | |
void | getBlurredImage (int blur_radius, RangeImage &range_image) const |
void | getBlurredImageUsingIntegralImage (int blur_radius, float *integral_image, int *valid_points_num_image, RangeImage &range_image) const |
float | getCurvature (int x, int y, int radius, int step_size) const |
const Eigen::Map< const Eigen::Vector3f > | getEigenVector3f (int index) const |
const Eigen::Map< const Eigen::Vector3f > | getEigenVector3f (int x, int y) const |
float | getEuclideanDistanceSquared (int x1, int y1, int x2, int y2) const |
virtual void | getHalfImage (RangeImage &half_image) const |
Get a range image with half the resolution. | |
int | getImageOffsetX () const |
Getter for image_offset_x_. | |
int | getImageOffsetY () const |
Getter for image_offset_y_. | |
void | getImagePoint (float x, float y, float z, int &image_x, int &image_y) const |
void | getImagePoint (float x, float y, float z, float &image_x, float &image_y) const |
void | getImagePoint (float x, float y, float z, float &image_x, float &image_y, float &range) const |
void | getImagePoint (const Eigen::Vector3f &point, int &image_x, int &image_y) const |
void | getImagePoint (const Eigen::Vector3f &point, float &image_x, float &image_y) const |
void | getImagePoint (const Eigen::Vector3f &point, int &image_x, int &image_y, float &range) const |
virtual void | getImagePoint (const Eigen::Vector3f &point, float &image_x, float &image_y, float &range) const |
void | getImagePointFromAngles (float angle_x, float angle_y, float &image_x, float &image_y) const |
float | getImpactAngle (int x1, int y1, int x2, int y2) const |
Same as above. | |
float | getImpactAngle (const PointWithRange &point1, const PointWithRange &point2) const |
float | getImpactAngleBasedOnLocalNormal (int x, int y, int radius) const |
float * | getImpactAngleImageBasedOnLocalNormals (int radius) const |
void | getIntegralImage (float *&integral_image, int *&valid_points_num_image) const |
float * | getInterpolatedSurfaceProjection (const Eigen::Vector3f &point, int pixel_size, float world_size) const |
Same as above, but using the local coordinate frame defined by point and the viewing direction. | |
float * | getInterpolatedSurfaceProjection (const Eigen::Affine3f &pose, int pixel_size, float world_size) const |
void | getMinMaxRanges (float &min_range, float &max_range) const |
Find the minimum and maximum range in the image. | |
virtual RangeImage * | getNew () const |
bool | getNormal (int x, int y, int radius, Eigen::Vector3f &normal, int step_size=1) const |
float | getNormalBasedAcutenessValue (int x, int y, int radius) const |
bool | getNormalBasedUprightTransformation (const Eigen::Vector3f &point, float max_dist, Eigen::Affine3f &transformation) const |
bool | getNormalForClosestNeighbors (int x, int y, Eigen::Vector3f &normal, int radius=2) const |
bool | getNormalForClosestNeighbors (int x, int y, int radius, const Eigen::Vector3f &point, int no_of_nearest_neighbors, Eigen::Vector3f &normal, Eigen::Vector3f *point_on_plane=NULL, int step_size=1) const |
bool | getNormalForClosestNeighbors (int x, int y, int radius, const PointWithRange &point, int no_of_nearest_neighbors, Eigen::Vector3f &normal, int step_size=1) const |
const PointWithRange & | getPoint (int index) const |
void | getPoint (int index, Eigen::Vector3f &point) const |
void | getPoint (int image_x, int image_y, Eigen::Vector3f &point) const |
PointWithRange & | getPoint (float image_x, float image_y) |
const PointWithRange & | getPoint (float image_x, float image_y) const |
PointWithRange & | getPoint (int image_x, int image_y) |
Non-const-version of getPoint. | |
const PointWithRange & | getPoint (int image_x, int image_y) const |
Return the 3D point with range at the given image position. | |
const PointWithRange & | getPointConsideringWrapAround (int image_x, int image_y) const |
PointWithRange & | getPointNoCheck (int image_x, int image_y) |
const PointWithRange & | getPointNoCheck (int image_x, int image_y) const |
Return the 3D point with range at the given image position. This methd performs no error checking to make sure the specified image position is inside of the image! | |
float | getRangeDifference (const Eigen::Vector3f &point) const |
void | getRangeImageWithSmoothedSurface (int radius, RangeImage &smoothed_range_image) const |
Project all points on the local plane approximation, thereby smoothing the surface of the scan. | |
float * | getRangesArray () const |
Get all the range values in one float array of size width*height. | |
void | getRotationToViewerCoordinateFrame (const Eigen::Vector3f &point, Eigen::Affine3f &transformation) const |
Same as above, but only returning the rotation. | |
const Eigen::Vector3f | getSensorPos () const |
Get the sensor position. | |
float | getSquaredDistanceOfNthNeighbor (int x, int y, int radius, int n, int step_size) const |
virtual void | getSubImage (int sub_image_image_offset_x, int sub_image_image_offset_y, int sub_image_width, int sub_image_height, int combine_pixels, RangeImage &sub_image) const |
void | getSurfaceAngleChange (int x, int y, int radius, float &angle_change_x, float &angle_change_y) const |
void | getSurfaceAngleChangeImages (int radius, float *&angle_change_image_x, float *&angle_change_image_y) const |
float | getSurfaceChange (int x, int y, int radius) const |
float * | getSurfaceChangeImage (int radius) const |
bool | getSurfaceInformation (int x, int y, int radius, const Eigen::Vector3f &point, int no_of_closest_neighbors, int step_size, float &max_closest_neighbor_distance_squared, Eigen::Vector3f &normal, Eigen::Vector3f &mean, Eigen::Vector3f &eigen_values, Eigen::Vector3f *normal_all_neighbors=NULL, Eigen::Vector3f *mean_all_neighbors=NULL, Eigen::Vector3f *eigen_values_all_neighbors=NULL) const |
const Eigen::Affine3f & | getTransformationToRangeImageSystem () const |
void | getTransformationToViewerCoordinateFrame (const Eigen::Vector3f &point, Eigen::Affine3f &transformation) const |
Same as above, using a reference for the retrurn value. | |
Eigen::Affine3f | getTransformationToViewerCoordinateFrame (const Eigen::Vector3f &point) const |
Get the local coordinate frame with 0,0,0 in point, upright and Z as the viewing direction. | |
const Eigen::Affine3f & | getTransformationToWorldSystem () const |
void | getViewingDirection (const Eigen::Vector3f &point, Eigen::Vector3f &viewing_direction) const |
bool | getViewingDirection (int x, int y, Eigen::Vector3f &viewing_direction) const |
void | integrateFarRanges (const PointCloud< PointWithViewpoint > &far_ranges) |
bool | isInImage (int x, int y) const |
bool | isMaxRange (int x, int y) const |
bool | isObserved (int x, int y) const |
bool | isValid (int index) const |
bool | isValid (int x, int y) const |
RangeImage () | |
void | real2DToInt2D (float x, float y, int &xInt, int &yInt) const |
void | recalculate3DPointPositions () |
void | reset () |
Reset all values to an empty range image. | |
void | setAngularResolution (float angular_resolution) |
Set the angular resolution of the range image. | |
void | setUnseenToMaxRange () |
~RangeImage () | |
Static Public Member Functions | |
static void | extractFarRanges (const sensor_msgs::PointCloud2 &point_cloud_data, PointCloud< PointWithViewpoint > &far_ranges) |
Check if the provided data includes far ranges and add them to far_ranges. | |
template<typename PointCloudTypeWithViewpoints > | |
static Eigen::Vector3f | getAverageViewPoint (const PointCloudTypeWithViewpoints &point_cloud) |
Get the average viewpoint of a point cloud where each point carries viewpoint information as vp_x, vp_y, vp_z. | |
static void | getCoordinateFrameTransformation (RangeImage::CoordinateFrame coordinate_frame, Eigen::Affine3f &transformation) |
Get the transformation that transforms the given coordinate frame into CAMERA_FRAME. | |
static Eigen::Vector3f | getEigenVector3f (const PointWithRange &point) |
Get Eigen::Vector3f from PointWithRange. | |
static float | getMaxAngleSize (const Eigen::Affine3f &viewer_pose, const Eigen::Vector3f ¢er, float radius) |
Get the size of a certain area when seen from the given pose. | |
Static Public Attributes | |
static bool | debug = false |
Protected Member Functions | |
template<typename PointCloudType > | |
void | doZBuffer (const PointCloudType &point_cloud, float noise_level, float min_range, int &top, int &right, int &bottom, int &left) |
Protected Attributes | |
float | angular_resolution_ |
float | angular_resolution_reciprocal_ |
int | image_offset_x_ |
int | image_offset_y_ |
Eigen::Affine3f | to_range_image_system_ |
Eigen::Affine3f | to_world_system_ |
PointWithRange | unobserved_point |
RangeImage is derived from pcl/PointCloud and provides functionalities with focus on situations where a 3D scene was captured from a specific view point.
Definition at line 60 of file range_image.h.
Reimplemented in pcl::RangeImagePlanar.
Definition at line 64 of file range_image.h.
typedef std::vector<Eigen::Vector3f, Eigen::aligned_allocator<Eigen::Vector3f> > pcl::RangeImage::VectorOfEigenVector3f |
Definition at line 65 of file range_image.h.
Definition at line 67 of file range_image.h.
pcl::RangeImage::RangeImage | ( | ) |
Constructor
Definition at line 79 of file range_image.cpp.
pcl::RangeImage::~RangeImage | ( | ) |
Destructor
Definition at line 87 of file range_image.cpp.
void pcl::RangeImage::calculate3DPoint | ( | float | image_x, | |
float | image_y, | |||
Eigen::Vector3f & | point | |||
) | const [inline] |
Calculate the 3D point according to the given image point and the range value at the closest pixel
Definition at line 506 of file range_image.hpp.
void pcl::RangeImage::calculate3DPoint | ( | float | image_x, | |
float | image_y, | |||
float | range, | |||
Eigen::Vector3f & | point | |||
) | const [inline, virtual] |
Calculate the 3D point according to the given image point and range
Reimplemented in pcl::RangeImagePlanar.
Definition at line 493 of file range_image.hpp.
void pcl::RangeImage::calculate3DPoint | ( | float | image_x, | |
float | image_y, | |||
PointWithRange & | point | |||
) | const [inline] |
Calculate the 3D point according to the given image point and the range value at the closest pixel
Definition at line 523 of file range_image.hpp.
void pcl::RangeImage::calculate3DPoint | ( | float | image_x, | |
float | image_y, | |||
float | range, | |||
PointWithRange & | point | |||
) | const [inline] |
Calculate the 3D point according to the given image point and range
Definition at line 514 of file range_image.hpp.
void pcl::RangeImage::change3dPointsToLocalCoordinateFrame | ( | ) |
This function sets the sensor pose to 0 and transforms all point positions to this local coordinate frame.
Definition at line 518 of file range_image.cpp.
float pcl::RangeImage::checkPoint | ( | const Eigen::Vector3f & | point, | |
PointWithRange & | point_in_image | |||
) | const [inline] |
point_in_image will be the point in the image at the position the given point would be. Returns the range of the given point.
Definition at line 302 of file range_image.hpp.
void pcl::RangeImage::createFromPointCloud | ( | const PointCloudType & | point_cloud, | |
float | angular_resolution, | |||
float | max_angle_width, | |||
float | max_angle_height, | |||
const Eigen::Affine3f & | sensor_pose, | |||
RangeImage::CoordinateFrame | coordinate_frame = CAMERA_FRAME , |
|||
float | noise_level = 0.0f , |
|||
float | min_range = 0.0f , |
|||
int | border_size = 0 | |||
) | [inline] |
Create the depth image from a point cloud.
point_cloud | the input point cloud | |
angular_resolution | the angle between each sample in the depth image | |
max_angle_width | an angle defining the horizontal bounds of the sensor | |
max_angle_height | an angle defining the vertical bounds of the sensor | |
sensor_pose | an affine matrix defining the pose of the sensor | |
coordinate_frame | the coordinate frame (defaults to CAMERA_FRAME) | |
noise_level | - The distance in meters inside of which the z-buffer will not use the minimum, but the mean of the points. If 0.0 it is equivalent to a normal z-buffer and will always take the minimum per cell. | |
min_range | the minimum visible range (defaults to 0) | |
border_size | the border size (defaults to 0) |
Definition at line 46 of file range_image.hpp.
void pcl::RangeImage::createFromPointCloudWithKnownSize | ( | const PointCloudType & | point_cloud, | |
float | angular_resolution, | |||
const Eigen::Vector3f & | point_cloud_center, | |||
float | point_cloud_radius, | |||
const Eigen::Affine3f & | sensor_pose, | |||
RangeImage::CoordinateFrame | coordinate_frame = CAMERA_FRAME , |
|||
float | noise_level = 0.0f , |
|||
float | min_range = 0.0f , |
|||
int | border_size = 0 | |||
) | [inline] |
Create the depth image from a point cloud, getting a hint about the size of the scene for faster calculation.
point_cloud | the input point cloud | |
angular_resolution | the angle between each sample in the depth image | |
point_cloud_center | the center of bounding sphere | |
point_cloud_radius | the radius of the bounding sphere | |
sensor_pose | an affine matrix defining the pose of the sensor | |
coordinate_frame | the coordinate frame (defaults to CAMERA_FRAME) | |
noise_level | - The distance in meters inside of which the z-buffer will not use the minimum, but the mean of the points. If 0.0 it is equivalent to a normal z-buffer and will always take the minimum per cell. | |
min_range | the minimum visible range (defaults to 0) | |
border_size | the border size (defaults to 0) |
Definition at line 98 of file range_image.hpp.
void pcl::RangeImage::createFromPointCloudWithViewpoints | ( | const PointCloudTypeWithViewpoints & | point_cloud, | |
float | angular_resolution, | |||
float | max_angle_width, | |||
float | max_angle_height, | |||
RangeImage::CoordinateFrame | coordinate_frame = CAMERA_FRAME , |
|||
float | noise_level = 0.0f , |
|||
float | min_range = 0.0f , |
|||
int | border_size = 0 | |||
) | [inline] |
Create the depth image from a point cloud, using the average viewpoint of the points (vp_x,vp_y,vp_z in the point type) in the point cloud as sensor pose (assuming a rotation of (0,0,0)).
point_cloud | the input point cloud | |
angular_resolution | the angle between each sample in the depth image | |
max_angle_width | an angle defining the horizontal bounds of the sensor | |
max_angle_height | an angle defining the vertical bounds of the sensor | |
coordinate_frame | the coordinate frame (defaults to CAMERA_FRAME) | |
noise_level | - The distance in meters inside of which the z-buffer will not use the minimum, but the mean of the points. If 0.0 it is equivalent to a normal z-buffer and will always take the minimum per cell. | |
min_range | the minimum visible range (defaults to 0) | |
border_size | the border size (defaults to 0) |
Definition at line 83 of file range_image.hpp.
void pcl::RangeImage::cropImage | ( | int | border_size = 0 , |
|
int | top = -1 , |
|||
int | right = -1 , |
|||
int | bottom = -1 , |
|||
int | left = -1 | |||
) |
Cut the range image to the minimal size so that it still contains all actual range readings.
border_size | allows increase from the minimal size by the specified number of pixels (defaults to 0) | |
top | if positive, this value overrides the position of the top edge (defaults to -1) | |
right | if positive, this value overrides the position of the right edge (defaults to -1) | |
bottom | if positive, this value overrides the position of the bottom edge (defaults to -1) | |
left | if positive, this value overrides the position of the left edge (defaults to -1) |
Definition at line 142 of file range_image.cpp.
Eigen::Affine3f pcl::RangeImage::doIcp | ( | const VectorOfEigenVector3f & | points, | |
const Eigen::Affine3f & | initial_guess, | |||
int | search_radius, | |||
float | max_distance_start, | |||
float | max_distance_end, | |||
int | num_iterations | |||
) | const |
Perform ICP (Iterative closest point) on the given data
Definition at line 1473 of file range_image.cpp.
void pcl::RangeImage::doZBuffer | ( | const PointCloudType & | point_cloud, | |
float | noise_level, | |||
float | min_range, | |||
int & | top, | |||
int & | right, | |||
int & | bottom, | |||
int & | left | |||
) | [inline, protected] |
Definition at line 141 of file range_image.hpp.
void pcl::RangeImage::extractFarRanges | ( | const sensor_msgs::PointCloud2 & | point_cloud_data, | |
PointCloud< PointWithViewpoint > & | far_ranges | |||
) | [static] |
Check if the provided data includes far ranges and add them to far_ranges.
point_cloud_data | a PointCloud2 message containing the input cloud | |
far_ranges | the resulting cloud containing those points with far ranges |
Definition at line 1422 of file range_image.cpp.
void pcl::RangeImage::get1dPointAverage | ( | int | x, | |
int | y, | |||
int | delta_x, | |||
int | delta_y, | |||
int | no_of_points, | |||
PointWithRange & | average_point | |||
) | const [inline] |
Calculates the average 3D position of the no_of_points points described by the start point x,y in the direction delta. Returns a max range point (range=INFINITY) if the first point is max range and an unobserved point (range=-INFINITY) if non of the points is observed.
Definition at line 729 of file range_image.hpp.
float pcl::RangeImage::getAcutenessValue | ( | int | x1, | |
int | y1, | |||
int | x2, | |||
int | y2 | |||
) | const [inline] |
Same as above.
Definition at line 594 of file range_image.hpp.
float pcl::RangeImage::getAcutenessValue | ( | const PointWithRange & | point1, | |
const PointWithRange & | point2 | |||
) | const [inline] |
Calculate a score [0,1] that tells how acute the impact angle is (1.0f - getImpactAngle/90deg) will return -INFINITY if one of the points is unobserved
Definition at line 579 of file range_image.hpp.
void pcl::RangeImage::getAcutenessValueImages | ( | int | pixel_distance, | |
float *& | acuteness_value_image_x, | |||
float *& | acuteness_value_image_y | |||
) | const |
Calculate getAcutenessValue for every point
Definition at line 1321 of file range_image.cpp.
void pcl::RangeImage::getAnglesFromImagePoint | ( | float | image_x, | |
float | image_y, | |||
float & | angle_x, | |||
float & | angle_y | |||
) | const [inline] |
Get the angles corresponding to the given image point
Definition at line 531 of file range_image.hpp.
float pcl::RangeImage::getAngularResolution | ( | ) | const [inline] |
Getter for the angular resolution of the range image in radians per pixel
Definition at line 221 of file range_image.h.
float pcl::RangeImage::getAverageEuclideanDistance | ( | int | x, | |
int | y, | |||
int | offset_x, | |||
int | offset_y, | |||
int | max_steps | |||
) | const [inline] |
Doing the above for some steps in the given direction and averaging.
Definition at line 784 of file range_image.hpp.
Eigen::Vector3f pcl::RangeImage::getAverageViewPoint | ( | const PointCloudTypeWithViewpoints & | point_cloud | ) | [inline, static] |
Get the average viewpoint of a point cloud where each point carries viewpoint information as vp_x, vp_y, vp_z.
point_cloud | the input point cloud |
Definition at line 1052 of file range_image.hpp.
void pcl::RangeImage::getBlurredImage | ( | int | blur_radius, | |
RangeImage & | range_image | |||
) | const |
Get a blurred version of the range image using box filters
Definition at line 358 of file range_image.cpp.
void pcl::RangeImage::getBlurredImageUsingIntegralImage | ( | int | blur_radius, | |
float * | integral_image, | |||
int * | valid_points_num_image, | |||
RangeImage & | range_image | |||
) | const |
Get a blurred version of the range image using box filters on the provided integral image
Definition at line 311 of file range_image.cpp.
void pcl::RangeImage::getCoordinateFrameTransformation | ( | RangeImage::CoordinateFrame | coordinate_frame, | |
Eigen::Affine3f & | transformation | |||
) | [static] |
Get the transformation that transforms the given coordinate frame into CAMERA_FRAME.
coordinate_frame | the input coordinate frame | |
transformation | the resulting transformation that warps coordinate_frame into CAMERA_FRAME |
Definition at line 59 of file range_image.cpp.
float pcl::RangeImage::getCurvature | ( | int | x, | |
int | y, | |||
int | radius, | |||
int | step_size | |||
) | const [inline] |
Calculates the curvature in a point using pca
Definition at line 1027 of file range_image.hpp.
const Eigen::Map< const Eigen::Vector3f > pcl::RangeImage::getEigenVector3f | ( | int | index | ) | const [inline] |
Same as above
Definition at line 486 of file range_image.hpp.
const Eigen::Map< const Eigen::Vector3f > pcl::RangeImage::getEigenVector3f | ( | int | x, | |
int | y | |||
) | const [inline] |
Same as above
Definition at line 479 of file range_image.hpp.
Eigen::Vector3f pcl::RangeImage::getEigenVector3f | ( | const PointWithRange & | point | ) | [inline, static] |
Get Eigen::Vector3f from PointWithRange.
point | the input point |
Definition at line 722 of file range_image.hpp.
float pcl::RangeImage::getEuclideanDistanceSquared | ( | int | x1, | |
int | y1, | |||
int | x2, | |||
int | y2 | |||
) | const [inline] |
Get the squared euclidean distance between the two image points. Returns -INFINITY if one of the points was not observed
Definition at line 769 of file range_image.hpp.
void pcl::RangeImage::getHalfImage | ( | RangeImage & | half_image | ) | const [virtual] |
Get a range image with half the resolution.
Reimplemented in pcl::RangeImagePlanar.
Definition at line 416 of file range_image.cpp.
int pcl::RangeImage::getImageOffsetX | ( | ) | const [inline] |
Getter for image_offset_x_.
Definition at line 487 of file range_image.h.
int pcl::RangeImage::getImageOffsetY | ( | ) | const [inline] |
Getter for image_offset_y_.
Definition at line 490 of file range_image.h.
void pcl::RangeImage::getImagePoint | ( | float | x, | |
float | y, | |||
float | z, | |||
int & | image_x, | |||
int & | image_y | |||
) | const [inline] |
Same as above
Definition at line 254 of file range_image.hpp.
void pcl::RangeImage::getImagePoint | ( | float | x, | |
float | y, | |||
float | z, | |||
float & | image_x, | |||
float & | image_y | |||
) | const [inline] |
Same as above
Definition at line 246 of file range_image.hpp.
void pcl::RangeImage::getImagePoint | ( | float | x, | |
float | y, | |||
float | z, | |||
float & | image_x, | |||
float & | image_y, | |||
float & | range | |||
) | const [inline] |
Same as above
Definition at line 238 of file range_image.hpp.
void pcl::RangeImage::getImagePoint | ( | const Eigen::Vector3f & | point, | |
int & | image_x, | |||
int & | image_y | |||
) | const [inline] |
Same as above
Definition at line 293 of file range_image.hpp.
void pcl::RangeImage::getImagePoint | ( | const Eigen::Vector3f & | point, | |
float & | image_x, | |||
float & | image_y | |||
) | const [inline] |
Same as above
Definition at line 285 of file range_image.hpp.
void pcl::RangeImage::getImagePoint | ( | const Eigen::Vector3f & | point, | |
int & | image_x, | |||
int & | image_y, | |||
float & | range | |||
) | const [inline] |
Same as above
Definition at line 277 of file range_image.hpp.
void pcl::RangeImage::getImagePoint | ( | const Eigen::Vector3f & | point, | |
float & | image_x, | |||
float & | image_y, | |||
float & | range | |||
) | const [inline, virtual] |
Get imagePoint from 3D point in world coordinates
Reimplemented in pcl::RangeImagePlanar.
Definition at line 263 of file range_image.hpp.
void pcl::RangeImage::getImagePointFromAngles | ( | float | angle_x, | |
float | angle_y, | |||
float & | image_x, | |||
float & | image_y | |||
) | const [inline] |
Get the image point corresponding to the given angles
Definition at line 336 of file range_image.hpp.
float pcl::RangeImage::getImpactAngle | ( | int | x1, | |
int | y1, | |||
int | x2, | |||
int | y2 | |||
) | const [inline] |
Same as above.
Definition at line 540 of file range_image.hpp.
float pcl::RangeImage::getImpactAngle | ( | const PointWithRange & | point1, | |
const PointWithRange & | point2 | |||
) | const [inline] |
Calculate the impact angle based on the sensor position and the two given points - will return -INFINITY if one of the points is unobserved
Definition at line 549 of file range_image.hpp.
float pcl::RangeImage::getImpactAngleBasedOnLocalNormal | ( | int | x, | |
int | y, | |||
int | radius | |||
) | const [inline] |
Extract a local normal (with a heuristic not to include background points) and calculate the impact angle based on this
Definition at line 812 of file range_image.hpp.
float * pcl::RangeImage::getImpactAngleImageBasedOnLocalNormals | ( | int | radius | ) | const |
Uses the above function for every point in the image
Definition at line 1345 of file range_image.cpp.
void pcl::RangeImage::getIntegralImage | ( | float *& | integral_image, | |
int *& | valid_points_num_image | |||
) | const |
Get the integral image of the range values (used for fast blur operations). You are responsible for deleting it after usage!
Definition at line 266 of file range_image.cpp.
float * pcl::RangeImage::getInterpolatedSurfaceProjection | ( | const Eigen::Vector3f & | point, | |
int | pixel_size, | |||
float | world_size | |||
) | const |
Same as above, but using the local coordinate frame defined by point and the viewing direction.
Definition at line 1013 of file range_image.cpp.
float * pcl::RangeImage::getInterpolatedSurfaceProjection | ( | const Eigen::Affine3f & | pose, | |
int | pixel_size, | |||
float | world_size | |||
) | const |
Calculate a range patch as the z values of the coordinate frame given by pose. The patch will have size pixel_size x pixel_size and each pixel covers world_size/pixel_size meters in the world You are responsible for deleting the structure afterwards!
Definition at line 527 of file range_image.cpp.
float pcl::RangeImage::getMaxAngleSize | ( | const Eigen::Affine3f & | viewer_pose, | |
const Eigen::Vector3f & | center, | |||
float | radius | |||
) | [inline, static] |
Get the size of a certain area when seen from the given pose.
viewer_pose | an affine matrix defining the pose of the viewer | |
center | the center of the area | |
radius | the radius of the area |
Definition at line 715 of file range_image.hpp.
void pcl::RangeImage::getMinMaxRanges | ( | float & | min_range, | |
float & | max_range | |||
) | const |
Find the minimum and maximum range in the image.
Definition at line 502 of file range_image.cpp.
virtual RangeImage* pcl::RangeImage::getNew | ( | ) | const [inline, virtual] |
Return a newly created Range image. Can be reimplmented int derived classes like RangeImagePlanar to return an image of the same type.
Reimplemented in pcl::RangeImagePlanar.
Definition at line 599 of file range_image.h.
bool pcl::RangeImage::getNormal | ( | int | x, | |
int | y, | |||
int | radius, | |||
Eigen::Vector3f & | normal, | |||
int | step_size = 1 | |||
) | const [inline] |
Calculate the normal of an image point using the neighbors with a maximum pixel distance of radius. step_size determines how many pixels are used. 1 means all, 2 only every second, etc.. Returns false if it was unable to calculate a normal.
Definition at line 827 of file range_image.hpp.
float pcl::RangeImage::getNormalBasedAcutenessValue | ( | int | x, | |
int | y, | |||
int | radius | |||
) | const [inline] |
Calculate a score [0,1] that tells how acute the impact angle is (1.0f - getImpactAngle/90deg) This uses getImpactAngleBasedOnLocalNormal Will return -INFINITY if no normal could be calculated
Definition at line 853 of file range_image.hpp.
bool pcl::RangeImage::getNormalBasedUprightTransformation | ( | const Eigen::Vector3f & | point, | |
float | max_dist, | |||
Eigen::Affine3f & | transformation | |||
) | const |
Get a local coordinate frame at the given point based on the normal.
Definition at line 1023 of file range_image.cpp.
bool pcl::RangeImage::getNormalForClosestNeighbors | ( | int | x, | |
int | y, | |||
Eigen::Vector3f & | normal, | |||
int | radius = 2 | |||
) | const [inline] |
Same as above, using default values
Definition at line 873 of file range_image.hpp.
bool pcl::RangeImage::getNormalForClosestNeighbors | ( | int | x, | |
int | y, | |||
int | radius, | |||
const Eigen::Vector3f & | point, | |||
int | no_of_nearest_neighbors, | |||
Eigen::Vector3f & | normal, | |||
Eigen::Vector3f * | point_on_plane = NULL , |
|||
int | step_size = 1 | |||
) | const [inline] |
Same as above
Definition at line 1008 of file range_image.hpp.
bool pcl::RangeImage::getNormalForClosestNeighbors | ( | int | x, | |
int | y, | |||
int | radius, | |||
const PointWithRange & | point, | |||
int | no_of_nearest_neighbors, | |||
Eigen::Vector3f & | normal, | |||
int | step_size = 1 | |||
) | const [inline] |
Same as above, but only the no_of_nearest_neighbors points closest to the given point are considered.
Definition at line 865 of file range_image.hpp.
const PointWithRange & pcl::RangeImage::getPoint | ( | int | index | ) | const [inline] |
Return the 3d point with range at the given index (whereas index=y*width+x)
Definition at line 441 of file range_image.hpp.
void pcl::RangeImage::getPoint | ( | int | index, | |
Eigen::Vector3f & | point | |||
) | const [inline] |
Same as above
Definition at line 472 of file range_image.hpp.
void pcl::RangeImage::getPoint | ( | int | image_x, | |
int | image_y, | |||
Eigen::Vector3f & | point | |||
) | const [inline] |
Same as above
Definition at line 464 of file range_image.hpp.
PointWithRange & pcl::RangeImage::getPoint | ( | float | image_x, | |
float | image_y | |||
) | [inline] |
Non-const-version of the above
Definition at line 457 of file range_image.hpp.
const PointWithRange & pcl::RangeImage::getPoint | ( | float | image_x, | |
float | image_y | |||
) | const [inline] |
Return the 3d point with range at the given image position
Definition at line 448 of file range_image.hpp.
PointWithRange & pcl::RangeImage::getPoint | ( | int | image_x, | |
int | image_y | |||
) | [inline] |
Non-const-version of getPoint.
Definition at line 433 of file range_image.hpp.
const PointWithRange & pcl::RangeImage::getPoint | ( | int | image_x, | |
int | image_y | |||
) | const [inline] |
Return the 3D point with range at the given image position.
image_x | the x coordinate | |
image_y | the y coordinate |
Definition at line 410 of file range_image.hpp.
const PointWithRange & pcl::RangeImage::getPointConsideringWrapAround | ( | int | image_x, | |
int | image_y | |||
) | const [inline] |
Return the 3d point with range at the given image point. Additionally, if the given point is not an observed point if there might be a wrap around, e.g., we left the ride side of thed image and reentered on the left side (which might be the case in a 360deg 3D scan when we look at the local neighborhood of a point)
Definition at line 389 of file range_image.hpp.
PointWithRange & pcl::RangeImage::getPointNoCheck | ( | int | image_x, | |
int | image_y | |||
) | [inline] |
Non-const-version of getPointNoCheck
Definition at line 426 of file range_image.hpp.
const PointWithRange & pcl::RangeImage::getPointNoCheck | ( | int | image_x, | |
int | image_y | |||
) | const [inline] |
Return the 3D point with range at the given image position. This methd performs no error checking to make sure the specified image position is inside of the image!
image_x | the x coordinate | |
image_y | the y coordinate |
Definition at line 419 of file range_image.hpp.
float pcl::RangeImage::getRangeDifference | ( | const Eigen::Vector3f & | point | ) | const [inline] |
Returns the difference in range between the given point and the range of the point in the image at the position the given point would be. (Return value is point_in_image.range-given_point.range)
Definition at line 316 of file range_image.hpp.
void pcl::RangeImage::getRangeImageWithSmoothedSurface | ( | int | radius, | |
RangeImage & | smoothed_range_image | |||
) | const |
Project all points on the local plane approximation, thereby smoothing the surface of the scan.
Definition at line 1384 of file range_image.cpp.
float * pcl::RangeImage::getRangesArray | ( | ) | const |
Get all the range values in one float array of size width*height.
Definition at line 254 of file range_image.cpp.
void pcl::RangeImage::getRotationToViewerCoordinateFrame | ( | const Eigen::Vector3f & | point, | |
Eigen::Affine3f & | transformation | |||
) | const [inline] |
Same as above, but only returning the rotation.
Definition at line 1107 of file range_image.hpp.
const Eigen::Vector3f pcl::RangeImage::getSensorPos | ( | ) | const [inline] |
Get the sensor position.
Definition at line 603 of file range_image.hpp.
float pcl::RangeImage::getSquaredDistanceOfNthNeighbor | ( | int | x, | |
int | y, | |||
int | radius, | |||
int | n, | |||
int | step_size | |||
) | const [inline] |
Definition at line 979 of file range_image.hpp.
void pcl::RangeImage::getSubImage | ( | int | sub_image_image_offset_x, | |
int | sub_image_image_offset_y, | |||
int | sub_image_width, | |||
int | sub_image_height, | |||
int | combine_pixels, | |||
RangeImage & | sub_image | |||
) | const [virtual] |
Get a sub part of the complete image as a new range image.
sub_image_image_offset_x | - The x coordinate of the top left pixel of the sub image. This is always according to absolute 0,0 meaning -180°,-90° and it is already in the system of the new image, so the actual pixel used in the original image is combine_pixels*(image_offset_x-image_offset_x_) | |
sub_image_image_offset_y | - Same as image_offset_x for the y coordinate | |
sub_image_width | - width of the new image | |
sub_image_height | - height of the new image | |
combine_pixels | - shrinking factor, meaning the new angular resolution is combine_pixels times the old one | |
sub_image | - the output image |
Reimplemented in pcl::RangeImagePlanar.
Definition at line 458 of file range_image.cpp.
void pcl::RangeImage::getSurfaceAngleChange | ( | int | x, | |
int | y, | |||
int | radius, | |||
float & | angle_change_x, | |||
float & | angle_change_y | |||
) | const [inline] |
Calculates, how much the surface changes at a point. Returns an angle [0.0f, PI] for x and y direction. A return value of -INFINITY means that a point was unobserved.
Definition at line 610 of file range_image.hpp.
void pcl::RangeImage::getSurfaceAngleChangeImages | ( | int | radius, | |
float *& | angle_change_image_x, | |||
float *& | angle_change_image_y | |||
) | const |
Uses the above function for every point in the image
Definition at line 1104 of file range_image.cpp.
float pcl::RangeImage::getSurfaceChange | ( | int | x, | |
int | y, | |||
int | radius | |||
) | const |
Calculates, how much the surface changes at a point. Pi meaning a flat suface and 0.0f would be a needle point Calculates, how much the surface changes at a point. 1 meaning a 90deg angle and 0 a flat suface
float* pcl::RangeImage::getSurfaceChangeImage | ( | int | radius | ) | const |
Uses the above function for every point in the image
bool pcl::RangeImage::getSurfaceInformation | ( | int | x, | |
int | y, | |||
int | radius, | |||
const Eigen::Vector3f & | point, | |||
int | no_of_closest_neighbors, | |||
int | step_size, | |||
float & | max_closest_neighbor_distance_squared, | |||
Eigen::Vector3f & | normal, | |||
Eigen::Vector3f & | mean, | |||
Eigen::Vector3f & | eigen_values, | |||
Eigen::Vector3f * | normal_all_neighbors = NULL , |
|||
Eigen::Vector3f * | mean_all_neighbors = NULL , |
|||
Eigen::Vector3f * | eigen_values_all_neighbors = NULL | |||
) | const [inline] |
Same as above but extracts some more data and can also return the extracted information for all neighbors in radius if normal_all_neighbors is not NULL
Definition at line 893 of file range_image.hpp.
const Eigen::Affine3f& pcl::RangeImage::getTransformationToRangeImageSystem | ( | ) | const [inline] |
Getter for the transformation from the range image system (the sensor coordinate frame) into the world system
Definition at line 212 of file range_image.h.
void pcl::RangeImage::getTransformationToViewerCoordinateFrame | ( | const Eigen::Vector3f & | point, | |
Eigen::Affine3f & | transformation | |||
) | const [inline] |
Same as above, using a reference for the retrurn value.
Definition at line 1099 of file range_image.hpp.
Eigen::Affine3f pcl::RangeImage::getTransformationToViewerCoordinateFrame | ( | const Eigen::Vector3f & | point | ) | const [inline] |
Get the local coordinate frame with 0,0,0 in point, upright and Z as the viewing direction.
Definition at line 1090 of file range_image.hpp.
const Eigen::Affine3f& pcl::RangeImage::getTransformationToWorldSystem | ( | ) | const [inline] |
Getter for the transformation from the world system into the range image system (the sensor coordinate frame)
Definition at line 217 of file range_image.h.
void pcl::RangeImage::getViewingDirection | ( | const Eigen::Vector3f & | point, | |
Eigen::Vector3f & | viewing_direction | |||
) | const [inline] |
Get the viewing direction for the given point
Definition at line 1083 of file range_image.hpp.
bool pcl::RangeImage::getViewingDirection | ( | int | x, | |
int | y, | |||
Eigen::Vector3f & | viewing_direction | |||
) | const [inline] |
Get the viewing direction for the given point
Definition at line 1073 of file range_image.hpp.
void pcl::RangeImage::integrateFarRanges | ( | const PointCloud< PointWithViewpoint > & | far_ranges | ) |
Definition at line 106 of file range_image.cpp.
bool pcl::RangeImage::isInImage | ( | int | x, | |
int | y | |||
) | const [inline] |
Check if a point is inside of the image
Definition at line 351 of file range_image.hpp.
bool pcl::RangeImage::isMaxRange | ( | int | x, | |
int | y | |||
) | const [inline] |
Check if a point is a max range (range=INFINITY) - please check isInImage or isObserved first!
Definition at line 381 of file range_image.hpp.
bool pcl::RangeImage::isObserved | ( | int | x, | |
int | y | |||
) | const [inline] |
Check if a point is inside of the image and has either a finite range or a max reading (range=INFINITY)
Definition at line 372 of file range_image.hpp.
bool pcl::RangeImage::isValid | ( | int | index | ) | const [inline] |
Check if a point has a finite range
Definition at line 365 of file range_image.hpp.
bool pcl::RangeImage::isValid | ( | int | x, | |
int | y | |||
) | const [inline] |
Check if a point is inside of the image and has a finite range
Definition at line 358 of file range_image.hpp.
void pcl::RangeImage::real2DToInt2D | ( | float | x, | |
float | y, | |||
int & | xInt, | |||
int & | yInt | |||
) | const [inline] |
Transforms an image point in float values to an image point in int values
Definition at line 344 of file range_image.hpp.
void pcl::RangeImage::recalculate3DPointPositions | ( | ) |
Recalculate all 3D point positions according to their pixel position and range
Definition at line 235 of file range_image.cpp.
void pcl::RangeImage::reset | ( | ) |
Reset all values to an empty range image.
Definition at line 93 of file range_image.cpp.
void pcl::RangeImage::setAngularResolution | ( | float | angular_resolution | ) | [inline] |
Set the angular resolution of the range image.
angular_resolution | the new angular resolution (in radians per pixel) |
Definition at line 1115 of file range_image.hpp.
void pcl::RangeImage::setUnseenToMaxRange | ( | ) |
Sets all -INFINITY values to INFINITY
Definition at line 407 of file range_image.cpp.
float pcl::RangeImage::angular_resolution_ [protected] |
Angular resolution of the range image in radians per pixel
Definition at line 616 of file range_image.h.
float pcl::RangeImage::angular_resolution_reciprocal_ [protected] |
1.0/angular_resolution - provided for better performace of multiplication compared to division
Definition at line 617 of file range_image.h.
bool pcl::RangeImage::debug = false [static] |
Just for... well... debugging purposes. :-)
Definition at line 610 of file range_image.h.
int pcl::RangeImage::image_offset_x_ [protected] |
Definition at line 619 of file range_image.h.
int pcl::RangeImage::image_offset_y_ [protected] |
Position of the top left corner of the range image compared to an image of full size (360x180 degrees)
Definition at line 619 of file range_image.h.
Eigen::Affine3f pcl::RangeImage::to_range_image_system_ [protected] |
Inverse of to_world_system_
Definition at line 614 of file range_image.h.
Eigen::Affine3f pcl::RangeImage::to_world_system_ [protected] |
Inverse of to_range_image_system_
Definition at line 615 of file range_image.h.
PointWithRange pcl::RangeImage::unobserved_point [protected] |
This point is used to be able to return a reference to a non-existing point
Definition at line 621 of file range_image.h.