/// <summary> /// fügt alle <see cref="ImageObject"/>s des <see cref="ObjectLayer"/> zu den <see cref="Instances"/> hinzu /// </summary> /// <param name="instances">Datensatz</param> /// <param name="objectLayer">auszuwertender <see cref="ObjectLayer"/></param> public static void AddImageObjects(this Instances instances, ObjectLayer objectLayer) { foreach (var io in objectLayer.Objects) { instances.CreateWekaInstance(io); } }
/// <summary> /// Klassifiziert eine Instanz /// </summary> /// <param name="classifier">Klassifikator</param> /// <param name="instances">dem Klassifikator zugehöriger Datensatz</param> /// <param name="features">Merkmale der Instanz</param> /// <returns>Klassenname</returns> public static string Classify(this Classifier classifier, Instances instances, IEnumerable <Tuple <string, double> > features) { var instance = instances.CreateWekaInstance(null, features, true); var classIndex = classifier.classifyInstance(instance); return(instances.classAttribute().value((int)classIndex)); }
/// <summary> /// Klassifiziert ein <see cref="ImageObject"/> und weist ihm die Klasse zu /// </summary> /// <param name="classifier">Klassifikator</param> /// <param name="instances">dem Klassifikator zugehöriger Datensatz</param> /// <param name="imageObject"><see cref="ImageObject"/></param> /// <param name="resolveClassByName">Auflösung für die Klassen</param> /// <returns>Klasse</returns> public static Class Classify(this Classifier classifier, Instances instances, ImageObject imageObject, Func <string, Class> resolveClassByName) { var instance = instances.CreateWekaInstance(imageObject, true); var classIndex = classifier.classifyInstance(instance); var @class = resolveClassByName(instances.classAttribute().value((int)classIndex)); imageObject.Class = @class; return(@class); }
/// <summary> /// erstellt eine WEKA-<see cref="Instance"/> aus einem <see cref="ImageObject"/> und fügt sie den <see cref="Instances"/> hinzu /// </summary> /// <param name="instances">Datensatz</param> /// <param name="imageObject"><see cref="ImageObject"/></param> /// <param name="forceAdd">wenn true wird eine unklassifizierte <see cref="Instance"/> dem Datensatz hinzugefügt, sonst wird keine <see cref="Instance"/> erzeugt</param> /// <returns>WEKA-<see cref="Instance"/>, eingehangen in den übergebenen Datensatz oder null</returns> public static Instance CreateWekaInstance(this Instances instances, ImageObject imageObject, bool forceAdd = false) => instances.CreateWekaInstance(imageObject.Class?.Name, imageObject.Features.Select(f => Tuple.Create(f.Name, f.Value)), forceAdd);