pcl

从源代码重写项目Laplace-Beltrami Operator的笔记——2

时光毁灭记忆、已成空白 提交于 2020-03-10 08:51:09
今天开始写 计算LB算子的class 的声明,其中阅读源代码时遇到一个问题: namespace pclbo { /*从输入的mesh数据中计算Laplace-Beltrami算子 */ # include <vector> # include <numeric> # include <Eigen/Sparse> # include <pcl/common/common_headers.h> # include <pcl/PolygonMesh.h> # include <pcl/conversions.h> class MeshLBOEstimation { public : /*空的构造函数*/ MeshLBOEstimation ( ) : input_mesh_ ( ) , area ( new std :: vector < double > ( ) ) { } /*空的析构函数*/ virtual ~ MeshLBOEstimation ( ) { } inline void setInputMesh ( const pcl :: PolygonMeshConstPtr & input ) { input_mesh_ = input ; } /*计算LB算子*/ void compute ( ) ; /** \brief Surface area */ double

PCL_点云分割_最小割算法

对着背影说爱祢 提交于 2020-03-10 04:06:28
普遍应用于前背景分割,立体视觉、抠图等。 GraphCuts图是在普通图的基础上多了2个顶点,这2个顶点分别用符号**”S”和”T”**表示,统称为终端顶点。其它所有的顶点都必须和这2个顶点相连形成边集合中的一部分。所以Graph Cuts中有两种顶点,也有两种边。 第一种顶点和边是:第一种普通顶点对应于图像中的每个像素。每两个邻域顶点(对应于图像中每两个邻域像素)的连接就是一条边。这种边也叫n-links。 第二种顶点和边是:除图像像素外,还有另外两个终端顶点,叫S(source:源点,取源头之意)和T(sink:汇点,取汇聚之意)。每个普通顶点和这2个终端顶点之间都有连接,组成第二种边。这种边也叫t-links。 PCL中实现最小割算法: (1)构造图:对于一个给出的点云,算法会以点云中每一个点,另加一个source(源点)、一个sink(汇点),作为GraphCut图的顶点;点云中每个点与其近邻连线所形成的边叫n-links,与sink、source连线形成的边叫t-links。 (2)对边赋权值: (3)最小割计算:将点云分为前景和背景。 代码: # include <iostream> # include <vector> # include <pcl/io/pcd_io.h> # include <pcl/point_types.h> # include <pcl

PCL中有哪些可用的PointT类型(1)

徘徊边缘 提交于 2020-03-09 09:01:27
博客转载自:http://www.pclcn.org/study/shownews.php?lang=cn&id=266 为了涵盖能想到的所有可能的情况,PCL中定义了大量的point类型。下面是一小段,在point_types.hpp中有完整目录,这个列表很重要,因为在定义你自己的类型之前,需要了解已有的类型,如果你需要的类型,已经存在于PCL,那么就不需要重复定义了。 PointXYZ–成员变量: float x, y, z; PointXYZ是使用最常见的一个点数据类型,因为它只包含三维xyz坐标信息,这三个浮点数附加一个浮点数来满足存储对齐,用户可利用points[i].data[0],或者points[i].x访问点的x坐标值。 union { float data[4]; struct { float x; float y; float z; }; }; PointXYZI–成员变量: float x, y, z, intensity; PointXYZI是一个简单的XYZ坐标加intensity的point类型,理想情况下,这四个变量将新建单独一个结构体,并且满足存储对齐,然而,由于point的大部分操作会把data[4]元素设置成0或1(用于变换),不能让intensity与xyz在同一个结构体中,如果这样的话其内容将会被覆盖。例如

PCL中有哪些可用的PointT类型(4)

↘锁芯ラ 提交于 2020-03-09 09:00:56
博客转载自:http://www.pclcn.org/study/shownews.php?lang=cn&id=269 PointWithViewpoint - float x, y, z, vp_x, vp_y, vp_z; PointWithViewpoint除了vp_x、vp_y和vp_z以三维点表示所获得的视点之外,其它与PointXYZI一样。 union { float data[4]; struct { float x; float y; float z; }; }; union { struct { float vp_x; float vp_y; float vp_z; }; float data_c[4]; }; MomentInvariants - float j1, j2, j3; MomentInvariants是一个包含采样曲面上面片的三个不变矩的point类型,描述面片上质量的分布情况。查看MomentInvariantsEstimation以获得更多信息。 struct { float j1,j2,j3; }; PrincipalRadiiRSD - float r_min, r_max; PrincipalRadiiRSD是一个包含曲面块上两个RSD半径的point类型,查看RSDEstimation以获得更多信息。 struct { float

PCL中有哪些可用的PointT类型(2)

自古美人都是妖i 提交于 2020-03-09 09:00:33
博客转载自:http://www.pclcn.org/study/shownews.php?lang=cn&id=267 PointXY-float x, y; 简单的二维x-y point结构 struct { float x; float y; }; InterestPoint-float x, y, z, strength; 除了strength表示关键点的强度的测量值,其它的和PointXYZI类似。 union { float data[4]; struct { float x; float y; float z; }; }; union { struct { float strength; }; float data_c[4]; }; Normal - float normal[3], curvature; 另一个最常用的数据类型,Normal结构体表示给定点所在样本曲面上的法线方向,以及对应曲率的测量值(通过曲面块特征值之间关系获得——查看NormalEstimation类API以便获得更多信息,后续章节有介绍),由于在PCL中对曲面法线的操作很普遍,还是用第四个元素来占位,这样就兼容SSE和高效计算,例如,用户访问法向量的第一个坐标,可以通过points[i].data_n[0]或者points[i].normal[0]或者points[i].normal_x

PCL源码剖析之MarchingCubes算法

﹥>﹥吖頭↗ 提交于 2020-03-05 06:37:54
MarchingCubes算法简介 MarchingCubes(移动立方体)算法是目前三围数据场等值面生成中最常用的方法。它实际上是一个分而治之的方法,把等值面的抽取分布于每个体素中进行。对于每个被处理的体素,以三角面片逼近其内部的等值面片。每个体素是一个小立方体,构造三角面片的处理过程对每个体素都“扫描”一遍,就好像一个处理器在这些体素上移动一样,由此得名移动立方体算法。 MC算法主要有三步:1.将点云数据转换为体素网格数据;2.使用线性插值对每个体素抽取等值面;3.对等值面进行网格三角化 PCL源码剖析之MarchingCubesHoppe PCL中使用MarchingCubesHoppe类进行三维重建执行的函数体为performReconstruction(),其代码如下: template < typename PointNT> void pcl::MarchingCubes<PointNT>::performReconstruction (pcl::PolygonMesh &output) { if (!(iso_level_ >= 0 && iso_level_ < 1 )) { PCL_ERROR ( "[pcl::%s::performReconstruction] Invalid iso level %f! Please use a number between

图像处理技术之六:深度图像+彩色图像=点云图像

百般思念 提交于 2020-03-04 19:45:24
#include <pcl/visualization/cloud_viewer.h> #include <iostream> #include <pcl/io/io.h> #include <pcl/io/pcd_io.h> #include <opencv2/opencv.hpp> using namespace std; #pragma comment(linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"") int user_data; const double u0 = 319.52883; const double v0 = 271.61749; const double fx = 528.57523; const double fy = 527.57387; void viewerOneOff(pcl::visualization::PCLVisualizer& viewer) { viewer.setBackgroundColor(0.0, 0.0, 0.0); } int main() { pcl::PointCloud<pcl::PointXYZRGB> cloud_a; pcl::PointCloud<pcl::PointXYZRGB>::Ptr cloud(new pcl::PointCloud

TSDF学习:pcl::gpu::TsdfVolume Class Reference

爱⌒轻易说出口 提交于 2020-03-03 20:52:56
http://docs.pointclouds.org/trunk/classpcl_1_1gpu_1_1_tsdf_volume.html Public Member Functions TsdfVolume (const Eigen::Vector3i &resolution) Constructor. More... 构造函数 void setSize (const Eigen::Vector3f &size) Sets Tsdf volume size for each dimension. More... 设置Tsdf 立方体在X、Y、Z方向的大小,单位m void setTsdfTruncDist (float distance) Sets Tsdf truncation distance. More... 设置Tsdf 截断距离,其值必须大于 2 * volume_voxel_size DeviceArray2D < int > data () const Returns tsdf volume container that point to data in GPU memory. More... const Eigen::Vector3f & getSize () const Returns volume size in meters. More... 返回体积大小

车载点云道路部件——路灯提取尝试1

|▌冷眼眸甩不掉的悲伤 提交于 2020-03-03 03:43:44
1.渐进形态学滤波 #include <pcl/segmentation/progressive_morphological_filter.h> 重要参数: // 创建形态学滤波器对象 pcl::ProgressiveMorphologicalFilter<pcl::PointXYZ> pmf; pmf.setInputCloud(cloud); // 设置过滤点最大的窗口尺寸 pmf.setMaxWindowSize(20); // 设置计算高度阈值的斜率值 pmf.setSlope(1.0f); // 设置初始高度参数被认为是地面点 pmf.setInitialDistance(0.5f); // 设置被认为是地面点的最大高度 pmf.setMaxDistance(3.0f); pmf.extract(ground->indices); 2.体素滤波 #include <pcl/filters/voxel_grid.h> //体素滤波相关 体素栅格滤波 pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_filter(new pcl::PointCloud<pcl::PointXYZ>); pcl::VoxelGrid<pcl::PointXYZ> sor; sor.setInputCloud(cloud); sor.setLeafSize(0

PCL Viewer窗口操作的快捷键

…衆ロ難τιáo~ 提交于 2020-03-02 08:00:26
PCL Viewer窗口操作的一些快捷键 原文链接 p, P : switch to a point-based representation (以点为基准展示) w, W : switch to a wireframe-based representation (where available) (以线框为基准展示) s, S : switch to a surface-based representation (where available) (以平面为基准展示) j, J : take a .PNG snapshot of the current window view (将当前窗口截图为png格式,保存在bin目录下的Debug或者Release目录下) c, C : display current camera/window parameters (显示当前相机参数) +/ - : increment/decrement overall point size (放大或缩小当前所有点的尺寸) g, G : display scale grid (on/off) (开启标尺) u, U : display lookup table (on/off) (开启colorbar) r, R [+ ALT] : reset camera [to viewpoint = {0, 0,