gpt4 book ai didi

c++ - 如何在PCL中增加积分

转载 作者:行者123 更新时间:2023-11-28 05:42:54 24 4
gpt4 key购买 nike

我有一组 3D 点云,我需要增长这些点。那样的话,我的意思是我希望这些点获得一些直径。如果可能的话,我想像正方形一样增长点,而不是圆形。这是检测算法的第一步。现在我有了 3D 点,但如果需要,我可以将它们转换为 2D。

这是一张图片,试图解释我想要实现的目标。也就是说,给定一个点(或一组点)展开它们。

enter image description here

谢谢你,亚历克斯。

最佳答案

你需要扩张过滤器。

如果你的云被设置为 bool 数组,其中 true 代表点,false 代表空,你的云的大小是 [width x height x depth] 并且数组的大小是 width * height * depth:

std::vector<bool> mask(width * height * depth);

点[x,y,z]由值mask[x + y * width + z * width * height]表示

下面是一个代码示例,用于扩展体积中的每个真值(您调用 Dialte3D 函数):

void DilateDirection(std::vector<bool> &mask, int dimension1, int dimension2, int dilateDimension3, 
int dim1offset, int dim2offset, int dim3offset, int radius)
{
for (int k = 0; k < dimension2; k++)
for (int j = 0; j < dimension1; j++)
{
int r = 0;
for (int i = 0; i < dilateDimension3; i++)
{
if (mask[i * dim3offset + j * dim1offset + k * dim2offset]) //start expanding
r = radius + 1;
else
r--;
if (r > 0)
mask[i * dim3offset + j * dim1offset + k * dim2offset] = true; //expand in + direction
}
r = 0;
for (int i = dilateDimension3 - 1; i >= 0; i--)
{
if (mask[i * dim3offset + j * dim1offset + k * dim2offset]) //start expanding
r = radius + 1;
else
r--;
if (r > 0)
mask[i * dim3offset + j * dim1offset + k * dim2offset] = true; //expand in - direction
}
}
}

void Dilate3D(std::vector<bool> &mask, int width, int height, int depth, int radius)
{
DilateDirection(mask, height, depth, width, width, width * height, 1, radius); //dilate by X
DilateDirection(mask, width, depth, height, 1, width * height, width, radius); //dilate by Y
DilateDirection(mask, width, height, depth, 1, width, width * height, radius); //dilate by Z
}

关于c++ - 如何在PCL中增加积分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36790176/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com