53 ARMARX_ERROR <<
"Could not find point cloud files in ArmarXDataPath";
93 bestFitness = -std::numeric_limits<float>::infinity();
216 const pcl::PointCloud<pcl::PointXYZL>::Ptr& labeled,
217 const pcl::PointCloud<pcl::PointXYZRGBL>::Ptr& reference)
219 ARMARX_INFO << labeled->size() <<
" points in segmentation point cloud";
220 ARMARX_INFO << reference->size() <<
" points in ground truth point cloud";
222 pcl::octree::OctreePointCloudSearch<pcl::PointXYZL> octree(50);
223 octree.setInputCloud(labeled);
224 octree.addPointsFromInputCloud();
226 std::map<unsigned int, unsigned int> labelMap;
228 unsigned int num_covered = 0;
229 for (
auto& p : reference->points)
231 std::vector<int> indices;
232 std::vector<float> squaredDistances;
239 if (octree.nearestKSearch(
q, 1, indices, squaredDistances) > 0 && squaredDistances[0] < 50)
241 if (labelMap.find(p.label) == labelMap.end())
243 labelMap[p.label] = labeled->points[indices[0]].label;
245 if (labelMap[p.label] == labeled->points[indices[0]].label)
252 return ((
float)num_covered) / reference->size();
307 s <<
"Randomly determined parameter set: {" << std::endl
308 <<
" extractionPrm.minSegmentSize: " <<
extractionPrm.minSegmentSize <<
"," << std::endl
309 <<
" extractionPrm.maxSegmentSize: " <<
extractionPrm.maxSegmentSize <<
"," << std::endl
310 <<
" extractionPrm.euclideanClusteringTolerance: "
311 <<
extractionPrm.euclideanClusteringTolerance <<
"," << std::endl
312 <<
" extractionPrm.outlierThreshold: " <<
extractionPrm.outlierThreshold <<
","
314 <<
" extractionPrm.planeMaxIterations: " <<
extractionPrm.planeMaxIterations <<
","
316 <<
" extractionPrm.planeDistanceThreshold: " <<
extractionPrm.planeDistanceThreshold <<
","
318 <<
" extractionPrm.planeNormalDistance: " <<
extractionPrm.planeNormalDistance <<
","
320 <<
" extractionPrm.cylinderMaxIterations: " <<
extractionPrm.cylinderMaxIterations <<
","
322 <<
" extractionPrm.cylinderDistanceThreshold: " <<
extractionPrm.cylinderDistanceThreshold
324 <<
" extractionPrm.cylinderRadiusLimit: " <<
extractionPrm.cylinderRadiusLimit <<
","
326 <<
" extractionPrm.sphereMaxIterations: " <<
extractionPrm.sphereMaxIterations <<
","
328 <<
" extractionPrm.sphereDistanceThreshold: " <<
extractionPrm.sphereDistanceThreshold
330 <<
" extractionPrm.sphereNormalDistance: " <<
extractionPrm.sphereNormalDistance <<
","
332 <<
" extractionPrm.circularDistanceThreshold: " <<
extractionPrm.circularDistanceThreshold
334 <<
" segmentationPrm.minSegmentSize: " <<
segmentationPrm.minSegmentSize <<
","
336 <<
" segmentationPrm.voxelResolution: " <<
segmentationPrm.voxelResolution <<
","
338 <<
" segmentationPrm.seedResolution: " <<
segmentationPrm.seedResolution <<
","
340 <<
" segmentationPrm.colorImportance: " <<
segmentationPrm.colorImportance <<
","
342 <<
" segmentationPrm.spatialImportance: " <<
segmentationPrm.spatialImportance <<
","
344 <<
" segmentationPrm.normalImportance: " <<
segmentationPrm.normalImportance <<
","
346 <<
" segmentationPrm.concavityThreshold: " <<
segmentationPrm.concavityThreshold <<
","
348 <<
" segmentationPrm.smoothnessThreshold: " <<
segmentationPrm.smoothnessThreshold <<
","
379 const std::string& directory,
380 const pcl::PointCloud<pcl::PointXYZL>::Ptr& pointCloud,
381 const visionx::LccpParameters& lccp_prm,
382 const visionx::PrimitiveExtractorParameters& pe_prm)
384 std::stringstream path_pcd;
385 path_pcd << directory <<
"/point_cloud_" <<
iteration <<
".pcd";
387 std::stringstream path_prm;
388 path_prm << directory <<
"/parameters_" <<
iteration <<
".cfg";
390 ARMARX_INFO <<
"Exporting labeled point cloud to: " << path_pcd.str();
391 pcl::io::savePCDFile<pcl::PointXYZL>(path_pcd.str(), *pointCloud);
393 ARMARX_INFO <<
"Exporting parameters to: " << path_prm.str();
395 f.open(path_prm.str());
397 f <<
"Randomly determined parameter set: {" << std::endl
398 <<
" extractionPrm.minSegmentSize: " << pe_prm.minSegmentSize <<
"," << std::endl
399 <<
" extractionPrm.maxSegmentSize: " << pe_prm.maxSegmentSize <<
"," << std::endl
400 <<
" extractionPrm.euclideanClusteringTolerance: " << pe_prm.euclideanClusteringTolerance
402 <<
" extractionPrm.outlierThreshold: " << pe_prm.outlierThreshold <<
"," << std::endl
403 <<
" extractionPrm.planeMaxIterations: " << pe_prm.planeMaxIterations <<
"," << std::endl
404 <<
" extractionPrm.planeDistanceThreshold: " << pe_prm.planeDistanceThreshold <<
","
406 <<
" extractionPrm.planeNormalDistance: " << pe_prm.planeNormalDistance <<
"," << std::endl
407 <<
" extractionPrm.cylinderMaxIterations: " << pe_prm.cylinderMaxIterations <<
","
409 <<
" extractionPrm.cylinderDistanceThreshold: " << pe_prm.cylinderDistanceThreshold <<
","
411 <<
" extractionPrm.cylinderRadiusLimit: " << pe_prm.cylinderRadiusLimit <<
"," << std::endl
412 <<
" extractionPrm.sphereMaxIterations: " << pe_prm.sphereMaxIterations <<
"," << std::endl
413 <<
" extractionPrm.sphereDistanceThreshold: " << pe_prm.sphereDistanceThreshold <<
","
415 <<
" extractionPrm.sphereNormalDistance: " << pe_prm.sphereNormalDistance <<
","
417 <<
" extractionPrm.circularDistanceThreshold: " << pe_prm.circularDistanceThreshold <<
","
419 <<
" segmentationPrm.minSegmentSize: " << lccp_prm.minSegmentSize <<
"," << std::endl
420 <<
" segmentationPrm.voxelResolution: " << lccp_prm.voxelResolution <<
"," << std::endl
421 <<
" segmentationPrm.seedResolution: " << lccp_prm.seedResolution <<
"," << std::endl
422 <<
" segmentationPrm.colorImportance: " << lccp_prm.colorImportance <<
"," << std::endl
423 <<
" segmentationPrm.spatialImportance: " << lccp_prm.spatialImportance <<
"," << std::endl
424 <<
" segmentationPrm.normalImportance: " << lccp_prm.normalImportance <<
"," << std::endl
425 <<
" segmentationPrm.concavityThreshold: " << lccp_prm.concavityThreshold <<
","
427 <<
" segmentationPrm.smoothnessThreshold: " << lccp_prm.smoothnessThreshold <<
","