Проблема
Здравствуйте, я пытался захватить облако точек в нескольких кадрах.Однако при визуализации данных точки кажутся слегка смещенными или вытянутыми каким-либо образом.
Вот как выглядят данные облака точек из последнего кадра (размер точек увеличен для видимости)
Последний кадр
Однако, когда я пытаюсь захватить данные из нескольких кадров, кажется, что данные становятся ближе к камере / выдвигаются вверх?
Вот тот же объект, но точкаОблако хранится в нескольких кадрах
Несколько кадров
И, наконец, приведено параллельное сравнение последнего кадра и нескольких кадров (точки в масштабе)
Бок о бок
Я ожидаю, что там будет немного больше шума, но я не уверен, почему данные кажутся ближе к камере, когда над объектом ничего нетtrack.
Вещи, которые я пробовал
Сначала я подумал, что, возможно, мне понадобится преобразовать точки по позе последнего кадра, однако после нескольких комбинаций pose.compose and 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 для визуализацииdata.
Заранее спасибо за любую помощь.