예제 #1
0
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();
    }
}
예제 #2
0
void SettingsDialog::on_tabWidget_currentChanged(int index) {
    if (index == 3) {
        outputSettings();
    }
}