PCL Изменить начальную позицию камеры - PullRequest
0 голосов
/ 26 марта 2019

Я пытаюсь использовать библиотеку PCL (для которой я новичок), чтобы получить изображение из неорганизованного облака точек, полученное из файла .las, который впоследствии будет преобразован в файл pcd для использования библиотекой PCL. Для визуализации облака точек я использовал пример кода, найденного здесь: https://github.com/UnaNancyOwen/Tutorials/blob/master/tutorials/range_image_border_extraction/range_image_border_extraction.cpp

Облако точек можно получить из: https://senseflycom.s3.amazonaws.com/datasets/concrete-bridge/concrete-bridge-column_densified_point_cloud.las

Для .las to .pcd я использовал https://github.com/murtiad/las2pcd

Положение камеры по умолчанию неправильное (мне нужно взаимодействовать с визуализатором с помощью мыши, чтобы достичь правильного положения), но качество правильное, и я могу вывести фотографию с помощью метода saveScreenshot.

Буду признателен за любые советы, я использую Ubuntu 18.04 и pcl1.8. Также рассмотрел каждый пример и существующий пост, который мне удалось найти на pcl-users.org. Я уже пробовал opencv, но его качество не подходит для неорганизованных облаков точек, насколько я могу судить.

Ситуация, с которой я сталкиваюсь:

а. Если я изменю малейший из параметров камеры, вызвав любую (или все) из этих функций, качество падает, и это выглядит как несфокусированное:

  pcl::visualization::PCLVisualizer viewer ("3D Viewer");
  viewer.setBackgroundColor (1, 1, 1);
  viewer.addCoordinateSystem (1.0f, "reference");
  /* Evil functions */
  viewer.initCameraParameters();
  viewer.setCameraPosition(0, -30, 0,    0, 0, 0,   0, 0, 1);
  viewer.setCameraFieldOfView(0.523599);
  viewer.setCameraClipDistances(0.00522511, 50);

б. Если я не изменяю ни один из параметров, качество остается, но мне нужно взаимодействовать с мышью, которой я намерен избегать

с. Даже после взаимодействия с мышью и изменения вида параметры камеры остаются неизменными (фактически этот пост использовался в цикле PCL: визуализация облака точек ):

  viewer.getCameras (cam);
  //--------------------
  // -----Main loop-----
  //--------------------
  while (!viewer.wasStopped ())
  {
//    range_image_borders_widget->spinOnce ();
    viewer.spinOnce ();
    pcl_sleep(0.5);
    cout << "Cam: " << endl
                 << " - pos: (" << cam[0].pos[0] << ", "    << cam[0].pos[1] << ", "    << cam[0].pos[2] << ")" << endl
                 << " - view: ("    << cam[0].view[0] << ", "   << cam[0].view[1] << ", "   << cam[0].view[2] << ")"    << endl
                 << " - focal: ("   << cam[0].focal[0] << ", "  << cam[0].focal[1] << ", "  << cam[0].focal[2] << ")"   << endl
                 << " - fovy: ("    << cam[0].fovy   << " - clip: ("    << cam[0].clip[0]   << " , "    << cam[0].clip[1] << ")"    << endl;

  }

1 Ответ

0 голосов
/ 02 апреля 2019

Проблема заключалась в том, что камера была расположена на 180º, а облако точек было упорядочено, что привело к высоте = 1 и, в сущности, к одинаковым цветам и форме с обоих углов.

Эффективно изменив "Злой код" к этому коду ниже, "исправил проблему":

 viewer.initCameraParameters();
 viewer.setCameraPosition(0, 30, 0,    0, 0, 0,   0, 0, 1);
 viewer.setCameraFieldOfView(0.523599);
 viewer.setCameraClipDistances(0.00522511, 50); 

...