public void GetSuperpixelImages(Image <Gray, Byte> image, string dir, string imageName, int regionSize = 20, float ratio = 10.0f) { var pixelator = new Emgu.CV.XImgproc.SupperpixelSLIC(image, Emgu.CV.XImgproc.SupperpixelSLIC.Algorithm.SLICO, regionSize, ratio); pixelator.Iterate(); var labels = new Mat(); pixelator.GetLabels(labels); var labelsArray = new int[labels.Rows, labels.Cols]; labelsArray = (int[, ])labels.GetData(); var superpixelColors = new int[pixelator.NumberOfSuperpixels]; var pixelCount = new int[pixelator.NumberOfSuperpixels]; var imageArray = new byte[image.Width, image.Height, 1]; imageArray = image.Data; for (int i = 0; i < labels.Rows; i++) { for (int j = 0; j < labels.Cols; j++) { var label = labelsArray[i, j]; superpixelColors[label] += imageArray[i, j, 0]; pixelCount[label] += 1; } } for (int i = 0; i < superpixelColors.Length; i++) { if (pixelCount[i] != 0) { superpixelColors[i] /= pixelCount[i]; } } var maskedImage = new Image <Bgr, Byte>(image.Width, image.Height); // var boundaries = new Image<Bgr, Byte>(image.Width, image.Height); //image.CopyTo(maskedImage); CvInvoke.CvtColor(image, maskedImage, Emgu.CV.CvEnum.ColorConversion.Gray2Bgr); var mask = new Image <Gray, Byte>(image.Width, image.Height); var colorMask = new Image <Bgr, Byte>(image.Width, image.Height); colorMask = colorMask.Add(new Bgr(Color.Red)); pixelator.GetLabelContourMask(mask); colorMask = colorMask.And(colorMask, mask); maskedImage = maskedImage.And(maskedImage, mask.Not()); maskedImage = maskedImage.Add(colorMask); maskedImage.Save(dir + @"\" + imageName + "_borders.png"); var superpixelImage = new Image <Gray, Byte>(image.Width, image.Height); for (int i = 0; i < image.Width; i++) { for (int j = 0; j < image.Height; j++) { var pixelNum = labelsArray[i, j]; superpixelImage[i, j] = new Gray(superpixelColors[pixelNum]); } } superpixelImage.Save(dir + @"\" + imageName + "_meanColors.png"); }
public int[] GetSuperpixelFeatures(string imageName, int regionSize = 20, float ratio = 10.0f) { var image = new Image <Gray, Byte>(SourceDirectory + @"\" + imageName); var pixelator = new Emgu.CV.XImgproc.SupperpixelSLIC(image, Emgu.CV.XImgproc.SupperpixelSLIC.Algorithm.SLICO, regionSize, ratio); pixelator.Iterate(); var labels = new Mat(); pixelator.GetLabels(labels); var labelsArray = new int[labels.Rows, labels.Cols]; labelsArray = (int[, ])labels.GetData(); var superpixelColors = new int[pixelator.NumberOfSuperpixels]; var pixelCount = new int[pixelator.NumberOfSuperpixels]; var imageArray = new byte[image.Width, image.Height, 1]; imageArray = image.Data; for (int i = 0; i < labels.Rows; i++) { for (int j = 0; j < labels.Cols; j++) { var label = labelsArray[i, j]; superpixelColors[label] += imageArray[i, j, 0]; pixelCount[label] += 1; } } for (int i = 0; i < superpixelColors.Length; i++) { if (pixelCount[i] != 0) { superpixelColors[i] /= pixelCount[i]; } } return(superpixelColors); }