public float CompareFeature(RecognitionSample other, TextureFeatures feature) { if (other.imageFile != imageFile) { return(0); } int fragmentsCount = 0; int fragmentsMathches = 0; foreach (var result in other.sampleResults) { ++fragmentsCount; var mineResult = GetAnswer(result.Region); if (mineResult != null) { if (mineResult.CompareAnswers(result, feature)) { ++fragmentsMathches; } } } return(fragmentsMathches / (float)fragmentsCount); }
private TextureClass GetBestMatchForFeature(TextureSample sample, TextureFeatures feature) { var distancesList = GetDistancesListForFeature(sample, feature); var indexesList = new int[TextureClassCount]; var classesList = new List <int>(); var classesFlags = new List <int>(); while (true) { int bestClass = GetBestDistance(distancesList, indexesList, classesList, classesFlags); indexesList[bestClass] += 1; if (indexesList[bestClass] == knownClasses[bestClass].KnownSamplesNumber(feature)) { classesFlags.Add(bestClass); if (classesFlags.Count == knownClasses.Count) { return(knownClasses[classesFlags[0]]); } } if (indexesList[bestClass] == RecognitionParameters.NeededNeighborsNumber) { return(knownClasses[bestClass]); } } }
public TextureClass this[TextureFeatures feature] { get { TextureClass result; answers.TryGetValue(feature, out result); return(result); } }
private List <double>[] GetDistancesListForFeature(TextureSample sample, TextureFeatures feature) { var distancesList = new List <double> [TextureClassCount]; for (int i = 0; i < TextureClassCount; ++i) { distancesList[i] = knownClasses[i].GetSortedDistances(sample, feature); } return(distancesList); }
public bool CompareAnswers(RecognitionResult other, TextureFeatures feature) { if (other != null) { var otherAnswer = other[feature].Name; if (otherAnswer != null) { return(otherAnswer == this[feature].Name); } } return(false); }
internal List <double> GetSortedDistances(TextureSample sample, TextureFeatures feature) { var list = new List <double>(); var count = KnownSamplesNumber(feature); for (int i = 0; i < count; ++i) { list.Add(GetDistance(sample, i, feature)); } list.Sort(); return(list); }
public static TranscodeFormatTuple?GetPreferredFormat( bool hasAlpha, bool isPowerOfTwo, bool isSquare, bool isLinear = false ) { TextureFeatures features = TextureFeatures.None; if (hasAlpha) { features |= TextureFeatures.AlphaChannel; } if (!isPowerOfTwo) { features |= TextureFeatures.NonPowerOfTwo; } if (!isSquare) { features |= TextureFeatures.NonSquare; } if (isLinear) { features |= TextureFeatures.Linear; } TranscodeFormatTuple formatTuple; if (formatCache.TryGetValue(features, out formatTuple)) { return(formatTuple); } else { foreach (var formatInfo in allFormats) { if (!FormatIsMatch(features, formatInfo.features)) { continue; } var supported = SystemInfo.IsFormatSupported(formatInfo.formats.format, FormatUsage.Sample); if (supported) { formatCache[features] = formatInfo.formats; return(formatInfo.formats); } } Debug.LogErrorFormat("Could not find transcode texture format! (alpha:{0} Po2:{1} sqr:{2})", hasAlpha, isPowerOfTwo, isSquare); return(null); } }
public int KnownSamplesNumber(TextureFeatures feature) { switch (feature) { case TextureFeatures.GLCM: return(glcmFeatures.Count()); case TextureFeatures.LBP: return(lbpFeatures.Count); default: return(0); } }
private double GetDistance(TextureSample sample, int featureIndex, TextureFeatures feature) { switch (feature) { case TextureFeatures.GLCM: return(sample.GLCM.GetDistance(glcmFeatures[featureIndex])); case TextureFeatures.LBP: return(sample.LBP.GetDistance(lbpFeatures[featureIndex])); default: return(0); } }
public float CompareFeature(RecognitionSample other, TextureFeatures feature) { if (other.imageFile != imageFile) { return 0; } int fragmentsCount = 0; int fragmentsMathches = 0; foreach (var result in other.sampleResults) { ++fragmentsCount; var mineResult = GetAnswer(result.Region); if (mineResult != null) { if (mineResult.CompareAnswers(result, feature)) { ++fragmentsMathches; } } } return fragmentsMathches / (float)fragmentsCount; }
public TextureClass this[TextureFeatures feature] { get { TextureClass result; answers.TryGetValue(feature, out result); return result; } }
public FormatInfo(TextureFeatures features, GraphicsFormat format, TranscodeFormat transcodeFormat) { this.features = features; this.formats = new TranscodeFormatTuple(format, transcodeFormat); }
static bool FormatIsMatch(TextureFeatures required, TextureFeatures provided) { return((required & provided) == required); }
public int KnownSamplesNumber(TextureFeatures feature) { switch (feature) { case TextureFeatures.GLCM: return glcmFeatures.Count(); case TextureFeatures.LBP: return lbpFeatures.Count; default: return 0; } }
public void SetAnswer(TextureFeatures feature, TextureClass answer) { answers[feature] = answer; }
internal List<double> GetSortedDistances(TextureSample sample, TextureFeatures feature) { var list = new List<double>(); var count = KnownSamplesNumber(feature); for (int i = 0; i < count; ++i) { list.Add(GetDistance(sample, i, feature)); } list.Sort(); return list; }
private double GetDistance(TextureSample sample, int featureIndex, TextureFeatures feature) { switch (feature) { case TextureFeatures.GLCM: return sample.GLCM.GetDistance(glcmFeatures[featureIndex]); case TextureFeatures.LBP: return sample.LBP.GetDistance(lbpFeatures[featureIndex]); default: return 0; } }
private List<double>[] GetDistancesListForFeature(TextureSample sample, TextureFeatures feature) { var distancesList = new List<double>[TextureClassCount]; for (int i = 0; i < TextureClassCount; ++i) { distancesList[i] = knownClasses[i].GetSortedDistances(sample, feature); } return distancesList; }
static bool FormatIsMatch(TextureFeatures required, TextureFeatures provided) { return((required & TextureFeatures.AlphaChannel) <= (provided & TextureFeatures.AlphaChannel) && (required & TextureFeatures.NonPowerOfTwo) <= (provided & TextureFeatures.NonPowerOfTwo) && (required & TextureFeatures.NonSquare) <= (provided & TextureFeatures.NonSquare)); }
public bool CompareAnswers(RecognitionResult other, TextureFeatures feature) { if (other != null) { var otherAnswer = other[feature].Name; if (otherAnswer != null) { return otherAnswer == this[feature].Name; } } return false; }
private TextureClass GetBestMatchForFeature(TextureSample sample, TextureFeatures feature) { var distancesList = GetDistancesListForFeature(sample, feature); var indexesList = new int[TextureClassCount]; var classesList = new List<int>(); var classesFlags = new List<int>(); while (true) { int bestClass = GetBestDistance(distancesList, indexesList, classesList, classesFlags); indexesList[bestClass] += 1; if (indexesList[bestClass] == knownClasses[bestClass].KnownSamplesNumber(feature)) { classesFlags.Add(bestClass); if (classesFlags.Count == knownClasses.Count) { return knownClasses[classesFlags[0]]; } } if (indexesList[bestClass] == RecognitionParameters.NeededNeighborsNumber) { return knownClasses[bestClass]; } } }