From 25299529824aa73c6c76c943a391862297144627 Mon Sep 17 00:00:00 2001 From: matlabbe Date: Mon, 31 Oct 2016 11:29:07 -0400 Subject: [PATCH] ExportClouds: set minimum K (for normal estimation) to 3. Also added a check if the created cloud is empty. --- guilib/src/ExportCloudsDialog.cpp | 97 +++++++++++++++-------------- guilib/src/ui/exportCloudsDialog.ui | 2 +- 2 files changed, 51 insertions(+), 48 deletions(-) diff --git a/guilib/src/ExportCloudsDialog.cpp b/guilib/src/ExportCloudsDialog.cpp index fb63d436..5e1ce38b 100644 --- a/guilib/src/ExportCloudsDialog.cpp +++ b/guilib/src/ExportCloudsDialog.cpp @@ -1434,59 +1434,62 @@ std::map::Ptr, pcl::Indic indices.get(), parameters); - // Don't voxelize if we create organized mesh - if(!(_ui->comboBox_pipeline->currentIndex()==0 && _ui->groupBox_meshing->isChecked()) && _ui->doubleSpinBox_voxelSize_assembled->value()>0.0) + if(cloudWithoutNormals->size()) { - cloudWithoutNormals = util3d::voxelize(cloudWithoutNormals, indices, _ui->doubleSpinBox_voxelSize_assembled->value()); - indices->resize(cloudWithoutNormals->size()); - for(unsigned int i=0; isize(); ++i) + // Don't voxelize if we create organized mesh + if(!(_ui->comboBox_pipeline->currentIndex()==0 && _ui->groupBox_meshing->isChecked()) && _ui->doubleSpinBox_voxelSize_assembled->value()>0.0) { - indices->at(i) = i; + cloudWithoutNormals = util3d::voxelize(cloudWithoutNormals, indices, _ui->doubleSpinBox_voxelSize_assembled->value()); + indices->resize(cloudWithoutNormals->size()); + for(unsigned int i=0; isize(); ++i) + { + indices->at(i) = i; + } } - } - // view point - Eigen::Vector3f viewPoint(0.0f,0.0f,0.0f); - if(d.cameraModels().size() && !d.cameraModels()[0].localTransform().isNull()) - { - viewPoint[0] = d.cameraModels()[0].localTransform().x(); - viewPoint[1] = d.cameraModels()[0].localTransform().y(); - viewPoint[2] = d.cameraModels()[0].localTransform().z(); - } - else if(!d.stereoCameraModel().localTransform().isNull()) - { - viewPoint[0] = d.stereoCameraModel().localTransform().x(); - viewPoint[1] = d.stereoCameraModel().localTransform().y(); - viewPoint[2] = d.stereoCameraModel().localTransform().z(); - } - - pcl::PointCloud::Ptr normals = util3d::computeNormals(cloudWithoutNormals, indices, _ui->spinBox_normalKSearch->value(), viewPoint); - pcl::concatenateFields(*cloudWithoutNormals, *normals, *cloud); - - if(_ui->groupBox_subtraction->isChecked() && - _ui->doubleSpinBox_subtractPointFilteringRadius->value() > 0.0) - { - pcl::IndicesPtr beforeSubtractionIndices = indices; - if( cloud->size() && - previousCloud.get() != 0 && - previousIndices.get() != 0 && - previousIndices->size() && - !previousPose.isNull()) + // view point + Eigen::Vector3f viewPoint(0.0f,0.0f,0.0f); + if(d.cameraModels().size() && !d.cameraModels()[0].localTransform().isNull()) { - rtabmap::Transform t = iter->second.inverse() * previousPose; - pcl::PointCloud::Ptr transformedCloud = rtabmap::util3d::transformPointCloud(previousCloud, t); - indices = rtabmap::util3d::subtractFiltering( - cloud, - indices, - transformedCloud, - previousIndices, - _ui->doubleSpinBox_subtractPointFilteringRadius->value(), - _ui->doubleSpinBox_subtractPointFilteringAngle->value(), - _ui->spinBox_subtractFilteringMinPts->value()); + viewPoint[0] = d.cameraModels()[0].localTransform().x(); + viewPoint[1] = d.cameraModels()[0].localTransform().y(); + viewPoint[2] = d.cameraModels()[0].localTransform().z(); + } + else if(!d.stereoCameraModel().localTransform().isNull()) + { + viewPoint[0] = d.stereoCameraModel().localTransform().x(); + viewPoint[1] = d.stereoCameraModel().localTransform().y(); + viewPoint[2] = d.stereoCameraModel().localTransform().z(); + } + + pcl::PointCloud::Ptr normals = util3d::computeNormals(cloudWithoutNormals, indices, _ui->spinBox_normalKSearch->value(), viewPoint); + pcl::concatenateFields(*cloudWithoutNormals, *normals, *cloud); + + if(_ui->groupBox_subtraction->isChecked() && + _ui->doubleSpinBox_subtractPointFilteringRadius->value() > 0.0) + { + pcl::IndicesPtr beforeSubtractionIndices = indices; + if( cloud->size() && + previousCloud.get() != 0 && + previousIndices.get() != 0 && + previousIndices->size() && + !previousPose.isNull()) + { + rtabmap::Transform t = iter->second.inverse() * previousPose; + pcl::PointCloud::Ptr transformedCloud = rtabmap::util3d::transformPointCloud(previousCloud, t); + indices = rtabmap::util3d::subtractFiltering( + cloud, + indices, + transformedCloud, + previousIndices, + _ui->doubleSpinBox_subtractPointFilteringRadius->value(), + _ui->doubleSpinBox_subtractPointFilteringAngle->value(), + _ui->spinBox_subtractFilteringMinPts->value()); + } + previousCloud = cloud; + previousIndices = beforeSubtractionIndices; + previousPose = iter->second; } - previousCloud = cloud; - previousIndices = beforeSubtractionIndices; - previousPose = iter->second; } } } diff --git a/guilib/src/ui/exportCloudsDialog.ui b/guilib/src/ui/exportCloudsDialog.ui index 6b6f5fa8..9a15956b 100644 --- a/guilib/src/ui/exportCloudsDialog.ui +++ b/guilib/src/ui/exportCloudsDialog.ui @@ -34,7 +34,7 @@ - 0 + 3 20