您好,我一直在尝试跨多个框架捕获点云。但是,在可视化数据时,这些点似乎以某种方式稍微偏移或突出。
这是从最后一帧开始的点云数据的样子(增加点的大小以提高可见性)
但是,当我尝试跨多个帧捕获数据时,数据似乎越来越靠近相机/向上延伸?
这里是同一对象,但点云存储在多个帧中
最后是最后一帧和多帧(按比例绘制的点)的并排比较
我希望会有更多的噪点,但是我不确定为什么当没有物体要跟踪时,数据似乎会越来越靠近相机。
我以为最初我可能需要通过最后一帧的姿势来变换点,但是在对pose.compose和pose.inverse()进行一些组合之后,情况似乎变得更糟了(点云看起来并不像原始形状)
这就是我获取点云的方式
ArrayList<PointCloud> PointClouds = new ArrayList();
int limit = 100;
int count = 0;
private void onUpdateFrame(FrameTime frameTime)
{
Frame frame = sceneView.getArFrame();
if(frame != null)
{
if(count < limit)
{
PointClouds.add(frame.acquirePointCloud());
}
else
{
SavePointClouds();
}
}
}
这就是我保存数据的方式(减去Android文件的内容)
private void SavePointClouds()
{
ArrayList<Vector3> Points = GetPointCloudData();
StringBuilder sb = new StringBuilder();
for (Vector3 point :Points)
{
sb.append(point.x);
sb.append(",");
sb.append(point.y);
sb.append(",");
sb.append(point.z);
sb.append("\n");
}
//This string is then written to the file
}
private ArrayList<Vector3> GetPointCloudData()
{
ArrayList<Vector3> Data = new ArrayList();
for(PointCloud pointCloud : PointClouds)
{
FloatBuffer points = pointCloud.getPoints();
while (points.hasRemaining())
{
float x = points.get();
float y = points.get();
float z = points.get();
float confidence = points.get();
Data.add(new Vector3(x,y,z));
}
}
return Data;
}
然后在CloudCompare中打开保存的文件以可视化数据。
在此先感谢您的帮助。