コード例 #1
0
        private FakeImageObject GetRandomFromObjectList()
        {
            FakeImageObject result = new FakeImageObject();

            if (hitClosesImagesList == null)
            {
                hitClosesImagesList = new int[objectList.Count];
            }

            if (hitClosesImagesList.Where(x => x == 1).Count() == objectList.Count)
            {
                result.SetPropertiesFromImageObject(objectList.First());
                return(result);
            }

            int imageIndex;

            do
            {
                imageIndex = random.Next(0, objectList.Count - 1);
            } while (hitClosesImagesList[imageIndex] != 0);

            hitClosesImagesList[imageIndex] = 1;
            result.SetPropertiesFromImageObject(objectList.ToArray()[imageIndex]);
            return(result);
        }
コード例 #2
0
        private FakeImageObject GetClosestObjectFromObjectList(FakeImageObject fakeImage)
        {
            FakeImageObject result = new FakeImageObject();

            if (hitClosesImagesList == null)
            {
                hitClosesImagesList = new int[objectList.Count];
            }

            ImageObject[] classes   = objectList.ToArray();
            double[]      distances = new double[objectList.Count];
            for (int i = 0; i < objectList.Count; i++)
            {
                distances[i] =
                    Math.Abs(areaCoefficient * (classes[i].Area - fakeImage.Area)) +
                    Math.Abs(densityCoefficient * (classes[i].Density - fakeImage.Density)) +
                    Math.Abs(elongationCoefficient * (classes[i].Elongation - fakeImage.Elongation)) +
                    Math.Abs(perimeterCoefficient * (classes[i].Perimeter - fakeImage.Perimeter)) +
                    Math.Abs(massCenterCoefficient * Math.Sqrt(
                                 (classes[i].MassCenter.X - fakeImage.MassCenter.X) * (classes[i].MassCenter.X - fakeImage.MassCenter.X) +
                                 (classes[i].MassCenter.Y - fakeImage.MassCenter.Y) * (classes[i].MassCenter.Y - fakeImage.MassCenter.Y))
                             );
            }

            int    index    = 0;
            double minRange = distances[0];

            for (int i = 0; i < objectList.Count; i++)
            {
                if (hitClosesImagesList[i] == 0 && distances[i] <= minRange)
                {
                    minRange = distances[i];
                    index    = i;
                }
            }

            result.SetPropertiesFromImageObject(classes[index]);
            hitClosesImagesList[index] = 1;

            return(result);
        }
コード例 #3
0
ファイル: ImageRecognizer.cs プロジェクト: Lipotam/DSP
        private FakeImageObject GetRandomFromObjectList()
        {
            FakeImageObject result = new FakeImageObject();

            if (hitClosesImagesList == null)
            {
                hitClosesImagesList = new int[objectList.Count];
            }

            if (hitClosesImagesList.Where(x => x == 1).Count() == objectList.Count)
            {
                result.SetPropertiesFromImageObject(objectList.First());
                return result;
            }

            int imageIndex;
            do
            {
                imageIndex = random.Next(0, objectList.Count - 1);
            } while (hitClosesImagesList[imageIndex] != 0);

            hitClosesImagesList[imageIndex] = 1;
            result.SetPropertiesFromImageObject(objectList.ToArray()[imageIndex]);
            return result;
        }
コード例 #4
0
ファイル: ImageRecognizer.cs プロジェクト: Lipotam/DSP
        private FakeImageObject GetClosestObjectFromObjectList(FakeImageObject fakeImage)
        {
            FakeImageObject result = new FakeImageObject();
            if (hitClosesImagesList == null)
            {
                hitClosesImagesList = new int[objectList.Count];
            }

            ImageObject[] classes = objectList.ToArray();
            double[] distances = new double[objectList.Count];
            for (int i = 0; i < objectList.Count; i++)
            {
                distances[i] =
                        Math.Abs(areaCoefficient * (classes[i].Area - fakeImage.Area)) +
                        Math.Abs(densityCoefficient * (classes[i].Density - fakeImage.Density)) +
                        Math.Abs(elongationCoefficient * (classes[i].Elongation - fakeImage.Elongation)) +
                        Math.Abs(perimeterCoefficient * (classes[i].Perimeter - fakeImage.Perimeter)) +
                        Math.Abs(massCenterCoefficient * Math.Sqrt(
                        (classes[i].MassCenter.X - fakeImage.MassCenter.X) * (classes[i].MassCenter.X - fakeImage.MassCenter.X) +
                        (classes[i].MassCenter.Y - fakeImage.MassCenter.Y) * (classes[i].MassCenter.Y - fakeImage.MassCenter.Y))
                        );
            }

            int index = 0;
            double minRange = distances[0];
            for (int i = 0; i < objectList.Count; i++)
            {
                if (hitClosesImagesList[i] == 0 && distances[i] <= minRange)
                {
                    minRange = distances[i];
                    index = i;
                }
            }

            result.SetPropertiesFromImageObject(classes[index]);
            hitClosesImagesList[index] = 1;

            return result;
        }