SingleClassifier.java
// SPDX-FileCopyrightText: 2018 - 2020 QuPath developers, The University of Edinburgh
//
// SPDX-License-Identifier: AGPL-3.0-or-later
package qupath.ext.braian;
import qupath.lib.classifiers.object.AbstractObjectClassifier;
import qupath.lib.images.ImageData;
import qupath.lib.objects.PathObject;
import qupath.lib.objects.PathObjectFilter;
import qupath.lib.objects.classes.PathClass;
import qupath.lib.objects.classes.PathClassTools;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Map;
public class SingleClassifier<T> extends AbstractObjectClassifier<T> {
private final PathClass pathClass;
private final List<PathClass> pathClasses;
public SingleClassifier(PathClass pathClass) {
super(PathObjectFilter.DETECTIONS_ALL);
this.pathClass = pathClass;
this.pathClasses = Collections.unmodifiableList(List.of(pathClass));
}
@Override
public Collection<PathClass> getPathClasses() {
return pathClasses;
}
@Override
public int classifyObjects(ImageData<T> imageData, Collection<? extends PathObject> pathObjects, boolean resetExistingClass) {
int n = 0;
for (var pathObject : pathObjects) {
var previousClass = pathObject.getPathClass();
if (resetExistingClass)
pathObject.resetPathClass();
if (this.pathClass != null) {
var currentClass = pathObject.getPathClass();
if (currentClass == null)
pathObject.setPathClass(this.pathClass);
else
pathObject.setPathClass(
PathClassTools.mergeClasses(currentClass, this.pathClass)
);
}
if (previousClass != pathObject.getPathClass())
n++;
}
return n;
}
@Override
public Map<String, Integer> getMissingFeatures(ImageData<T> imageData, Collection<? extends PathObject> pathObjects) {
return Collections.emptyMap();
}
}