pcl::PCA<PointT>::PCA (const pcl::PointCloud<PointT>& X, bool basis_only) { Base (); basis_only_ = basis_only; setInputCloud (X.makeShared ()); compute_done_ = initCompute (); }
void pcl::pcl_2d::morphology<PointT>::closingGray (pcl::PointCloud<PointT> &output){ PointCloudInPtr intermediate_output (new PointCloudIn); dilationGray (*intermediate_output); setInputCloud (intermediate_output); erosionGray (output); }
void FilterIndices::compute (const PointCloud3D& input, Indices& indices) { setInputCloud (input); compute (indices); }
template<typename PointInT, typename PointOutT> void pcl_1_8::Edge<PointInT, PointOutT>::detectEdgeCanny (pcl::PointCloud<PointOutT> &output) { float tHigh = hysteresis_threshold_high_; float tLow = hysteresis_threshold_low_; const int height = input_->height; const int width = input_->width; output.resize (height * width); output.height = height; output.width = width; //pcl::console::TicToc tt; //tt.tic (); // Noise reduction using gaussian blurring pcl::PointCloud<pcl::PointXYZI>::Ptr gaussian_kernel (new pcl::PointCloud<pcl::PointXYZI>); PointCloudInPtr smoothed_cloud (new PointCloudIn); kernel_.setKernelSize (3); kernel_.setKernelSigma (1.0); kernel_.setKernelType (kernel<pcl::PointXYZI>::GAUSSIAN); kernel_.fetchKernel (*gaussian_kernel); convolution_.setKernel (*gaussian_kernel); convolution_.setInputCloud (input_); convolution_.filter (*smoothed_cloud); //PCL_ERROR ("Gaussian blur: %g\n", tt.toc ()); tt.tic (); // Edge detection usign Sobel pcl::PointCloud<PointXYZIEdge>::Ptr edges (new pcl::PointCloud<PointXYZIEdge>); setInputCloud (smoothed_cloud); detectEdgeSobel (*edges); //PCL_ERROR ("Sobel: %g\n", tt.toc ()); tt.tic (); // Edge discretization discretizeAngles (*edges); //PCL_ERROR ("Discretize: %g\n", tt.toc ()); tt.tic (); // tHigh and non-maximal supression pcl::PointCloud<pcl::PointXYZI>::Ptr maxima (new pcl::PointCloud<pcl::PointXYZI>); suppressNonMaxima (*edges, *maxima, tLow); //PCL_ERROR ("NM suppress: %g\n", tt.toc ()); tt.tic (); // Edge tracing for (int i = 0; i < height; i++) { for (int j = 0; j < width; j++) { if ((*maxima)(j, i).intensity < tHigh || (*maxima)(j, i).intensity == std::numeric_limits<float>::max ()) continue; (*maxima)(j, i).intensity = std::numeric_limits<float>::max (); cannyTraceEdge ( 1, 0, i, j, *maxima); cannyTraceEdge (-1, 0, i, j, *maxima); cannyTraceEdge ( 1, 1, i, j, *maxima); cannyTraceEdge (-1, -1, i, j, *maxima); cannyTraceEdge ( 0, -1, i, j, *maxima); cannyTraceEdge ( 0, 1, i, j, *maxima); cannyTraceEdge (-1, 1, i, j, *maxima); cannyTraceEdge ( 1, -1, i, j, *maxima); } } //PCL_ERROR ("Edge tracing: %g\n", tt.toc ()); // Final thresholding for (size_t i = 0; i < input_->size (); ++i) { if ((*maxima)[i].intensity == std::numeric_limits<float>::max ()) output[i].magnitude = 255; else output[i].magnitude = 0; } }
void Filter::compute (const PointCloud3D& input, PointCloud3D& output) { setInputCloud (input); compute (output); }