void pcl::SeededHueSegmentation::segment (PointIndices &indices_in, PointIndices &indices_out) { if (!initCompute () || (input_ != 0 && input_->points.empty ()) || (indices_ != 0 && indices_->empty ())) { indices_out.indices.clear (); return; } // Initialize the spatial locator if (!tree_) { if (input_->isOrganized ()) tree_.reset (new pcl::search::OrganizedNeighbor<PointXYZRGB> ()); else tree_.reset (new pcl::search::KdTree<PointXYZRGB> (false)); } // Send the input dataset to the spatial locator tree_->setInputCloud (input_); seededHueSegmentation (*input_, tree_, static_cast<float> (cluster_tolerance_), indices_in, indices_out, delta_hue_); deinitCompute (); }
void pcl::gpu::SeededHueSegmentation::segment (PointIndices &indices_in, PointIndices &indices_out) { // Initialize the GPU search tree if (!tree_) { tree_.reset (new pcl::gpu::Octree()); ///@todo what do we do if input isn't a PointXYZ cloud? tree_->setCloud(input_); } if (!tree_->isBuild()) { tree_->build(); } /* if(tree_->cloud_.size() != host_cloud.points.size ()) { PCL_ERROR("[pcl::gpu::SeededHueSegmentation] size of host cloud and device cloud don't match!\n"); return; } */ // Extract the actual clusters seededHueSegmentation (host_cloud_, tree_, cluster_tolerance_, indices_in, indices_out, delta_hue_); }