keyframes.cpp
Go to the documentation of this file.
00001 
00005 /*****************************************************************************
00006 ** Includes
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 ** Namespaces
00016 *****************************************************************************/
00017 
00018 namespace qglv {
00019 
00020 /*****************************************************************************
00021 ** Implementation
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   // keyframe.gl_id_start = -1;
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); // make sure to convert away from char
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 } // namespace qglv


qglv_pcl
Author(s): Daniel Stonier
autogenerated on Sat Jun 18 2016 08:19:31