Exemplo n.º 1
0
        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");
        }
Exemplo n.º 2
0
        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);
        }