void transpose_test() { int w = 5, h = 7; std::vector<ScalarType> s_normal(2 * w * h); viennacl::matrix<ScalarType> normal(w, 2 * h); viennacl::matrix<ScalarType> transp(h, 2 * w); for (unsigned int i = 0; i < s_normal.size(); i+=2) { s_normal[i] = i; s_normal[i+1] = i; } viennacl::fast_copy(&s_normal[0], &s_normal[0] + s_normal.size(), normal); std::cout << normal << std::endl; viennacl::linalg::transpose(normal); std::cout << normal << std::endl; }
void ConvexConnectedVoxels::segmentCloud( const pcl::PointCloud<PointT>::Ptr cloud, const std::vector<pcl::PointIndices> &indices, std::vector<pcl::PointCloud<PointT>::Ptr> &cloud_clusters, std::vector<pcl::PointCloud<pcl::Normal>::Ptr> &normal_clusters, pcl::PointCloud<pcl::PointXYZ>::Ptr centroids) { boost::mutex::scoped_lock lock(this->mutex_); pcl::ExtractIndices<PointT>::Ptr eifilter( new pcl::ExtractIndices<PointT>); eifilter->setInputCloud(cloud); for (int i = 0; i < indices.size(); i++) { pcl::PointIndices::Ptr index(new pcl::PointIndices()); index->indices = indices[i].indices; eifilter->setIndices(index); pcl::PointCloud<PointT>::Ptr tmp_cloud( new pcl::PointCloud<PointT>); eifilter->filter(*tmp_cloud); if (tmp_cloud->width > 0) { Eigen::Vector4f centroid; pcl::compute3DCentroid<PointT, float>(*cloud, *index, centroid); float ct_x = static_cast<float>(centroid[0]); float ct_y = static_cast<float>(centroid[1]); float ct_z = static_cast<float>(centroid[2]); if (!isnan(ct_x) && !isnan(ct_y) && !isnan(ct_z)) { pcl::PointCloud<pcl::Normal>::Ptr s_normal( new pcl::PointCloud<pcl::Normal>); this->estimatePointCloudNormals( tmp_cloud, s_normal, 40, 0.05, false); normal_clusters.push_back(s_normal); centroids->push_back(pcl::PointXYZ(ct_x, ct_y, ct_z)); cloud_clusters.push_back(tmp_cloud); } } } }