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); }
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); }
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; }
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; }