void SegmentationImpl::saveResult() { try { fs::path outputFolder(outputSettings()->resultPath()); if (outputSettings()->subFolderByDate()) { outputFolder /= currentDateString(); } fs::create_directories(outputFolder); // compute filename (remove possible exisiting datetime prefix when loading an image from the results folder) std::string colorFilenameStr = fs::path(inputSettings()->color()).filename().string(); boost::regex re("^\\d{8}_\\d{6}_"); colorFilenameStr = boost::regex_replace(colorFilenameStr, re, ""); if (outputSettings()->prefixDateTime()) { colorFilenameStr = currentDateTimeString() + "_" + colorFilenameStr; } // Note: we don't save groundTruthLabelMapping, since it will already be applied to the save ground truth image. fs::path colorFilename = colorFilenameStr; fs::path depthFilename = replaceString(colorFilenameStr, inputSettings()->colorMatch(), inputSettings()->depthReplace()); fs::path depthFilenameNormalized = depthFilename.stem().string() + "_norm" + depthFilename.extension().string(); fs::path groundTruthFilename = replaceString(colorFilenameStr, inputSettings()->colorMatch(), inputSettings()->groundTruthReplace()); fs::path groundTruthFilenameNormalized = groundTruthFilename.stem().string() + "_norm" + groundTruthFilename.extension().string(); fs::path scribbleFilename = replaceString(colorFilenameStr, inputSettings()->colorMatch(), inputSettings()->scribblesReplace()); fs::path settingsFilename = replaceString(colorFilenameStr, inputSettings()->colorMatch(), inputSettings()->settingsReplace()); fs::path solutionFilename = replaceString(colorFilenameStr, inputSettings()->colorMatch(), outputSettings()->solutionReplace()); fs::path solutionFilenameNormalized = solutionFilename.stem().string() + "_norm" + solutionFilename.extension().string(); fs::path weightFilename = replaceString(colorFilenameStr, inputSettings()->colorMatch(), outputSettings()->weightReplace()); fs::path datatermFilename = replaceString(colorFilenameStr, inputSettings()->colorMatch(), outputSettings()->datatermReplace()); fs::path datatermFilenameEqual = datatermFilename.stem().string() + "_equalized" + datatermFilename.extension().string(); fs::path visualizationFilename = replaceString(colorFilenameStr, inputSettings()->colorMatch(), outputSettings()->visualizationReplace()); fs::path metricsFilename = replaceString(colorFilenameStr, inputSettings()->colorMatch(), outputSettings()->metricsReplace()); std::string colorPath = (outputFolder / colorFilename).string(); if (inputImageColorAvailable()) { saveImage(colorPath, inputImageColor()); } if (inputImageDepthAvailable()) { saveDepthImage((outputFolder / depthFilename).string(), inputImageDepth()); saveDepthImage((outputFolder / depthFilenameNormalized).string(), inputImageDepth(), true); } if (inputImageGroundTruthAvailable()) { saveImage((outputFolder / groundTruthFilename).string(), inputImageGroundTruth(), false); saveImage((outputFolder / groundTruthFilenameNormalized).string(), inputImageGroundTruth(), true); } saveScribbleImage((outputFolder / scribbleFilename).string(), scribbles_); if (solutionAvailable()) { saveImage((outputFolder / solutionFilename).string(), solution(), false); saveImage((outputFolder / solutionFilenameNormalized).string(), solution(), true); } if (weightAvailable()) { saveImage((outputFolder / weightFilename).string(), weight(), true); } if (datatermAvailable()) { saveImage((outputFolder / datatermFilename).string(), dataterm(), true); saveImage((outputFolder / datatermFilenameEqual).string(), dataterm(), true, true); } if (tvvisualizer_->visualizationAvailable()) { saveImage((outputFolder / visualizationFilename).string(), tvvisualizer_->visualization()); } settings::BackendPtr backend(new settings::Backend()); copyAlgorithmicSettings(settingsBackend_, backend); InputSettings inputSettings(backend); inputSettings.set_color(colorPath); inputSettings.set_overrideGroundTruthLabelMapping(false); settings::SerializerQt serializer(backend, (outputFolder / settingsFilename).string(), false); serializer.save(); if (solutionAvailable() && inputImageGroundTruthAvailable()) { saveMetrics((outputFolder / metricsFilename).string(), computeMetrics()); } } catch (const fs::filesystem_error& ex) { LERROR << "Failed to save result with filesystem error: " << ex.what(); } }
void SettingsDialog::on_tabWidget_currentChanged(int index) { if (index == 3) { outputSettings(); } }