Added Stereo and StereoDense base classes (with Stereo->StereoOpticalFlow and StereoDense->StereoBM) to handle easily stereo parameters. Added stereoEval tool to test Stereo/OpticalFlow=false or true. Added StereoBM parameters. Refactoring of the Preferences dialog (tree view order and some titles)

This commit is contained in:
matlabbe
2015-12-11 17:44:15 -05:00
parent 818eda005f
commit 9cc94ce1e6
44 changed files with 6866 additions and 4311 deletions

View File

@@ -35,6 +35,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include <opencv2/opencv.hpp>
#include <rtabmap/core/CameraModel.h>
#include <rtabmap/core/StereoCameraModel.h>
#include <rtabmap/utilite/UEventsHandler.h>

View File

@@ -78,7 +78,7 @@ public:
void setFeatures(const std::multimap<int, cv::KeyPoint> & refWords, const cv::Mat & depth = cv::Mat(), const QColor & color = Qt::yellow);
void setFeatures(const std::vector<cv::KeyPoint> & features, const cv::Mat & depth = cv::Mat(), const QColor & color = Qt::yellow);
void addFeature(int id, const cv::KeyPoint & kpt, float depth, QColor color);
void addLine(float x1, float y1, float x2, float y2, QColor color);
void addLine(float x1, float y1, float x2, float y2, QColor color, const QString & text = QString());
void setImage(const QImage & image);
void setImageDepth(const QImage & image);
void setFeatureColor(int id, QColor color);

View File

@@ -241,7 +241,7 @@ private slots:
void makeObsoleteCloudRenderingPanel();
void makeObsoleteLoggingPanel();
void makeObsoleteSourcePanel();
void clicked(const QModelIndex &index);
void clicked(const QModelIndex & current, const QModelIndex & previous);
void addParameter(int value);
void addParameter(bool value);
void addParameter(double value);

View File

@@ -29,6 +29,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include "ui_createSimpleCalibrationDialog.h"
#include "rtabmap/core/CameraModel.h"
#include "rtabmap/core/StereoCameraModel.h"
#include "rtabmap/utilite/ULogger.h"
#include <QFileDialog>

View File

@@ -262,6 +262,8 @@ DatabaseViewer::DatabaseViewer(QWidget * parent) :
connect(ui_->doubleSpinBox_stereo_gfttQuality, SIGNAL(valueChanged(double)), this, SLOT(updateStereo()));
connect(ui_->doubleSpinBox_stereo_maxSlope, SIGNAL(valueChanged(double)), this, SLOT(updateStereo()));
connect(ui_->checkBox_stereo_subpix, SIGNAL(stateChanged(int)), this, SLOT(updateStereo()));
connect(ui_->checkBox_stereo_opticalFlow, SIGNAL(stateChanged(int)), this, SLOT(updateStereo()));
connect(ui_->checkBox_stereo_ssd, SIGNAL(stateChanged(int)), this, SLOT(updateStereo()));
ui_->label_stereo_inliers_name->setStyleSheet("QLabel {color : blue; }");
ui_->label_stereo_flowOutliers_name->setStyleSheet("QLabel {color : red; }");
ui_->label_stereo_slopeOutliers_name->setStyleSheet("QLabel {color : yellow; }");
@@ -334,6 +336,9 @@ DatabaseViewer::DatabaseViewer(QWidget * parent) :
connect(ui_->doubleSpinBox_stereo_gfttQuality, SIGNAL(valueChanged(double)), this, SLOT(configModified()));
connect(ui_->doubleSpinBox_stereo_maxSlope, SIGNAL(valueChanged(double)), this, SLOT(configModified()));
connect(ui_->checkBox_stereo_subpix, SIGNAL(stateChanged(int)), this, SLOT(configModified()));
connect(ui_->checkBox_stereo_opticalFlow, SIGNAL(stateChanged(int)), this, SLOT(configModified()));
connect(ui_->checkBox_stereo_ssd, SIGNAL(stateChanged(int)), this, SLOT(configModified()));
// dockwidget
QList<QDockWidget*> dockWidgets = this->findChildren<QDockWidget*>();
for(int i=0; i<dockWidgets.size(); ++i)
@@ -482,6 +487,8 @@ void DatabaseViewer::readSettings()
ui_->doubleSpinBox_stereo_gfttQuality->setValue(settings.value("gfttQuality", ui_->doubleSpinBox_stereo_gfttQuality->value()).toDouble());
ui_->doubleSpinBox_stereo_maxSlope->setValue(settings.value("maxSlope", ui_->doubleSpinBox_stereo_maxSlope->value()).toDouble());
ui_->checkBox_stereo_subpix->setChecked(settings.value("subpix", ui_->checkBox_stereo_subpix->isChecked()).toBool());
ui_->checkBox_stereo_opticalFlow->setChecked(settings.value("opticalFlow", ui_->checkBox_stereo_opticalFlow->isChecked()).toBool());
ui_->checkBox_stereo_ssd->setChecked(settings.value("ssd", ui_->checkBox_stereo_ssd->isChecked()).toBool());
settings.endGroup();
settings.endGroup(); // DatabaseViewer
@@ -588,6 +595,8 @@ void DatabaseViewer::writeSettings()
settings.setValue("gfttQuality", ui_->doubleSpinBox_stereo_gfttQuality->value());
settings.setValue("maxSlope", ui_->doubleSpinBox_stereo_maxSlope->value());
settings.setValue("subpix", ui_->checkBox_stereo_subpix->isChecked());
settings.setValue("opticalFlow", ui_->checkBox_stereo_opticalFlow->isChecked());
settings.setValue("ssd", ui_->checkBox_stereo_ssd->isChecked());
settings.endGroup();
settings.endGroup(); // DatabaseViewer
@@ -2483,20 +2492,41 @@ void DatabaseViewer::updateStereo(const SensorData * data)
UDEBUG("cv::cornerSubPix() end");
}
// Find features in the new left image
// Find features in the new right image
std::vector<unsigned char> status;
std::vector<float> err;
std::vector<cv::Point2f> rightCorners;
cv::calcOpticalFlowPyrLK(
leftMono,
data->depthOrRightRaw(),
leftCorners,
rightCorners,
status,
err,
cv::Size(ui_->spinBox_stereo_flowWinSize->value(), ui_->spinBox_stereo_flowWinSize->value()), ui_->spinBox_stereo_flowMaxLevel->value(),
cv::TermCriteria(cv::TermCriteria::COUNT+cv::TermCriteria::EPS, ui_->spinBox_stereo_flowIterations->value(), ui_->doubleSpinBox_stereo_flowEps->value()));
if(ui_->checkBox_stereo_opticalFlow->isChecked())
{
UDEBUG("");
std::vector<float> err;
util2d::calcOpticalFlowPyrLKStereo(
leftMono,
data->rightRaw(),
leftCorners,
rightCorners,
status,
err,
cv::Size(ui_->spinBox_stereo_flowWinSize->value(), 3), ui_->spinBox_stereo_flowMaxLevel->value(),
cv::TermCriteria(cv::TermCriteria::COUNT+cv::TermCriteria::EPS, ui_->spinBox_stereo_flowIterations->value(), ui_->doubleSpinBox_stereo_flowEps->value()));
UDEBUG("");
}
else
{
UDEBUG("");
rightCorners = util2d::calcStereoCorrespondences(
leftMono,
data->rightRaw(),
leftCorners,
status,
cv::Size(ui_->spinBox_stereo_flowWinSize->value(), 3),
ui_->spinBox_stereo_flowMaxLevel->value(),
ui_->spinBox_stereo_flowIterations->value(),
0,
64,
ui_->checkBox_stereo_ssd->isChecked());
UDEBUG("");
}
float timeFlow = timer.ticks();
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);
@@ -2513,6 +2543,8 @@ void DatabaseViewer::updateStereo(const SensorData * data)
pcl::PointXYZ pt(bad_point, bad_point, bad_point);
if(status[i])
{
//UDEBUG("Left(%f,%f), right(%f,%f) disparity=%f", leftCorners[i].x, leftCorners[i].y, rightCorners[i].x, rightCorners[i].y, leftCorners[i].x - rightCorners[i].x);
float disparity = leftCorners[i].x - rightCorners[i].x;
if(disparity > 0.0f)
{
@@ -2521,10 +2553,7 @@ void DatabaseViewer::updateStereo(const SensorData * data)
pcl::PointXYZ tmpPt = util3d::projectDisparityTo3D(
leftCorners[i],
disparity,
data->stereoCameraModel().left().cx(),
data->stereoCameraModel().left().cy(),
data->stereoCameraModel().left().fx(),
data->stereoCameraModel().baseline());
data->stereoCameraModel());
if(pcl::isFinite(tmpPt))
{
@@ -2599,33 +2628,37 @@ void DatabaseViewer::updateStereo(const SensorData * data)
// Draw lines between corresponding features...
for(unsigned int i=0; i<kpts.size(); ++i)
{
QColor c = Qt::green;
if(status[i] == 0)
if(rightKpts[i].pt.x > 0 && rightKpts[i].pt.y > 0)
{
c = Qt::red;
QColor c = Qt::green;
if(status[i] == 0)
{
c = Qt::red;
}
else if(status[i] == 100)
{
c = Qt::blue;
}
else if(status[i] == 101)
{
c = Qt::yellow;
}
else if(status[i] == 102)
{
c = Qt::magenta;
}
else if(status[i] == 110)
{
c = Qt::cyan;
}
ui_->graphicsView_stereo->addLine(
kpts[i].pt.x,
kpts[i].pt.y,
rightKpts[i].pt.x,
rightKpts[i].pt.y,
c,
QString("%1: (%2,%3) -> (%4,%5)").arg(i).arg(kpts[i].pt.x).arg(kpts[i].pt.y).arg(rightKpts[i].pt.x).arg(rightKpts[i].pt.y));
}
else if(status[i] == 100)
{
c = Qt::blue;
}
else if(status[i] == 101)
{
c = Qt::yellow;
}
else if(status[i] == 102)
{
c = Qt::magenta;
}
else if(status[i] == 110)
{
c = Qt::cyan;
}
ui_->graphicsView_stereo->addLine(
kpts[i].pt.x,
kpts[i].pt.y,
rightKpts[i].pt.x,
rightKpts[i].pt.y,
c);
}
ui_->graphicsView_stereo->update();
}

View File

@@ -36,12 +36,114 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include <QGraphicsEffect>
#include <QInputDialog>
#include <QVBoxLayout>
#include <QGraphicsRectItem>
#include "rtabmap/utilite/ULogger.h"
#include "rtabmap/gui/KeypointItem.h"
#include "rtabmap/core/util2d.h"
namespace rtabmap {
//LineItem
class LineItem : public QGraphicsLineItem
{
public:
LineItem(float x1, float y1, float x2, float y2, const QString & text = QString(), QGraphicsItem * parent = 0) :
QGraphicsLineItem(x1, y1, x2, y2, parent),
_text(text),
_placeHolder(0)
{
this->setAcceptHoverEvents(true);
this->setFlag(QGraphicsItem::ItemIsFocusable, true);
_width = pen().width();
}
virtual ~LineItem()
{
if(_placeHolder)
{
delete _placeHolder;
}
}
void setColor(const QColor & color);
protected:
virtual void hoverEnterEvent ( QGraphicsSceneHoverEvent * event )
{
QGraphicsScene * scene = this->scene();
if(scene && scene->focusItem() == 0)
{
this->showDescription();
}
else
{
this->setPen(QPen(pen().color(), _width+2));
}
QGraphicsLineItem::hoverEnterEvent(event);
}
virtual void hoverLeaveEvent ( QGraphicsSceneHoverEvent * event )
{
if(!this->hasFocus())
{
this->hideDescription();
}
QGraphicsLineItem::hoverEnterEvent(event);
}
virtual void focusInEvent ( QFocusEvent * event )
{
this->showDescription();
QGraphicsLineItem::focusInEvent(event);
}
virtual void focusOutEvent ( QFocusEvent * event )
{
this->hideDescription();
QGraphicsLineItem::focusOutEvent(event);
}
private:
void showDescription()
{
if(!_text.isEmpty())
{
if(!_placeHolder)
{
_placeHolder = new QGraphicsRectItem (this);
_placeHolder->setVisible(false);
_placeHolder->setBrush(QBrush(QColor ( 0, 0, 0, 170 ))); // Black transparent background
QGraphicsTextItem * text = new QGraphicsTextItem(_placeHolder);
text->setDefaultTextColor(this->pen().color().rgb());
text->setPlainText(_text);
_placeHolder->setRect(text->boundingRect());
}
if(_placeHolder->parentItem())
{
_placeHolder->setParentItem(0); // Make it a to level item
}
_placeHolder->setZValue(this->zValue()+1);
_placeHolder->setPos(this->mapFromScene(0,0));
_placeHolder->setVisible(true);
}
QPen pen = this->pen();
this->setPen(QPen(pen.color(), _width+2));
}
void hideDescription()
{
if(_placeHolder)
{
_placeHolder->setVisible(false);
}
this->setPen(QPen(pen().color(), _width));
}
private:
QString _text;
QGraphicsRectItem * _placeHolder;
int _width;
};
ImageView::ImageView(QWidget * parent) :
QWidget(parent),
_savedFileName((QDir::homePath()+ "/") + "picture" + ".png"),
@@ -595,10 +697,10 @@ void ImageView::addFeature(int id, const cv::KeyPoint & kpt, float depth, QColor
}
}
void ImageView::addLine(float x1, float y1, float x2, float y2, QColor color)
void ImageView::addLine(float x1, float y1, float x2, float y2, QColor color, const QString & text)
{
color.setAlpha(this->getAlpha());
QGraphicsLineItem * item = new QGraphicsLineItem(x1, y1, x2, y2);
LineItem * item = new LineItem(x1, y1, x2, y2, text);
item->setPen(QPen(color));
_lines.push_back(item);
item->setVisible(isLinesShown());

View File

@@ -2959,7 +2959,7 @@ void MainWindow::startDetection()
return;
}
_camera = new CameraThread(camera);
_camera = new CameraThread(camera, parameters);
_camera->setMirroringEnabled(_preferencesDialog->isSourceMirroring());
_camera->setColorOnly(_preferencesDialog->isSourceRGBDColorOnly());
_camera->setStereoToDepth(_preferencesDialog->isSourceStereoDepthGenerated());

View File

@@ -673,10 +673,12 @@ PreferencesDialog::PreferencesDialog(QWidget * parent) :
connect(_ui->toolButton_odomBowFixedLocalMap, SIGNAL(clicked()), this, SLOT(changeOdomBowFixedLocalMapPath()));
//Odometry Optical Flow
_ui->odom_flow_keyframeThr->setObjectName(Parameters::kOdomFlowKeyFrameThr().c_str());
_ui->odom_flow_winSize->setObjectName(Parameters::kOdomFlowWinSize().c_str());
_ui->odom_flow_maxLevel->setObjectName(Parameters::kOdomFlowMaxLevel().c_str());
_ui->odom_flow_iterations->setObjectName(Parameters::kOdomFlowIterations().c_str());
_ui->odom_flow_eps->setObjectName(Parameters::kOdomFlowEps().c_str());
_ui->odom_flow_guessMotion->setObjectName(Parameters::kOdomFlowGuessMotion().c_str());
//Odometry Mono
_ui->doubleSpinBox_minFlow->setObjectName(Parameters::kOdomMonoInitMinFlow().c_str());
@@ -693,12 +695,29 @@ PreferencesDialog::PreferencesDialog(QWidget * parent) :
_ui->doubleSpinBox_particleLambdaR->setObjectName(Parameters::kOdomParticleLambdaR().c_str());
//Stereo
_ui->stereo_flow_winSize->setObjectName(Parameters::kStereoWinSize().c_str());
_ui->stereo_flow_maxLevel->setObjectName(Parameters::kStereoMaxLevel().c_str());
_ui->stereo_flow_iterations->setObjectName(Parameters::kStereoIterations().c_str());
_ui->stereo_winWidth->setObjectName(Parameters::kStereoWinWidth().c_str());
_ui->stereo_winHeight->setObjectName(Parameters::kStereoWinHeight().c_str());
_ui->stereo_maxLevel->setObjectName(Parameters::kStereoMaxLevel().c_str());
_ui->stereo_iterations->setObjectName(Parameters::kStereoIterations().c_str());
_ui->stereo_minDisparity->setObjectName(Parameters::kStereoMinDisparity().c_str());
_ui->stereo_maxDisparity->setObjectName(Parameters::kStereoMaxDisparity().c_str());
_ui->stereo_ssd->setObjectName(Parameters::kStereoSSD().c_str());
_ui->stereo_flow_eps->setObjectName(Parameters::kStereoEps().c_str());
_ui->stereo_opticalFlow->setObjectName(Parameters::kStereoOpticalFlow().c_str());
_ui->stereo_maxSlope->setObjectName(Parameters::kStereoMaxSlope().c_str());
//StereoBM
_ui->stereobm_blockSize->setObjectName(Parameters::kStereoBMBlockSize().c_str());
_ui->stereobm_minDisparity->setObjectName(Parameters::kStereoBMMinDisparity().c_str());
_ui->stereobm_numDisparities->setObjectName(Parameters::kStereoBMNumDisparities().c_str());
_ui->stereobm_preFilterCap->setObjectName(Parameters::kStereoBMPreFilterCap().c_str());
_ui->stereobm_preFilterSize->setObjectName(Parameters::kStereoBMPreFilterSize().c_str());
_ui->stereobm_speckleRange->setObjectName(Parameters::kStereoBMSpeckleRange().c_str());
_ui->stereobm_speckleWinSize->setObjectName(Parameters::kStereoBMSpeckleWindowSize().c_str());
_ui->stereobm_tetureThreshold->setObjectName(Parameters::kStereoBMTextureThreshold().c_str());
_ui->stereobm_uniquessRatio->setObjectName(Parameters::kStereoBMUniquenessRatio().c_str());
setupSignals();
// custom signals
@@ -711,7 +730,6 @@ PreferencesDialog::PreferencesDialog(QWidget * parent) :
// This will add all parameters to the parameters Map
_ui->stackedWidget->setCurrentIndex(0);
this->setupTreeView();
connect(_ui->treeView, SIGNAL(clicked(QModelIndex)), this, SLOT(clicked(QModelIndex)));
_obsoletePanels = kPanelAll;
@@ -820,7 +838,10 @@ void PreferencesDialog::setupTreeView()
{
_ui->treeView->setCurrentIndex(_indexModel->index(currentIndex-2, 0));
}
_ui->treeView->expandToDepth(0);
_ui->treeView->expandToDepth(1);
// should be after setModel()
connect(_ui->treeView->selectionModel(), SIGNAL(currentChanged(const QModelIndex &, const QModelIndex &)), this, SLOT(clicked(const QModelIndex &, const QModelIndex &)));
}
// recursive...
@@ -933,9 +954,9 @@ void PreferencesDialog::setupSignals()
}
}
void PreferencesDialog::clicked(const QModelIndex &index)
void PreferencesDialog::clicked(const QModelIndex & current, const QModelIndex & previous)
{
QStandardItem * item = _indexModel->itemFromIndex(index);
QStandardItem * item = _indexModel->itemFromIndex(current);
if(item && item->isEnabled())
{
int index = item->data().toInt();
@@ -2045,7 +2066,7 @@ void PreferencesDialog::showEvent ( QShowEvent * event )
_ui->label_dictionaryPath->setEnabled(false);
_ui->groupBox_source0->setEnabled(false);
_ui->groupBox_odometry2->setEnabled(false);
_ui->groupBox_odometry1->setEnabled(false);
this->setWindowTitle(tr("Preferences [Monitoring mode]"));
}
@@ -2060,7 +2081,7 @@ void PreferencesDialog::showEvent ( QShowEvent * event )
_ui->label_dictionaryPath->setEnabled(true);
_ui->groupBox_source0->setEnabled(true);
_ui->groupBox_odometry2->setEnabled(true);
_ui->groupBox_odometry1->setEnabled(true);
this->setWindowTitle(tr("Preferences"));
}
@@ -4005,7 +4026,7 @@ void PreferencesDialog::testOdometry()
if(camera)
{
CameraThread cameraThread(camera); // take ownership of camera
CameraThread cameraThread(camera, this->getAllParameters()); // take ownership of camera
cameraThread.setMirroringEnabled(isSourceMirroring());
cameraThread.setColorOnly(_ui->checkbox_rgbd_colorOnly->isChecked());
cameraThread.setStereoToDepth(_ui->checkbox_stereo_depthGenerated->isChecked());
@@ -4072,7 +4093,7 @@ void PreferencesDialog::testCamera()
Camera * camera = this->createCamera();
if(camera)
{
CameraThread cameraThread(camera);
CameraThread cameraThread(camera, this->getAllParameters());
cameraThread.setMirroringEnabled(isSourceMirroring());
cameraThread.setColorOnly(_ui->checkbox_rgbd_colorOnly->isChecked());
cameraThread.setStereoToDepth(_ui->checkbox_stereo_depthGenerated->isChecked());
@@ -4123,7 +4144,7 @@ void PreferencesDialog::calibrate()
_calibrationDialog->setSavingDirectory(this->getCameraInfoDir());
_calibrationDialog->registerToEventsManager();
CameraThread cameraThread(camera);
CameraThread cameraThread(camera, this->getAllParameters());
UEventsManager::createPipe(&cameraThread, _calibrationDialog, "CameraEvent");
cameraThread.start();

View File

@@ -50,7 +50,7 @@
<rect>
<x>0</x>
<y>0</y>
<width>196</width>
<width>200</width>
<height>184</height>
</rect>
</property>
@@ -236,7 +236,7 @@
<rect>
<x>0</x>
<y>0</y>
<width>195</width>
<width>199</width>
<height>184</height>
</rect>
</property>
@@ -2061,15 +2061,86 @@
<property name="geometry">
<rect>
<x>0</x>
<y>-57</y>
<width>283</width>
<height>356</height>
<y>-198</y>
<width>263</width>
<height>460</height>
</rect>
</property>
<attribute name="label">
<string>Stereo correspondences</string>
</attribute>
<layout class="QGridLayout" name="gridLayout_13">
<item row="7" column="0">
<widget class="QDoubleSpinBox" name="doubleSpinBox_stereo_flowEps">
<property name="decimals">
<number>4</number>
</property>
<property name="maximum">
<double>1.000000000000000</double>
</property>
<property name="singleStep">
<double>0.010000000000000</double>
</property>
<property name="value">
<double>0.010000000000000</double>
</property>
</widget>
</item>
<item row="6" column="1">
<widget class="QLabel" name="label_58">
<property name="text">
<string>Iterations</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QLabel" name="label_54">
<property name="text">
<string>GFTT quality level</string>
</property>
</widget>
</item>
<item row="12" column="1">
<spacer name="verticalSpacer_6">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
<item row="10" column="0">
<widget class="QCheckBox" name="checkBox_stereo_subpix">
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QLabel" name="label_70">
<property name="text">
<string>GFTT max features</string>
</property>
</widget>
</item>
<item row="7" column="1">
<widget class="QLabel" name="label_59">
<property name="text">
<string>Epsilon</string>
</property>
</widget>
</item>
<item row="5" column="1">
<widget class="QLabel" name="label_57">
<property name="text">
<string>Max level</string>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QSpinBox" name="spinBox_stereo_gfttBlockSize">
<property name="suffix">
@@ -2102,13 +2173,6 @@
</property>
</widget>
</item>
<item row="7" column="1">
<widget class="QLabel" name="label_59">
<property name="text">
<string>Optical Flow eps</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QLabel" name="label_55">
<property name="text">
@@ -2122,7 +2186,7 @@
<string> pixels</string>
</property>
<property name="minimum">
<number>3</number>
<number>6</number>
</property>
<property name="value">
<number>16</number>
@@ -2132,14 +2196,14 @@
<item row="4" column="1">
<widget class="QLabel" name="label_56">
<property name="text">
<string>Optical Flow win size</string>
<string>Win size</string>
</property>
</widget>
</item>
<item row="5" column="0">
<widget class="QSpinBox" name="spinBox_stereo_flowMaxLevel">
<property name="minimum">
<number>1</number>
<number>0</number>
</property>
<property name="value">
<number>3</number>
@@ -2153,47 +2217,10 @@
</property>
</widget>
</item>
<item row="7" column="0">
<widget class="QDoubleSpinBox" name="doubleSpinBox_stereo_flowEps">
<property name="decimals">
<number>4</number>
</property>
<property name="maximum">
<double>1.000000000000000</double>
</property>
<property name="singleStep">
<double>0.010000000000000</double>
</property>
<property name="value">
<double>0.010000000000000</double>
</property>
</widget>
</item>
<item row="5" column="1">
<widget class="QLabel" name="label_57">
<property name="text">
<string>Optical Flow max level</string>
</property>
</widget>
</item>
<item row="6" column="1">
<widget class="QLabel" name="label_58">
<property name="text">
<string>Optical Flow iterations</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QLabel" name="label_54">
<property name="text">
<string>GFTT quality level</string>
</property>
</widget>
</item>
<item row="6" column="0">
<widget class="QSpinBox" name="spinBox_stereo_flowIterations">
<property name="minimum">
<number>1</number>
<number>0</number>
</property>
<property name="maximum">
<number>1000</number>
@@ -2232,7 +2259,7 @@
</property>
</widget>
</item>
<item row="9" column="1">
<item row="10" column="1">
<widget class="QLabel" name="label_62">
<property name="text">
<string>Sub pixel</string>
@@ -2246,33 +2273,6 @@
</property>
</widget>
</item>
<item row="10" column="1">
<spacer name="verticalSpacer_6">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
<item row="9" column="0">
<widget class="QCheckBox" name="checkBox_stereo_subpix">
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QLabel" name="label_70">
<property name="text">
<string>GFTT max features</string>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QSpinBox" name="spinBox_stereo_gfttMaxFeatures">
<property name="suffix">
@@ -2292,6 +2292,40 @@
</property>
</widget>
</item>
<item row="9" column="1">
<widget class="QLabel" name="label_71">
<property name="text">
<string>Optical Flow</string>
</property>
</widget>
</item>
<item row="9" column="0">
<widget class="QCheckBox" name="checkBox_stereo_opticalFlow">
<property name="text">
<string/>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item row="11" column="1">
<widget class="QLabel" name="label_72">
<property name="text">
<string>SSD (otherwise SAD is used)</string>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
<item row="11" column="0">
<widget class="QCheckBox" name="checkBox_stereo_ssd">
<property name="text">
<string/>
</property>
</widget>
</item>
</layout>
</widget>
</widget>

File diff suppressed because it is too large Load Diff