我必须测量两个云的对应点的Z距离。我打算迭代一个云,并使用另一个云的相同X和Y计算Z坐标之间的距离。不幸的是,它不起作用,因为在第二个云中从来没有在这些X坐标处有一个点。我目前的解决办法是在第二个云中为第一个云的X搜索最近的点。它起作用了,但速度很慢。
是否有一种方法来对齐X和Y坐标点在定义的网格使用PCL?这样,我希望way合作伙伴能更好地匹配。
编辑 Ok,这里有一些图片和更多的解释。

顶视图

侧视
有马鞍和马背的扫描。两者都是独立的,但在Z轴中对齐,两者的Z轴都是平行的.我想要创建一个层的模型,它正好适合马鞍下(而不仅仅是一个转角垫)。
因此,给定层的厚度,我想迭代马鞍点,并找到与马背上相应点的Z距离。由于Y坐标是浮动的,在马匹上几乎从来没有一个点与马鞍上的XY相同。
我认为。如果我能用给定的密度对齐所有的点,那么马上就会有一个对应的XY点,在它上面的每一个马鞍点。
发布于 2014-06-06 21:03:27
我已经实现了一个概念的证明,并想要分享它。但是,我希望有一个“适当的”解决方案-- PCL函数。
bool alignToGrid( pcl::PointCloud<pcl::PointXYZRGBNormal>::Ptr cloud, QMap<QString, float > & grid, int density )
{
pcl::PointXYZRGBNormal p1;
p1.r=0;
p1.g=0;
p1.b=255;
QMap<QString, QList<float> > tmpGridMap;
for( std::vector<pcl::PointXYZRGBNormal, Eigen::aligned_allocator<pcl::PointXYZRGBNormal> >::iterator it1 = cloud->points.begin();
it1 != cloud->points.end(); it1++ )
{
p1.x = it1->x;
p1.y = it1->y;
p1.z = it1->z;
int gridx = p1.x*density;
int gridy = p1.y*density;
QString pos = QString("%1x%2").arg(gridx).arg(gridy);
tmpGridMap[pos].append(p1.z);
}
for (QMap<QString, QList<float> >::iterator it = tmpGridMap.begin(); it!=tmpGridMap.end(); ++it)
{
float meanZ=0;
foreach( float f, it.value() )
{
meanZ+=f;
}
meanZ /= it.value().size();
grid[it.key()] = meanZ;
}
return true;
}其思想是在云中迭代,只留下/创建点,XY坐标位于定义的网格上。密度为1000的Kinect云导致约1毫米网格。网格点周围的所有点都用于建立Z-平均值.云层仍未被改变。输出是XY位置到Z的映射。XY位置存储在字符串中(我知道)为x。使用这个映射,很容易在其他网格对齐云中找到对应的XY点。
现在我可以用任何密度绘制我的云图了。在图像中,例如1毫米和1厘米。


发布于 2014-06-07 12:08:15
我不太确定这是否是你的意思,但也许你所说的“网格”可能就是图像平面?因此,与使用3D点云不同,您可以获取深度映射/深度图像,并在相同的图像坐标下比较两个深度映射的值。这将假定录音已经对齐。
如果只有点云数据,就必须在飞机上执行投影(为此,您必须了解摄像机的本质)。
另一种选择可能是使用注册方法(例如ICP)对齐云。然后,您也可以得到距离之和对应的云点。
https://stackoverflow.com/questions/24079024
复制相似问题