Go to the documentation of this file.00001
00005
00006
00007
00008
00009 #include "../../include/qglv/pcl.hpp"
00010 #include <pcl_conversions/pcl_conversions.h>
00011 #include <pcl/common/projection_matrix.h>
00012 #include <pcl/impl/point_types.hpp>
00013
00014
00015
00016
00017
00018 namespace qglv {
00019
00020
00021
00022
00023
00024 KeyFrame createKeyFrameFromPointCloud(
00025 const Sophus::SE3f& T_depth_rel_map,
00026 const std::shared_ptr<pcl::PCLPointCloud2>& point_cloud
00027 )
00028 {
00029 KeyFrame keyframe;
00030 _initKeyFrameFromPointCloud(keyframe, T_depth_rel_map, point_cloud);
00031 return keyframe;
00032 }
00033
00034 KeyFramePtr createKeyFramePtrFromPointCloud(
00035 const Sophus::SE3f& T_depth_rel_map,
00036 const std::shared_ptr<pcl::PCLPointCloud2>& point_cloud
00037 )
00038 {
00039 KeyFramePtr keyframe_ptr = std::make_shared<qglv::KeyFrame>();
00040 _initKeyFrameFromPointCloud(*keyframe_ptr, T_depth_rel_map, point_cloud);
00041 return keyframe_ptr;
00042 }
00043
00044 void _initKeyFrameFromPointCloud(
00045 KeyFrame& keyframe,
00046 const Sophus::SE3f& T_depth_rel_map,
00047 const std::shared_ptr<pcl::PCLPointCloud2>& point_cloud
00048 )
00049 {
00050 keyframe.T_frame_rel_map = T_depth_rel_map;
00051 keyframe.updated = true;
00052
00053 keyframe.pinned = false;
00054 keyframe.axis_colour_scheme = AxisColourBlue;
00055 keyframe.axis_scale_factor = 0.5;
00056
00057 std::shared_ptr<pcl::PointCloud<pcl::PointXYZ>> cloud(new pcl::PointCloud<pcl::PointXYZ>);
00058 pcl::fromPCLPointCloud2(*point_cloud, *cloud);
00059 keyframe.vertices.resize( cloud->size()*3 );
00060 keyframe.intensities.resize( cloud->size()*3 );
00061 float max_depth;
00062 for ( unsigned int i = 0; i < cloud->points.size(); ++i ) {
00063 keyframe.vertices[3*i] = cloud->points[i].x;
00064 keyframe.vertices[3*i+1] = cloud->points[i].y;
00065 keyframe.vertices[3*i+2] = cloud->points[i].z;
00066 max_depth = ( max_depth < cloud->points[i].z ) ? cloud->points[i].z : max_depth;
00067 }
00068 for ( unsigned int i = 0; i < cloud->points.size(); ++i ) {
00069 float r, g, b;
00070 normalisedValueToRGB((cloud->points[i].z/max_depth), r, g, b);
00071 keyframe.intensities[3*i] = 255*r;
00072 keyframe.intensities[3*i+1] = 255*g;
00073 keyframe.intensities[3*i+2] = 255*b;
00074 }
00075 }
00076
00077 }