From 5f7dfb943ca81d4426afc3d15a3cd02d91a7bb51 Mon Sep 17 00:00:00 2001 From: matlabbe Date: Thu, 10 Mar 2016 12:31:22 -0500 Subject: [PATCH] Source depth from scan: filling holes is now optional (though still true by default) --- corelib/include/rtabmap/core/CameraRGB.h | 6 +-- corelib/include/rtabmap/core/Parameters.h | 4 +- corelib/src/CameraRGB.cpp | 9 ++-- guilib/src/PreferencesDialog.cpp | 18 +++++-- guilib/src/ui/preferencesDialog.ui | 60 +++++++++++------------ 5 files changed, 52 insertions(+), 45 deletions(-) diff --git a/corelib/include/rtabmap/core/CameraRGB.h b/corelib/include/rtabmap/core/CameraRGB.h index 3b53e175..599d3982 100644 --- a/corelib/include/rtabmap/core/CameraRGB.h +++ b/corelib/include/rtabmap/core/CameraRGB.h @@ -99,10 +99,10 @@ public: } } - void setDepthFromScan(bool enabled, bool fillHolesVertical = true, bool fillHolesFromBorder = false) + void setDepthFromScan(bool enabled, int fillHoles = 1, bool fillHolesFromBorder = false) { _depthFromScan = enabled; - _depthFromScanFillHolesVertical = fillHolesVertical; + _depthFromScanFillHoles = fillHoles; _depthFromScanFillHolesFromBorder = fillHolesFromBorder; } @@ -146,7 +146,7 @@ private: int _scanNormalsK; bool _depthFromScan; - bool _depthFromScanFillHolesVertical; + int _depthFromScanFillHoles; // <0:horizontal 0:disabled >0:vertical bool _depthFromScanFillHolesFromBorder; bool _filenamesAreTimestamps; diff --git a/corelib/include/rtabmap/core/Parameters.h b/corelib/include/rtabmap/core/Parameters.h index 479065d1..2064b906 100644 --- a/corelib/include/rtabmap/core/Parameters.h +++ b/corelib/include/rtabmap/core/Parameters.h @@ -192,7 +192,7 @@ class RTABMAP_EXP Parameters RTABMAP_PARAM(Mem, RehearsalSimilarity, float, 0.6, "Rehearsal similarity."); RTABMAP_PARAM(Mem, ImageKept, bool, false, "Keep raw images in RAM."); RTABMAP_PARAM(Mem, BinDataKept, bool, true, "Keep binary data in db."); - RTABMAP_PARAM(Mem, RawDescriptorsKept, bool, false, "Raw descriptors kept in memory."); + RTABMAP_PARAM(Mem, RawDescriptorsKept, bool, true, "Raw descriptors kept in memory."); RTABMAP_PARAM(Mem, MapLabelsAdded, bool, true, "Create map labels. The first node of a map will be labelled as \"map#\" where # is the map ID."); RTABMAP_PARAM(Mem, SaveDepth16Format, bool, true, "Save depth image into 16 bits format to reduce memory used. Warning: values over ~65 meters are ignored (maximum 65535 millimeters)."); RTABMAP_PARAM(Mem, NotLinkedNodesKept, bool, true, "Keep not linked nodes in db (rehearsed nodes and deleted nodes)."); @@ -317,7 +317,7 @@ class RTABMAP_EXP Parameters RTABMAP_PARAM(RGBD, LocalImmunizationRatio, float, 0.25, "Ratio of working memory for which local nodes are immunized from transfer."); RTABMAP_PARAM(RGBD, ScanMatchingIdsSavedInLinks, bool, true, "Save scan matching IDs in link's user data."); RTABMAP_PARAM(RGBD, NeighborLinkRefining, bool, false, "When a new node is added to the graph, the transformation of its neighbor link to the previous node is refined using ICP (laser scans required!)."); - RTABMAP_PARAM(RGBD, LoopClosureReextractFeatures, bool, true, "Extract features even if there are some already in the nodes."); + RTABMAP_PARAM(RGBD, LoopClosureReextractFeatures, bool, false, "Extract features even if there are some already in the nodes."); // Local/Proximity loop closure detection RTABMAP_PARAM(RGBD, ProximityByTime, bool, false, "Detection over all locations in STM."); diff --git a/corelib/src/CameraRGB.cpp b/corelib/src/CameraRGB.cpp index 57b4849d..0b1adfa7 100644 --- a/corelib/src/CameraRGB.cpp +++ b/corelib/src/CameraRGB.cpp @@ -68,7 +68,7 @@ CameraImages::CameraImages() : _scanVoxelSize(0.0f), _scanNormalsK(0), _depthFromScan(false), - _depthFromScanFillHolesVertical(true), + _depthFromScanFillHoles(1), _depthFromScanFillHolesFromBorder(false), _filenamesAreTimestamps(false), syncImageRateWithStamps_(true), @@ -95,7 +95,7 @@ CameraImages::CameraImages(const std::string & path, _scanVoxelSize(0.0f), _scanNormalsK(0), _depthFromScan(false), - _depthFromScanFillHolesVertical(true), + _depthFromScanFillHoles(1), _depthFromScanFillHolesFromBorder(false), _filenamesAreTimestamps(false), syncImageRateWithStamps_(true), @@ -640,7 +640,10 @@ SensorData CameraImages::captureImage() else { depthFromScan = util3d::projectCloudToCamera(img.size(), _model.K(), cloud, _model.localTransform()); - util3d::fillProjectedCloudHoles(depthFromScan, _depthFromScanFillHolesVertical, _depthFromScanFillHolesFromBorder); + if(_depthFromScanFillHoles!=0) + { + util3d::fillProjectedCloudHoles(depthFromScan, _depthFromScanFillHoles>0, _depthFromScanFillHolesFromBorder); + } } } // filter the scan after registration diff --git a/guilib/src/PreferencesDialog.cpp b/guilib/src/PreferencesDialog.cpp index 5017ebd7..09905e28 100644 --- a/guilib/src/PreferencesDialog.cpp +++ b/guilib/src/PreferencesDialog.cpp @@ -440,7 +440,9 @@ PreferencesDialog::PreferencesDialog(QWidget * parent) : connect(_ui->lineEdit_cameraImages_gt, SIGNAL(textChanged(const QString &)), this, SLOT(makeObsoleteSourcePanel())); connect(_ui->comboBox_cameraImages_gtFormat, SIGNAL(currentIndexChanged(int)), this, SLOT(makeObsoleteSourcePanel())); connect(_ui->groupBox_depthFromScan, SIGNAL(toggled(bool)), this, SLOT(makeObsoleteSourcePanel())); - connect(_ui->checkBox_depthFromScan_vertical, SIGNAL(stateChanged(int)), this, SLOT(makeObsoleteSourcePanel())); + connect(_ui->groupBox_depthFromScan_fillHoles, SIGNAL(toggled(bool)), this, SLOT(makeObsoleteSourcePanel())); + connect(_ui->radioButton_depthFromScan_vertical, SIGNAL(stateChanged(int)), this, SLOT(makeObsoleteSourcePanel())); + connect(_ui->radioButton_depthFromScan_horizontal, SIGNAL(stateChanged(int)), this, SLOT(makeObsoleteSourcePanel())); connect(_ui->checkBox_depthFromScan_fillBorders, SIGNAL(stateChanged(int)), this, SLOT(makeObsoleteSourcePanel())); connect(_ui->toolButton_cameraStereoImages_path_left, SIGNAL(clicked()), this, SLOT(selectSourceStereoImagesPathLeft())); @@ -1278,7 +1280,9 @@ void PreferencesDialog::resetSettings(QGroupBox * groupBox) _ui->spinBox_cameraImages_scanNormalsK->setValue(0); _ui->groupBox_depthFromScan->setChecked(false); - _ui->checkBox_depthFromScan_vertical->setChecked(true); + _ui->groupBox_depthFromScan_fillHoles->setChecked(true); + _ui->radioButton_depthFromScan_vertical->setChecked(true); + _ui->radioButton_depthFromScan_horizontal->setChecked(false); _ui->checkBox_depthFromScan_fillBorders->setChecked(false); } else if(groupBox->objectName() == _ui->groupBox_rtabmap_basic0->objectName()) @@ -1614,7 +1618,9 @@ void PreferencesDialog::readCameraSettings(const QString & filePath) settings.beginGroup("DepthFromScan"); _ui->groupBox_depthFromScan->setChecked(settings.value("depthFromScan", _ui->groupBox_depthFromScan->isChecked()).toBool()); - _ui->checkBox_depthFromScan_vertical->setChecked(settings.value("depthFromScanVertical", _ui->checkBox_depthFromScan_vertical->isChecked()).toBool()); + _ui->groupBox_depthFromScan_fillHoles->setChecked(settings.value("depthFromScanFillHoles", _ui->groupBox_depthFromScan_fillHoles->isChecked()).toBool()); + _ui->radioButton_depthFromScan_vertical->setChecked(settings.value("depthFromScanVertical", _ui->radioButton_depthFromScan_vertical->isChecked()).toBool()); + _ui->radioButton_depthFromScan_horizontal->setChecked(settings.value("depthFromScanHorizontal", _ui->radioButton_depthFromScan_horizontal->isChecked()).toBool()); _ui->checkBox_depthFromScan_fillBorders->setChecked(settings.value("depthFromScanFillBorders", _ui->checkBox_depthFromScan_fillBorders->isChecked()).toBool()); settings.endGroup(); @@ -1994,7 +2000,9 @@ void PreferencesDialog::writeCameraSettings(const QString & filePath) const settings.beginGroup("DepthFromScan"); settings.setValue("depthFromScan", _ui->groupBox_depthFromScan->isChecked()); - settings.setValue("depthFromScanVertical", _ui->checkBox_depthFromScan_vertical->isChecked()); + settings.setValue("depthFromScanFillHoles", _ui->groupBox_depthFromScan_fillHoles->isChecked()); + settings.setValue("depthFromScanVertical", _ui->radioButton_depthFromScan_vertical->isChecked()); + settings.setValue("depthFromScanHorizontal", _ui->radioButton_depthFromScan_horizontal->isChecked()); settings.setValue("depthFromScanFillBorders", _ui->checkBox_depthFromScan_fillBorders->isChecked()); settings.endGroup(); @@ -3980,7 +3988,7 @@ Camera * PreferencesDialog::createCamera(bool useRawImages) this->getLaserLocalTransform()); ((CameraImages*)camera)->setDepthFromScan( _ui->groupBox_depthFromScan->isChecked(), - _ui->checkBox_depthFromScan_vertical->isChecked(), + !_ui->groupBox_depthFromScan_fillHoles->isChecked()?0:_ui->radioButton_depthFromScan_vertical->isChecked()?1:-1, _ui->checkBox_depthFromScan_fillBorders->isChecked()); ((CameraImages*)camera)->setTimestamps( _ui->checkBox_cameraImages_timestamps->isChecked(), diff --git a/guilib/src/ui/preferencesDialog.ui b/guilib/src/ui/preferencesDialog.ui index 9d006602..bb7a7096 100644 --- a/guilib/src/ui/preferencesDialog.ui +++ b/guilib/src/ui/preferencesDialog.ui @@ -63,7 +63,7 @@ 0 - 0 + -1161 681 2010 @@ -86,7 +86,7 @@ QFrame::Raised - 7 + 3 @@ -3666,45 +3666,41 @@ when using the file type, logs are saved in LogRtabmap.txt (located in the worki false - - - - - + + + + + Interpolate depth values to fill holes - - - - - - Fill holes vertically, otherwise fill horizontally. - - + true - - Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse - + + + + + Vertically + + + true + + + + + + + Horizontally + + + + - + - - - - - - - Fill holes from the image border. - - true - - - Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse -