PCL源码分析:Ear Clipping三角化算法(阅读经典)

Posted 大鱼BIGFISH

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PCL源码分析:Ear Clipping三角化算法(阅读经典)相关的知识,希望对你有一定的参考价值。

文章目录

一、简介

该算法是一个多边形三角化的算法,多边形的一个顶点和它相邻两个顶点可以组成一个三角形,如果这个三角形内部不存在这个多边形的其他顶点,那么就可以把这个由该顶点及其相邻点组成的三角形当做一个“耳朵”,沿着这两个相邻顶点切下这个“耳朵”,然后重复上述的这个操作,直到这个多边形只剩3个顶点。这样,就可以把这个多边形完全分解为三角形。

二、源码分析

在了解了上述算法的大致思路之后,我们可以仔细看一下PCL中关于该算法的实现过程:

源代码文件:ear_clipping.cpp

void
pcl::EarClipping::triangulate (const

使用 PCL OctreePointCloudVoxelCentroid 栅格化点云

【中文标题】使用 PCL OctreePointCloudVoxelCentroid 栅格化点云【英文标题】:Rasterize pointcloud with PCL OctreePointCloudVoxelCentroid 【发布时间】:2021-06-11 12:10:28 【问题描述】:

我尝试通过 PCL::OctreePointCloudVoxelCentroid 栅格化 X-0-Z 点云,以便之后在点云上使用一些图像处理算法。但输出不是我所期望的。如果至少一个点在一个盒子里,我想要轴对齐八叉树中每个盒子的质心。八叉树的边界框应该很好定义。 对于测试,我使用 4 个点: (-1.8000000 1 -1.8000000) (-1.4000000 1 -1.4000000) (-0.5000000 1 0.4000000) (0.4000000 1 1.8000000)

我使用的代码:

pcl::octree::OctreePointCloudVoxelCentroid<pcl::PointXYZ> octree (1.0f);
octree.defineBoundingBox(-2.0,-1.5,-2.0,2.0,2.5,2.0);
octree.setInputCloud (fourpoints);
octree.addPointsFromInputCloud ();

黑色:原点;红色:算法输出;绿色:想要​​的点。 算法输出:坐标(-1.6 1 -1.6)(-0.5 1 0.4)(0.4 1 1.8)

【问题讨论】:

【参考方案1】:

OctreePointCloudOccupancy 而不是 OctreePointCloudVoxelCentroid 解决了我的问题。

【讨论】:

以上是关于PCL源码分析:Ear Clipping三角化算法(阅读经典)的主要内容,如果未能解决你的问题,请参考以下文章

PCL 计算空间三角形的面积

PCL:getCircumcircleRadius ❤️ 计算三角形外接圆半径

Pcl 点云有缩放怎么匹配

PCL系列——三维重构之移动立方体算法

基于区域增长(RegionGrowing)的分割算法——参照pcl源码

pcl介绍