mirror of
https://github.com/introlab/rtabmap.git
synced 2026-09-03 01:50:24 +08:00
Export Added RoiRatios parameter to texturing (#171)
This commit is contained in:
@@ -2735,6 +2735,7 @@ bool RTABMapApp::exportMesh(
|
|||||||
cameraModels,
|
cameraModels,
|
||||||
optimizedMaxTextureDistance,
|
optimizedMaxTextureDistance,
|
||||||
optimizedMinTextureClusterSize,
|
optimizedMinTextureClusterSize,
|
||||||
|
std::vector<float>(),
|
||||||
&progressionStatus_,
|
&progressionStatus_,
|
||||||
&vertexToPixels);
|
&vertexToPixels);
|
||||||
LOGI("Texturing... done! %fs", timer.ticks());
|
LOGI("Texturing... done! %fs", timer.ticks());
|
||||||
|
|||||||
@@ -139,6 +139,7 @@ pcl::TextureMesh::Ptr RTABMAP_EXP createTextureMesh(
|
|||||||
const std::map<int, CameraModel> & cameraModels,
|
const std::map<int, CameraModel> & cameraModels,
|
||||||
float maxDistance = 0.0f, // max camera distance to polygon to apply texture
|
float maxDistance = 0.0f, // max camera distance to polygon to apply texture
|
||||||
int minClusterSize = 50, // minimum size of polygons clusters textured
|
int minClusterSize = 50, // minimum size of polygons clusters textured
|
||||||
|
const std::vector<float> & roiRatios = std::vector<float>(), // [left, right, top, bottom] region of interest (in ratios) of the image projected.
|
||||||
const ProgressState * state = 0,
|
const ProgressState * state = 0,
|
||||||
std::vector<std::map<int, pcl::PointXY> > * vertexToPixels = 0);
|
std::vector<std::map<int, pcl::PointXY> > * vertexToPixels = 0);
|
||||||
|
|
||||||
|
|||||||
@@ -1416,7 +1416,24 @@ pcl::TextureMapping<PointInT>::getPointUVCoordinates(const PointInT &pt, const C
|
|||||||
|
|
||||||
// project point on camera's image plane
|
// project point on camera's image plane
|
||||||
UV_coordinates.x = static_cast<float> ((focal_x * (pt.x / pt.z) + cx) / sizeX); //horizontal
|
UV_coordinates.x = static_cast<float> ((focal_x * (pt.x / pt.z) + cx) / sizeX); //horizontal
|
||||||
UV_coordinates.y = 1.0f - static_cast<float> ((focal_y * (pt.y / pt.z) + cy) / sizeY); //vertical
|
UV_coordinates.y = static_cast<float> ((focal_y * (pt.y / pt.z) + cy) / sizeY); //vertical
|
||||||
|
|
||||||
|
if(cam.roi.size() == 4)
|
||||||
|
{
|
||||||
|
if( UV_coordinates.x < cam.roi[0]/sizeX ||
|
||||||
|
UV_coordinates.y < cam.roi[1]/sizeY ||
|
||||||
|
UV_coordinates.x > (cam.roi[0]+cam.roi[2])/sizeX ||
|
||||||
|
UV_coordinates.y > (cam.roi[1]+cam.roi[3])/sizeY)
|
||||||
|
{
|
||||||
|
// point is NOT in region of interest of the camera
|
||||||
|
UV_coordinates.x = -1.0f;
|
||||||
|
UV_coordinates.y = -1.0f;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// original code of PCL inverted y
|
||||||
|
UV_coordinates.y = 1.0f - UV_coordinates.y;
|
||||||
|
|
||||||
// point is visible!
|
// point is visible!
|
||||||
if (UV_coordinates.x >= 0.0 && UV_coordinates.x <= 1.0 && UV_coordinates.y >= 0.0 && UV_coordinates.y <= 1.0)
|
if (UV_coordinates.x >= 0.0 && UV_coordinates.x <= 1.0 && UV_coordinates.y >= 0.0 && UV_coordinates.y <= 1.0)
|
||||||
|
|||||||
@@ -77,6 +77,7 @@ namespace pcl
|
|||||||
double height;
|
double height;
|
||||||
double width;
|
double width;
|
||||||
std::string texture_file;
|
std::string texture_file;
|
||||||
|
std::vector<double> roi; // [x, y, width, height]
|
||||||
|
|
||||||
EIGEN_MAKE_ALIGNED_OPERATOR_NEW
|
EIGEN_MAKE_ALIGNED_OPERATOR_NEW
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1147,28 +1147,30 @@ cv::Rect computeRoi(const cv::Size & imageSize, const std::vector<float> & roiRa
|
|||||||
UDEBUG("roi = %d, %d, %d, %d", roi.x, roi.y, roi.width, roi.height);
|
UDEBUG("roi = %d, %d, %d, %d", roi.x, roi.y, roi.width, roi.height);
|
||||||
|
|
||||||
//left roi
|
//left roi
|
||||||
if(roiRatios[0] > 0 && roiRatios[0] < 1 - roiRatios[1])
|
if(roiRatios[0] > 0 && roiRatios[0] < 1.0f - roiRatios[1])
|
||||||
{
|
{
|
||||||
roi.x = width * roiRatios[0];
|
roi.x = width * roiRatios[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
//right roi
|
//right roi
|
||||||
if(roiRatios[1] > 0 && roiRatios[1] < 1 - roiRatios[0])
|
if(roiRatios[1] > 0 && roiRatios[1] < 1.0f - roiRatios[0])
|
||||||
{
|
{
|
||||||
roi.width -= width * roiRatios[1] + width * roiRatios[0];
|
roi.width -= width * roiRatios[1];
|
||||||
}
|
}
|
||||||
|
roi.width -= roi.x;
|
||||||
|
|
||||||
//top roi
|
//top roi
|
||||||
if(roiRatios[2] > 0 && roiRatios[2] < 1 - roiRatios[3])
|
if(roiRatios[2] > 0 && roiRatios[2] < 1.0f - roiRatios[3])
|
||||||
{
|
{
|
||||||
roi.y = height * roiRatios[2];
|
roi.y = height * roiRatios[2];
|
||||||
}
|
}
|
||||||
|
|
||||||
//bottom roi
|
//bottom roi
|
||||||
if(roiRatios[3] > 0 && roiRatios[3] < 1 - roiRatios[2])
|
if(roiRatios[3] > 0 && roiRatios[3] < 1.0f - roiRatios[2])
|
||||||
{
|
{
|
||||||
roi.height -= height * roiRatios[3] + height * roiRatios[2];
|
roi.height -= height * roiRatios[3];
|
||||||
}
|
}
|
||||||
|
roi.height -= roi.y;
|
||||||
UDEBUG("roi = %d, %d, %d, %d", roi.x, roi.y, roi.width, roi.height);
|
UDEBUG("roi = %d, %d, %d, %d", roi.x, roi.y, roi.width, roi.height);
|
||||||
|
|
||||||
return roi;
|
return roi;
|
||||||
|
|||||||
@@ -992,10 +992,10 @@ pcl::PointCloud<pcl::PointXYZRGB>::Ptr RTABMAP_EXP cloudRGBFromSensorData(
|
|||||||
cv::Mat depth(sensorData.depthRaw(), cv::Rect(subDepthWidth*i, 0, subDepthWidth, sensorData.depthRaw().rows));
|
cv::Mat depth(sensorData.depthRaw(), cv::Rect(subDepthWidth*i, 0, subDepthWidth, sensorData.depthRaw().rows));
|
||||||
CameraModel model = sensorData.cameraModels()[i];
|
CameraModel model = sensorData.cameraModels()[i];
|
||||||
if( roiRatios.size() == 4 &&
|
if( roiRatios.size() == 4 &&
|
||||||
(roiRatios[0] > 0.0f ||
|
((roiRatios[0] > 0.0f && roiRatios[0] <= 1.0f) ||
|
||||||
roiRatios[1] > 0.0f ||
|
(roiRatios[1] > 0.0f && roiRatios[1] <= 1.0f) ||
|
||||||
roiRatios[2] > 0.0f ||
|
(roiRatios[2] > 0.0f && roiRatios[2] <= 1.0f) ||
|
||||||
roiRatios[3] > 0.0f))
|
(roiRatios[3] > 0.0f && roiRatios[3] <= 1.0f)))
|
||||||
{
|
{
|
||||||
cv::Rect roiDepth = util2d::computeRoi(depth, roiRatios);
|
cv::Rect roiDepth = util2d::computeRoi(depth, roiRatios);
|
||||||
cv::Rect roiRgb = util2d::computeRoi(rgb, roiRatios);
|
cv::Rect roiRgb = util2d::computeRoi(rgb, roiRatios);
|
||||||
|
|||||||
@@ -573,9 +573,11 @@ pcl::PolygonMesh::Ptr createMesh(
|
|||||||
|
|
||||||
pcl::texture_mapping::CameraVector createTextureCameras(
|
pcl::texture_mapping::CameraVector createTextureCameras(
|
||||||
const std::map<int, Transform> & poses,
|
const std::map<int, Transform> & poses,
|
||||||
const std::map<int, CameraModel> & cameraModels)
|
const std::map<int, CameraModel> & cameraModels,
|
||||||
|
const std::vector<float> & roiRatios)
|
||||||
{
|
{
|
||||||
UASSERT(poses.size() == cameraModels.size());
|
UASSERT(poses.size() == cameraModels.size());
|
||||||
|
UASSERT(roiRatios.empty() || roiRatios.size() == 4);
|
||||||
pcl::texture_mapping::CameraVector cameras(poses.size());
|
pcl::texture_mapping::CameraVector cameras(poses.size());
|
||||||
std::map<int, Transform>::const_iterator poseIter=poses.begin();
|
std::map<int, Transform>::const_iterator poseIter=poses.begin();
|
||||||
std::map<int, CameraModel>::const_iterator modelIter=cameraModels.begin();
|
std::map<int, CameraModel>::const_iterator modelIter=cameraModels.begin();
|
||||||
@@ -602,6 +604,14 @@ pcl::texture_mapping::CameraVector createTextureCameras(
|
|||||||
cam.height=modelIter->second.imageHeight();
|
cam.height=modelIter->second.imageHeight();
|
||||||
cam.width=modelIter->second.imageWidth();
|
cam.width=modelIter->second.imageWidth();
|
||||||
cam.texture_file = uFormat("%d", poseIter->first);
|
cam.texture_file = uFormat("%d", poseIter->first);
|
||||||
|
if(!roiRatios.empty())
|
||||||
|
{
|
||||||
|
cam.roi.resize(4);
|
||||||
|
cam.roi[0] = cam.width * roiRatios[0]; // left -> x
|
||||||
|
cam.roi[1] = cam.height * roiRatios[2]; // top -> y
|
||||||
|
cam.roi[2] = cam.width * (1.0 - roiRatios[1]) - cam.roi[0]; // right -> width
|
||||||
|
cam.roi[3] = cam.height * (1.0 - roiRatios[3]) - cam.roi[1]; // bottom -> height
|
||||||
|
}
|
||||||
cameras[oi++] = cam;
|
cameras[oi++] = cam;
|
||||||
}
|
}
|
||||||
return cameras;
|
return cameras;
|
||||||
@@ -613,6 +623,7 @@ pcl::TextureMesh::Ptr createTextureMesh(
|
|||||||
const std::map<int, CameraModel> & cameraModels,
|
const std::map<int, CameraModel> & cameraModels,
|
||||||
float maxDistance,
|
float maxDistance,
|
||||||
int minClusterSize,
|
int minClusterSize,
|
||||||
|
const std::vector<float> & roiRatios,
|
||||||
const ProgressState * state,
|
const ProgressState * state,
|
||||||
std::vector<std::map<int, pcl::PointXY> > * vertexToPixels)
|
std::vector<std::map<int, pcl::PointXY> > * vertexToPixels)
|
||||||
{
|
{
|
||||||
@@ -629,7 +640,8 @@ pcl::TextureMesh::Ptr createTextureMesh(
|
|||||||
// create cameras
|
// create cameras
|
||||||
pcl::texture_mapping::CameraVector cameras = createTextureCameras(
|
pcl::texture_mapping::CameraVector cameras = createTextureCameras(
|
||||||
poses,
|
poses,
|
||||||
cameraModels);
|
cameraModels,
|
||||||
|
roiRatios);
|
||||||
|
|
||||||
// Create materials for each texture (and one extra for occluded faces)
|
// Create materials for each texture (and one extra for occluded faces)
|
||||||
textureMesh->tex_materials.resize (cameras.size () + 1);
|
textureMesh->tex_materials.resize (cameras.size () + 1);
|
||||||
|
|||||||
@@ -159,6 +159,7 @@ ExportCloudsDialog::ExportCloudsDialog(QWidget *parent) :
|
|||||||
connect(_ui->comboBox_meshingTextureSize, SIGNAL(currentIndexChanged(int)), this, SIGNAL(configChanged()));
|
connect(_ui->comboBox_meshingTextureSize, SIGNAL(currentIndexChanged(int)), this, SIGNAL(configChanged()));
|
||||||
connect(_ui->doubleSpinBox_meshingTextureMaxDistance, SIGNAL(valueChanged(double)), this, SIGNAL(configChanged()));
|
connect(_ui->doubleSpinBox_meshingTextureMaxDistance, SIGNAL(valueChanged(double)), this, SIGNAL(configChanged()));
|
||||||
connect(_ui->spinBox_mesh_minTextureClusterSize, SIGNAL(valueChanged(int)), this, SIGNAL(configChanged()));
|
connect(_ui->spinBox_mesh_minTextureClusterSize, SIGNAL(valueChanged(int)), this, SIGNAL(configChanged()));
|
||||||
|
connect(_ui->lineEdit_meshingTextureRoiRatios, SIGNAL(textChanged(const QString &)), this, SIGNAL(configChanged()));
|
||||||
connect(_ui->checkBox_cameraFilter, SIGNAL(stateChanged(int)), this, SIGNAL(configChanged()));
|
connect(_ui->checkBox_cameraFilter, SIGNAL(stateChanged(int)), this, SIGNAL(configChanged()));
|
||||||
connect(_ui->checkBox_cameraFilter, SIGNAL(stateChanged(int)), this, SLOT(updateReconstructionFlavor()));
|
connect(_ui->checkBox_cameraFilter, SIGNAL(stateChanged(int)), this, SLOT(updateReconstructionFlavor()));
|
||||||
connect(_ui->doubleSpinBox_cameraFilterRadius, SIGNAL(valueChanged(double)), this, SIGNAL(configChanged()));
|
connect(_ui->doubleSpinBox_cameraFilterRadius, SIGNAL(valueChanged(double)), this, SIGNAL(configChanged()));
|
||||||
@@ -286,6 +287,7 @@ void ExportCloudsDialog::saveSettings(QSettings & settings, const QString & grou
|
|||||||
settings.setValue("mesh_textureSize", _ui->comboBox_meshingTextureSize->currentIndex());
|
settings.setValue("mesh_textureSize", _ui->comboBox_meshingTextureSize->currentIndex());
|
||||||
settings.setValue("mesh_textureMaxDistance", _ui->doubleSpinBox_meshingTextureMaxDistance->value());
|
settings.setValue("mesh_textureMaxDistance", _ui->doubleSpinBox_meshingTextureMaxDistance->value());
|
||||||
settings.setValue("mesh_textureMinCluster", _ui->spinBox_mesh_minTextureClusterSize->value());
|
settings.setValue("mesh_textureMinCluster", _ui->spinBox_mesh_minTextureClusterSize->value());
|
||||||
|
settings.setValue("mesh_textureRoiRatios", _ui->lineEdit_meshingTextureRoiRatios->text());
|
||||||
settings.setValue("mesh_textureCameraFiltering", _ui->checkBox_cameraFilter->isChecked());
|
settings.setValue("mesh_textureCameraFiltering", _ui->checkBox_cameraFilter->isChecked());
|
||||||
settings.setValue("mesh_textureCameraFilteringRadius", _ui->doubleSpinBox_cameraFilterRadius->value());
|
settings.setValue("mesh_textureCameraFilteringRadius", _ui->doubleSpinBox_cameraFilterRadius->value());
|
||||||
settings.setValue("mesh_textureCameraFilteringAngle", _ui->doubleSpinBox_cameraFilterAngle->value());
|
settings.setValue("mesh_textureCameraFilteringAngle", _ui->doubleSpinBox_cameraFilterAngle->value());
|
||||||
@@ -384,6 +386,7 @@ void ExportCloudsDialog::loadSettings(QSettings & settings, const QString & grou
|
|||||||
_ui->comboBox_meshingTextureSize->setCurrentIndex(settings.value("mesh_textureSize", _ui->comboBox_meshingTextureSize->currentIndex()).toInt());
|
_ui->comboBox_meshingTextureSize->setCurrentIndex(settings.value("mesh_textureSize", _ui->comboBox_meshingTextureSize->currentIndex()).toInt());
|
||||||
_ui->doubleSpinBox_meshingTextureMaxDistance->setValue(settings.value("mesh_textureMaxDistance", _ui->doubleSpinBox_meshingTextureMaxDistance->value()).toDouble());
|
_ui->doubleSpinBox_meshingTextureMaxDistance->setValue(settings.value("mesh_textureMaxDistance", _ui->doubleSpinBox_meshingTextureMaxDistance->value()).toDouble());
|
||||||
_ui->spinBox_mesh_minTextureClusterSize->setValue(settings.value("mesh_textureMinCluster", _ui->spinBox_mesh_minTextureClusterSize->value()).toDouble());
|
_ui->spinBox_mesh_minTextureClusterSize->setValue(settings.value("mesh_textureMinCluster", _ui->spinBox_mesh_minTextureClusterSize->value()).toDouble());
|
||||||
|
_ui->lineEdit_meshingTextureRoiRatios->setText(settings.value("mesh_textureRoiRatios", _ui->lineEdit_meshingTextureRoiRatios->text()).toString());
|
||||||
_ui->checkBox_cameraFilter->setChecked(settings.value("mesh_textureCameraFiltering", _ui->checkBox_cameraFilter->isChecked()).toBool());
|
_ui->checkBox_cameraFilter->setChecked(settings.value("mesh_textureCameraFiltering", _ui->checkBox_cameraFilter->isChecked()).toBool());
|
||||||
_ui->doubleSpinBox_cameraFilterRadius->setValue(settings.value("mesh_textureCameraFilteringRadius", _ui->doubleSpinBox_cameraFilterRadius->value()).toDouble());
|
_ui->doubleSpinBox_cameraFilterRadius->setValue(settings.value("mesh_textureCameraFilteringRadius", _ui->doubleSpinBox_cameraFilterRadius->value()).toDouble());
|
||||||
_ui->doubleSpinBox_cameraFilterAngle->setValue(settings.value("mesh_textureCameraFilteringAngle", _ui->doubleSpinBox_cameraFilterAngle->value()).toDouble());
|
_ui->doubleSpinBox_cameraFilterAngle->setValue(settings.value("mesh_textureCameraFilteringAngle", _ui->doubleSpinBox_cameraFilterAngle->value()).toDouble());
|
||||||
@@ -482,6 +485,7 @@ void ExportCloudsDialog::restoreDefaults()
|
|||||||
_ui->comboBox_meshingTextureSize->setCurrentIndex(5); // 4096
|
_ui->comboBox_meshingTextureSize->setCurrentIndex(5); // 4096
|
||||||
_ui->doubleSpinBox_meshingTextureMaxDistance->setValue(3.0);
|
_ui->doubleSpinBox_meshingTextureMaxDistance->setValue(3.0);
|
||||||
_ui->spinBox_mesh_minTextureClusterSize->setValue(50);
|
_ui->spinBox_mesh_minTextureClusterSize->setValue(50);
|
||||||
|
_ui->lineEdit_meshingTextureRoiRatios->setText("");
|
||||||
_ui->checkBox_cameraFilter->setChecked(false);
|
_ui->checkBox_cameraFilter->setChecked(false);
|
||||||
_ui->doubleSpinBox_cameraFilterRadius->setValue(0.1);
|
_ui->doubleSpinBox_cameraFilterRadius->setValue(0.1);
|
||||||
_ui->doubleSpinBox_cameraFilterAngle->setValue(30);
|
_ui->doubleSpinBox_cameraFilterAngle->setValue(30);
|
||||||
@@ -1940,12 +1944,42 @@ bool ExportCloudsDialog::getExportedClouds(
|
|||||||
|
|
||||||
TexturingState texturingState(_progressDialog);
|
TexturingState texturingState(_progressDialog);
|
||||||
_progressDialog->setMaximumSteps(_progressDialog->maximumSteps()+iter->second->polygons.size()/10000+1);
|
_progressDialog->setMaximumSteps(_progressDialog->maximumSteps()+iter->second->polygons.size()/10000+1);
|
||||||
|
|
||||||
|
std::vector<float> roiRatios;
|
||||||
|
QStringList strings = _ui->lineEdit_meshingTextureRoiRatios->text().split(' ');
|
||||||
|
if(!_ui->lineEdit_meshingTextureRoiRatios->text().isEmpty())
|
||||||
|
{
|
||||||
|
if(strings.size()==4)
|
||||||
|
{
|
||||||
|
roiRatios.resize(4);
|
||||||
|
roiRatios[0]=strings[0].toDouble();
|
||||||
|
roiRatios[1]=strings[1].toDouble();
|
||||||
|
roiRatios[2]=strings[2].toDouble();
|
||||||
|
roiRatios[3]=strings[3].toDouble();
|
||||||
|
if(!(roiRatios[0]>=0.0f && roiRatios[0]<=1.0f &&
|
||||||
|
roiRatios[1]>=0.0f && roiRatios[1]<=1.0f &&
|
||||||
|
roiRatios[2]>=0.0f && roiRatios[2]<=1.0f &&
|
||||||
|
roiRatios[3]>=0.0f && roiRatios[3]<=1.0f))
|
||||||
|
{
|
||||||
|
roiRatios.clear();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(roiRatios.empty())
|
||||||
|
{
|
||||||
|
QString msg = tr("Wrong ROI format. Region of Interest (ROI) must have 4 values [left right top bottom] between 0 and 1 separated by space (%1), ignoring it for texturing...").arg(_ui->lineEdit_meshingTextureRoiRatios->text());
|
||||||
|
UWARN(msg.toStdString().c_str());
|
||||||
|
_progressDialog->appendText(msg, Qt::darkYellow);
|
||||||
|
_progressDialog->setAutoClose(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
textureMesh = util3d::createTextureMesh(
|
textureMesh = util3d::createTextureMesh(
|
||||||
iter->second,
|
iter->second,
|
||||||
cameraPoses,
|
cameraPoses,
|
||||||
cameraModels,
|
cameraModels,
|
||||||
_ui->doubleSpinBox_meshingTextureMaxDistance->value(),
|
_ui->doubleSpinBox_meshingTextureMaxDistance->value(),
|
||||||
_ui->spinBox_mesh_minTextureClusterSize->value(),
|
_ui->spinBox_mesh_minTextureClusterSize->value(),
|
||||||
|
roiRatios,
|
||||||
&texturingState,
|
&texturingState,
|
||||||
cameraPoses.size()>1?&textureVertexToPixels:0); // only get vertexToPixels if merged clouds with multi textures
|
cameraPoses.size()>1?&textureVertexToPixels:0); // only get vertexToPixels if merged clouds with multi textures
|
||||||
|
|
||||||
|
|||||||
@@ -23,9 +23,9 @@
|
|||||||
<property name="geometry">
|
<property name="geometry">
|
||||||
<rect>
|
<rect>
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>-1967</y>
|
<y>-1802</y>
|
||||||
<width>773</width>
|
<width>778</width>
|
||||||
<height>3396</height>
|
<height>3385</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QVBoxLayout" name="verticalLayout_13">
|
<layout class="QVBoxLayout" name="verticalLayout_13">
|
||||||
@@ -1373,40 +1373,61 @@ Guidelines: 4 times the voxel size, 0.025 for voxel=0.</string>
|
|||||||
<layout class="QVBoxLayout" name="verticalLayout_16">
|
<layout class="QVBoxLayout" name="verticalLayout_16">
|
||||||
<item>
|
<item>
|
||||||
<layout class="QGridLayout" name="gridLayout_15" columnstretch="0,1">
|
<layout class="QGridLayout" name="gridLayout_15" columnstretch="0,1">
|
||||||
<item row="0" column="1">
|
<item row="7" column="0">
|
||||||
<widget class="QLabel" name="label_meshingTextureFormat">
|
<widget class="QComboBox" name="comboBox_blendingDecimation">
|
||||||
|
<item>
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Texture format.</string>
|
<string>Auto</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>1</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>2</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>4</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>8</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>16</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>32</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>64</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="6" column="1">
|
||||||
|
<widget class="QLabel" name="label_exposureFusion_2">
|
||||||
|
<property name="text">
|
||||||
|
<string>Blending. Only used with dense reconstruction flavor and if clouds are assembled.</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="wordWrap">
|
<property name="wordWrap">
|
||||||
<bool>true</bool>
|
<bool>true</bool>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="8" column="0">
|
<item row="3" column="1">
|
||||||
<widget class="QSpinBox" name="spinBox_textureBrightnessContrastRatioHigh">
|
|
||||||
<property name="suffix">
|
|
||||||
<string> %</string>
|
|
||||||
</property>
|
|
||||||
<property name="minimum">
|
|
||||||
<number>0</number>
|
|
||||||
</property>
|
|
||||||
<property name="maximum">
|
|
||||||
<number>49</number>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="3" column="0">
|
|
||||||
<widget class="QSpinBox" name="spinBox_mesh_minTextureClusterSize">
|
|
||||||
<property name="minimum">
|
|
||||||
<number>0</number>
|
|
||||||
</property>
|
|
||||||
<property name="maximum">
|
|
||||||
<number>99999</number>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="2" column="1">
|
|
||||||
<widget class="QLabel" name="label_meshingTextureSize_2">
|
<widget class="QLabel" name="label_meshingTextureSize_2">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Maximum distance from the camera for polygons to be textured by this camera (0 means infinite). Only used with dense reconstruction flavor.</string>
|
<string>Maximum distance from the camera for polygons to be textured by this camera (0 means infinite). Only used with dense reconstruction flavor.</string>
|
||||||
@@ -1416,20 +1437,42 @@ Guidelines: 4 times the voxel size, 0.025 for voxel=0.</string>
|
|||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="10" column="1">
|
<item row="3" column="0">
|
||||||
<widget class="QLabel" name="label_exposureFusion">
|
<widget class="QDoubleSpinBox" name="doubleSpinBox_meshingTextureMaxDistance">
|
||||||
|
<property name="suffix">
|
||||||
|
<string> m</string>
|
||||||
|
</property>
|
||||||
|
<property name="decimals">
|
||||||
|
<number>1</number>
|
||||||
|
</property>
|
||||||
|
<property name="minimum">
|
||||||
|
<double>0.000000000000000</double>
|
||||||
|
</property>
|
||||||
|
<property name="maximum">
|
||||||
|
<double>99.000000000000000</double>
|
||||||
|
</property>
|
||||||
|
<property name="singleStep">
|
||||||
|
<double>1.000000000000000</double>
|
||||||
|
</property>
|
||||||
|
<property name="value">
|
||||||
|
<double>3.000000000000000</double>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="8" column="1">
|
||||||
|
<widget class="QLabel" name="label_meshingTextureSize_5">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Exposure fusion. Only used when textures are merged and brightness/contrast balance ratios are used (merging original texture + 1 for each ratios).</string>
|
<string>Brightness and contrast balance low ratio. Only used when textures are merged.</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="wordWrap">
|
<property name="wordWrap">
|
||||||
<bool>true</bool>
|
<bool>true</bool>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="4" column="1">
|
<item row="0" column="1">
|
||||||
<widget class="QLabel" name="label_meshingTextureSize_3">
|
<widget class="QLabel" name="label_meshingTextureFormat">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Camera filtering. By comparing poses in the same area, only one camera in a fixed radius and angle is used for texturing.</string>
|
<string>Texture format.</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="wordWrap">
|
<property name="wordWrap">
|
||||||
<bool>true</bool>
|
<bool>true</bool>
|
||||||
@@ -1460,13 +1503,43 @@ Guidelines: 4 times the voxel size, 0.025 for voxel=0.</string>
|
|||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="4" column="0">
|
<item row="9" column="0">
|
||||||
|
<widget class="QSpinBox" name="spinBox_textureBrightnessContrastRatioHigh">
|
||||||
|
<property name="suffix">
|
||||||
|
<string> %</string>
|
||||||
|
</property>
|
||||||
|
<property name="minimum">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="maximum">
|
||||||
|
<number>49</number>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="6" column="0">
|
||||||
|
<widget class="QCheckBox" name="checkBox_blending">
|
||||||
|
<property name="text">
|
||||||
|
<string/>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="5" column="0">
|
||||||
<widget class="QCheckBox" name="checkBox_cameraFilter">
|
<widget class="QCheckBox" name="checkBox_cameraFilter">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string/>
|
<string/>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
<item row="9" column="1">
|
||||||
|
<widget class="QLabel" name="label_meshingTextureSize_6">
|
||||||
|
<property name="text">
|
||||||
|
<string>Brightness and contrast balance high ratio. Only used when textures are merged.</string>
|
||||||
|
</property>
|
||||||
|
<property name="wordWrap">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
<item row="1" column="0">
|
<item row="1" column="0">
|
||||||
<widget class="QComboBox" name="comboBox_meshingTextureSize">
|
<widget class="QComboBox" name="comboBox_meshingTextureSize">
|
||||||
<item>
|
<item>
|
||||||
@@ -1516,27 +1589,7 @@ Guidelines: 4 times the voxel size, 0.025 for voxel=0.</string>
|
|||||||
</item>
|
</item>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="7" column="1">
|
<item row="8" column="0">
|
||||||
<widget class="QLabel" name="label_meshingTextureSize_5">
|
|
||||||
<property name="text">
|
|
||||||
<string>Brightness and contrast balance low ratio. Only used when textures are merged.</string>
|
|
||||||
</property>
|
|
||||||
<property name="wordWrap">
|
|
||||||
<bool>true</bool>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="3" column="1">
|
|
||||||
<widget class="QLabel" name="label_meshingTextureSize_4">
|
|
||||||
<property name="text">
|
|
||||||
<string>Minimum polygon cluster size for texturing. This removes textures applied on sparse polygons. Only used with dense reconstruction flavor.</string>
|
|
||||||
</property>
|
|
||||||
<property name="wordWrap">
|
|
||||||
<bool>true</bool>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="7" column="0">
|
|
||||||
<widget class="QSpinBox" name="spinBox_textureBrightnessContrastRatioLow">
|
<widget class="QSpinBox" name="spinBox_textureBrightnessContrastRatioLow">
|
||||||
<property name="suffix">
|
<property name="suffix">
|
||||||
<string> %</string>
|
<string> %</string>
|
||||||
@@ -1549,63 +1602,24 @@ Guidelines: 4 times the voxel size, 0.025 for voxel=0.</string>
|
|||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="2" column="0">
|
<item row="11" column="0">
|
||||||
<widget class="QDoubleSpinBox" name="doubleSpinBox_meshingTextureMaxDistance">
|
|
||||||
<property name="suffix">
|
|
||||||
<string> m</string>
|
|
||||||
</property>
|
|
||||||
<property name="decimals">
|
|
||||||
<number>1</number>
|
|
||||||
</property>
|
|
||||||
<property name="minimum">
|
|
||||||
<double>0.000000000000000</double>
|
|
||||||
</property>
|
|
||||||
<property name="maximum">
|
|
||||||
<double>99.000000000000000</double>
|
|
||||||
</property>
|
|
||||||
<property name="singleStep">
|
|
||||||
<double>1.000000000000000</double>
|
|
||||||
</property>
|
|
||||||
<property name="value">
|
|
||||||
<double>3.000000000000000</double>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="8" column="1">
|
|
||||||
<widget class="QLabel" name="label_meshingTextureSize_6">
|
|
||||||
<property name="text">
|
|
||||||
<string>Brightness and contrast balance high ratio. Only used when textures are merged.</string>
|
|
||||||
</property>
|
|
||||||
<property name="wordWrap">
|
|
||||||
<bool>true</bool>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="10" column="0">
|
|
||||||
<widget class="QCheckBox" name="checkBox_exposureFusion">
|
<widget class="QCheckBox" name="checkBox_exposureFusion">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string/>
|
<string/>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="5" column="0">
|
<item row="4" column="0">
|
||||||
<widget class="QCheckBox" name="checkBox_blending">
|
<widget class="QSpinBox" name="spinBox_mesh_minTextureClusterSize">
|
||||||
<property name="text">
|
<property name="minimum">
|
||||||
<string/>
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="maximum">
|
||||||
|
<number>99999</number>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="5" column="1">
|
<item row="7" column="1">
|
||||||
<widget class="QLabel" name="label_exposureFusion_2">
|
|
||||||
<property name="text">
|
|
||||||
<string>Blending. Only used with dense reconstruction flavor and if clouds are assembled.</string>
|
|
||||||
</property>
|
|
||||||
<property name="wordWrap">
|
|
||||||
<bool>true</bool>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="6" column="1">
|
|
||||||
<widget class="QLabel" name="label_exposureFusion_3">
|
<widget class="QLabel" name="label_exposureFusion_3">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Blending decimation. </string>
|
<string>Blending decimation. </string>
|
||||||
@@ -1615,50 +1629,49 @@ Guidelines: 4 times the voxel size, 0.025 for voxel=0.</string>
|
|||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="6" column="0">
|
<item row="4" column="1">
|
||||||
<widget class="QComboBox" name="comboBox_blendingDecimation">
|
<widget class="QLabel" name="label_meshingTextureSize_4">
|
||||||
<item>
|
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Auto</string>
|
<string>Minimum polygon cluster size for texturing. This removes textures applied on sparse polygons. Only used with dense reconstruction flavor.</string>
|
||||||
</property>
|
</property>
|
||||||
</item>
|
<property name="wordWrap">
|
||||||
<item>
|
<bool>true</bool>
|
||||||
<property name="text">
|
|
||||||
<string>1</string>
|
|
||||||
</property>
|
</property>
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string>2</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string>4</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string>8</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string>16</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string>32</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string>64</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
<item row="5" column="1">
|
||||||
|
<widget class="QLabel" name="label_meshingTextureSize_3">
|
||||||
|
<property name="text">
|
||||||
|
<string>Camera filtering. By comparing poses in the same area, only one camera in a fixed radius and angle is used for texturing.</string>
|
||||||
|
</property>
|
||||||
|
<property name="wordWrap">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="11" column="1">
|
||||||
|
<widget class="QLabel" name="label_exposureFusion">
|
||||||
|
<property name="text">
|
||||||
|
<string>Exposure fusion. Only used when textures are merged and brightness/contrast balance ratios are used (merging original texture + 1 for each ratios).</string>
|
||||||
|
</property>
|
||||||
|
<property name="wordWrap">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="1">
|
||||||
|
<widget class="QLabel" name="label_meshingTextureSize_7">
|
||||||
|
<property name="text">
|
||||||
|
<string>ROI ratios [left right top bottom] between 0 and 1. This can be used to ignore black borders of RGB images caused by calibration. </string>
|
||||||
|
</property>
|
||||||
|
<property name="wordWrap">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="0">
|
||||||
|
<widget class="QLineEdit" name="lineEdit_meshingTextureRoiRatios"/>
|
||||||
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
|
|||||||
@@ -63,7 +63,7 @@
|
|||||||
<property name="geometry">
|
<property name="geometry">
|
||||||
<rect>
|
<rect>
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>-433</y>
|
<y>-641</y>
|
||||||
<width>678</width>
|
<width>678</width>
|
||||||
<height>2701</height>
|
<height>2701</height>
|
||||||
</rect>
|
</rect>
|
||||||
@@ -86,7 +86,7 @@
|
|||||||
<enum>QFrame::Raised</enum>
|
<enum>QFrame::Raised</enum>
|
||||||
</property>
|
</property>
|
||||||
<property name="currentIndex">
|
<property name="currentIndex">
|
||||||
<number>5</number>
|
<number>20</number>
|
||||||
</property>
|
</property>
|
||||||
<widget class="QWidget" name="page_22">
|
<widget class="QWidget" name="page_22">
|
||||||
<layout class="QVBoxLayout" name="verticalLayout_29" stretch="0,1">
|
<layout class="QVBoxLayout" name="verticalLayout_29" stretch="0,1">
|
||||||
@@ -775,7 +775,7 @@ Show a yellow background when the number of odometry inliers goes under this thr
|
|||||||
<item row="5" column="2">
|
<item row="5" column="2">
|
||||||
<widget class="QLabel" name="label_353">
|
<widget class="QLabel" name="label_353">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>ROI ratios [left, right, top, bottom] between 0 and 1.</string>
|
<string>ROI ratios [left right top bottom] between 0 and 1.</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="wordWrap">
|
<property name="wordWrap">
|
||||||
<bool>true</bool>
|
<bool>true</bool>
|
||||||
@@ -11484,7 +11484,7 @@ Lower the ratio -> higher the precision. 0 means disabled, matching the neare
|
|||||||
<item row="5" column="1">
|
<item row="5" column="1">
|
||||||
<widget class="QLabel" name="label_261">
|
<widget class="QLabel" name="label_261">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>ROI ratios [left, right, top, bottom] between 0 and 1.</string>
|
<string>ROI ratios [left right top bottom] between 0 and 1.</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="wordWrap">
|
<property name="wordWrap">
|
||||||
<bool>true</bool>
|
<bool>true</bool>
|
||||||
|
|||||||
Reference in New Issue
Block a user