Exemple #1
-5
double calculatePixelAccuracy(const LabelImage& prediction, const LabelImage& groundTruth,
        const bool includeVoid, ConfusionMatrix* confusionMatrix) {

    size_t correct = 0;
    size_t wrong = 0;

    if (confusionMatrix) {
        LabelType numClasses = 0;
        for (int y = 0; y < groundTruth.getHeight(); ++y) {
            for (int x = 0; x < groundTruth.getWidth(); ++x) {
                numClasses = std::max(numClasses, groundTruth.getLabel(x, y));
            }
        }
        numClasses++;
        if (confusionMatrix->getNumClasses() < numClasses) {
            confusionMatrix->resize(numClasses);
            confusionMatrix->reset();
        }
    }

    for (int y = 0; y < prediction.getHeight(); ++y) {
        for (int x = 0; x < prediction.getWidth(); ++x) {
            const LabelType label = groundTruth.getLabel(x, y);

            if (!includeVoid && label == 0) {
                // skip void
                continue;
            }

            const LabelType predictedClass = prediction.getLabel(x, y);

            if (predictedClass == label) {
                correct++;
            } else {
                wrong++;
            }

            if (confusionMatrix) {
                confusionMatrix->increment(label, predictedClass);
            }
        }
    }

    size_t numPixels;

    if (includeVoid) {
        numPixels = prediction.getWidth() * prediction.getHeight();
    } else {
        numPixels = correct + wrong;
    }
    return static_cast<double>(correct) / numPixels;
}
Exemple #2
-6
double calculatePixelAccuracy(const LabelImage& prediction, const LabelImage& groundTruth,
        const bool includeVoid, const std::vector<LabelType>* ignoredLabels,  ConfusionMatrix* confusionMatrix) {

    size_t correct = 0;
    size_t wrong = 0;

    if (confusionMatrix) {
        LabelType numClasses = 0;
        for (int y = 0; y < groundTruth.getHeight(); ++y) {
            for (int x = 0; x < groundTruth.getWidth(); ++x) {
                numClasses = std::max(numClasses, groundTruth.getLabel(x, y));
            }
        }
        numClasses++;
        if (confusionMatrix->getNumClasses() < numClasses) {
            confusionMatrix->resize(numClasses);
            confusionMatrix->reset();
        }
    }

    for (int y = 0; y < prediction.getHeight(); ++y) {
        for (int x = 0; x < prediction.getWidth(); ++x) {
            const LabelType label = groundTruth.getLabel(x, y);

            bool ignore = false;
	    // assert(!includeVoid && ignoredLabels);
            if (!includeVoid && !ignoredLabels->empty())
            	for (LabelType ID: *ignoredLabels)
            		if (ID == label)
           			{
           				ignore = true;
           				break;
           			}
            if (ignore)
            	continue;


            const LabelType predictedClass = prediction.getLabel(x, y);

            if (predictedClass == label) {
                correct++;
            } else {
                wrong++;
            }

            if (confusionMatrix) {
                confusionMatrix->increment(label, predictedClass);
            }
        }
    }

    size_t numPixels;

    if (includeVoid) {
        numPixels = prediction.getWidth() * prediction.getHeight();
    } else {
        numPixels = correct + wrong;
    }
    return static_cast<double>(correct) / numPixels;
}