在C ++中删除向量中3D点的重复项

a

由于计算的结果,我正在处理一个点云,即点的向量,其中包含重复的点(最多为云的10%)。

我的实现是根据x,y和z值对这些点进行排序,然后使用该std::unique函数。但是,即使排序本身似乎正在运行,生成的云仍包含重复项。

这是关键代码

bool comparePoint(pcl::PointXYZINormal p1, pcl::PointXYZINormal p2){
if (p1.x != p2.x)
    return p1.x > p2.x;
else if (p1.y != p2.y)
    return  p1.y > p2.y;
else
    return p1.z > p2.z;
}

bool equalPoint(pcl::PointXYZINormal p1, pcl::PointXYZINormal p2){
    if (p1.x == p2.x && p1.y == p2.y && p1.z == p2.z)
        return true;
    return false;
}
void KDsearch::cullDuplePoints(){
    std::sort(points.begin(), points.end(), comparePoint);
    std::unique(points.begin(), points.end(), equalPoint);
}

这是输出点云(x,y和z坐标)的部分提取:

1.96828 -535.09515 2794.8391
1.96627 -636.95264 2914.0366
1.96627 -636.95264 2914.0366
1.9651 108.77433 2350.9841
1.9651 108.77433 2350.9841
1.9642299 -206.19427 5618.4629
1.9642299 -206.19427 5618.4629
1.96386 -1880.3784 1346.0654

难道是独特的无法正常工作,还是我的同等条件有误?

这些点本身也包含法线坐标,但是它们对于剔除并不重要,因此我没有在代码中使用它们。

莫尔布德尼洛

std::unique不会删除任何内容,它只会移动元素,并返回修改后的集合中唯一时间间隔的迭代器“过去”。
(未指定返回的迭代器之后的集合的实际内容。)

您需要明确删除重复项:

std::sort(points.begin(), points.end(), comparePoint);
auto unique_end = std::unique(points.begin(), points.end(), equalPoint);
points.erase(unique_end, points.end());

您还需要注意浮点比较。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

删除结构c ++的向量中的重复项

来自分类Dev

在向量C ++中删除重复的int数

来自分类Dev

在向量C ++中删除重复的int数

来自分类Dev

在3D空间(C ++)中查找3D点和定向椭圆之间的距离

来自分类Dev

检查向量中的重复项并计算它们 C++

来自分类Dev

将向量中的重复项分组 - C++

来自分类Dev

为什么C ++中的3D向量在RAM中比一维向量大

来自分类Dev

C ++基于子字符串的部分匹配,将字符串作为向量中的重复项删除

来自分类Dev

排序并删除C中字符串中的重复项

来自分类Dev

从3个向量中删除重复项

来自分类Dev

在向量C ++的向量中删除向量

来自分类Dev

C ++删除一组列表中的重复项

来自分类Dev

从列表中删除重复项,同时保留最新的C#

来自分类Dev

C#从锯齿状数组中删除重复项

来自分类Dev

无法排序和删除LINQ C#中的重复项

来自分类Dev

C#从List <string []>中删除重复项

来自分类Dev

删除C ++ 11 try catch模式中的重复项

来自分类Dev

计算和删除数组c中的重复项

来自分类Dev

从列表中删除重复项,同时保留最新的C#

来自分类Dev

如何仅使用C ++中的迭代器正确地迭代3D向量?

来自分类Dev

C ++删除向量中的元素

来自分类Dev

如何从数组中删除元素而不删除重复项。在C#中

来自分类Dev

memcpy c中的3d指针

来自分类Dev

C ++中的3D游戏环境

来自分类Dev

指向C ++中的3D数组

来自分类Dev

如何在2D向量中删除列,C ++

来自分类Dev

如何在2D向量中删除列,C ++

来自分类Dev

在C中的数组中显示重复项

来自分类Dev

在C ++中删除重复的行