PCL: доступ к полям pcl :: ModelCoefficients :: Ptr для аппроксимации линейной модели с использованием RANSAC - PullRequest
0 голосов
/ 02 февраля 2019

Я пытаюсь оценить линию, проходящую через точки облака точек, используя метод RANSAC, предоставленный библиотекой облака точек.Я могу создать объект и оценить линейную модель без проблем, вот так:

pcl::PointCloud<pcl::PointXYZ>::ConstPtr source_cloud(new pcl::PointCloud<pcl::PointXYZ>);
pcl::ModelCoefficients::Ptr line_coefficients(new pcl::ModelCoefficients);
pcl::PointIndices::Ptr inliers (new pcl::PointIndices);

// Populate point cloud...

// Create the segmentation object 
pcl::SACSegmentation<pcl::PointXYZ> seg;
seg.setModelType (pcl::SACMODEL_LINE);
seg.setMethodType (pcl::SAC_RANSAC);
seg.setDistanceThreshold (distance_thresh);
seg.setInputCloud (source_cloud); 
seg.segment (*inliers, *line_coefficients);

Я сейчас пытаюсь получить доступ к параметрам модели, и я просто слишком туп, чтобы сделать это ... в соответствии с API должно быть шесть доступных параметров:

Шесть коэффициентов линии задаются точкой на линии и направлением линии как: [point_on_line.x point_on_line.y point_on_line.z line_direction.x line_direction.y line_direction.z]

Поэтому я пытаюсь получить к ним доступ следующим образом:

line_coefficients->line_direction->x

Однако это не работает.Я получаю сообщение об ошибке:

Ни один член с именем 'line_direction' в 'pcl :: ModelCoefficients'.

Я не знаю, что я делаюнеправильно ... у кого-нибудь есть идеи?Заранее спасибо!

1 Ответ

0 голосов
/ 04 февраля 2019

Документация просто говорит вам, как значения должны интерпретироваться.pcl::ModelCoefficients - это структура, которая имеет член values типа std::vector<float>.

Таким образом, чтобы получить line_direction и point_on_line do:

const auto pt_line_x = line_coefficients->values[0];
const auto pt_line_y = line_coefficients->values[1];
const auto pt_line_z = line_coefficients->values[2];
const auto pt_direction_x = line_coefficients->values[3];
const auto pt_direction_y = line_coefficients->values[4];
const auto pt_direction_z = line_coefficients->values[5];
...