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);
        }
Esempio n. 2
0
        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);
     }
 }
Esempio n. 4
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);
        }
 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);
 }
Esempio n. 6
0
        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);
            }
        }
Esempio n. 8
0
        public int KnownSamplesNumber(TextureFeatures feature)
        {
            switch (feature)
            {
            case TextureFeatures.GLCM:
                return(glcmFeatures.Count());

            case TextureFeatures.LBP:
                return(lbpFeatures.Count);

            default:
                return(0);
            }
        }
Esempio n. 9
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;
        }
Esempio n. 11
0
 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);
 }
Esempio n. 14
0
 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;
 }
Esempio n. 16
0
 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;
 }
Esempio n. 17
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;
     }
 }
Esempio n. 18
0
 public void SetAnswer(TextureFeatures feature, TextureClass answer)
 {
     answers[feature] = answer;
 }
Esempio n. 19
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;
 }
Esempio n. 20
0
 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));
 }
Esempio n. 21
0
 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;
 }
Esempio n. 22
0
        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];
                }
            }
        }