public static Bitmap ConnectByKMeans(this Bitmap map, List <ImageObject> images, KMeansProperties kMeansProperties, int countOfCluster) { Bitmap dst = new Bitmap(map.Width, map.Height); for (int i = 0; i < map.Width; i++) { for (int j = 0; j < map.Height; j++) { dst.SetPixel(i, j, Color.White); } } var imageEngineService = new ImageEngineService(); images.ForEach(imageEngineService.SetImageProperties); var clusters = imageEngineService.KMeans(images, countOfCluster, 0.0001, kMeansProperties); Random rnd = new Random(); foreach (var cluster in clusters) { var RRand = rnd.Next(0, 255); var GRand = rnd.Next(0, 255); var BRand = rnd.Next(0, 255); foreach (var clusterImage in cluster.Images) { clusterImage.Pixels.ForEach(x => setRColor(x, RRand, GRand, BRand, dst)); } } return(dst); }
public static Bitmap FoursConnection(this Bitmap map) { Bitmap dst = new Bitmap(map.Width, map.Height); var array = map.GetArrayOfPixels(); var imageObjects = new List <ImageObject>(); int currentColor = 2; for (int i = 0; i < map.Width; i++) { for (int j = 0; j < map.Height; j++) { dst.SetPixel(i, j, Color.White); if (array[i, j] == 1) { array = ConnectMap(array, i, j, currentColor, map.Width, imageObjects); currentColor++; } } } var imageEngineService = new ImageEngineService(); imageObjects.ForEach(imageEngineService.SetImageProperties); var kMeansProperies = new KMeansProperties(false, false, true, true); var clusters = imageEngineService.KMeans(imageObjects, 6, 0.0001, kMeansProperies); Random rnd = new Random(); foreach (var cluster in clusters) { var RRand = rnd.Next(0, 255); var GRand = rnd.Next(0, 255); var BRand = rnd.Next(0, 255); foreach (var clusterImage in cluster.Images) { clusterImage.Pixels.ForEach(x => setRColor(x, RRand, GRand, BRand, dst)); } } return(dst); }