Анализ основных компонентов на PCL

Я использую PCL с C ++ и хочу выполнить PCA на уже кластеризованном pointcloud (то есть на каждом отдельном кластере). Идея состоит в том, чтобы устранить все кластеры, которые являются слишком большими / маленькими, измеряя их размер вдоль собственных векторов. Таким образом, предполагаемый алгоритм: получить собственные векторы каждого кластера, спроецировать точки кластеров на соответствующие собственные векторы, чтобы измерить максимальные расстояния точек вдоль этих измерений, и оттуда исключить все кластеры, которые имеют «плохие» измерения / отношение размеров. У меня трудности с реализацией. Чем больше помощи вы можете сэкономить, тем лучше. Вот как организованы мои данные (для ясности, это фрагменты, cluster_indices уже был правильно извлечен, что проверено), и то, что я начал:

std::vector<pcl::PointIndices> cluster_indices;
pcl::PCA<pcl::PointXYZ> cpca = new pcl::PCA<pcl::PointXYZ>;
cpca.setInputCloud(input);
Eigen::Vector3f pca_vector(3,3);
// and now iterating with a for loop over the clusters, but having issues using setIndices already
for (std::vector<pcl::PointIndices>::const_iterator it = cluster_indices.begin (); it != cluster_indices.end (); ++it, n++)
{
cpca.setIndices(it->indices); //not sure what to put in brackets, everything I thought of returns an error!
pca_vector = cpca.getEigenVectors();
}

1

Решение

Кажется, с этим есть общая проблема. Итак, я нашел это решение:
Вместо итерации с указателями, используйте обычный итератор, а затем используйте эти формулировки.
PointIndicesPtr pi_ptr (новые PointIndices);
pi_ptr-> indices = cluster_indices [i] .indices;
// теперь можем использовать pi_ptr в качестве входных данных

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector