コード例 #1
0
 //@Override
 public Image process(Image imageIn)
 {
     Image clone = imageIn.clone();
     imageIn = gradientFx.process(imageIn);
     ImageBlender blender = new ImageBlender();
     blender.Mode = BlendMode.ColorBurn;
     return saturationFx.process(blender.Blend(clone, imageIn));
     //return imageIn;// saturationFx.process(imageIn);
 }
コード例 #2
0
        //@Override
        public Image process(Image imageIn)
        {
            Image clone = imageIn.clone();

            imageIn = gradientFx.process(imageIn);
            ImageBlender blender = new ImageBlender();

            blender.Mode = BlendMode.Subractive;
            return(saturationFx.process(blender.Blend(clone, imageIn)));
            //return imageIn;// saturationFx.process(imageIn);
        }
コード例 #3
0
ファイル: BlockPrintFilter.cs プロジェクト: kshark27/ZuPix
 //@Override
 public CustomImage process(CustomImage imageIn)
 {
     ParamEdgeDetectFilter pde = new ParamEdgeDetectFilter();
     pde.K00 = 1;
     pde.K01 = 2;
     pde.K02 = 1;
     pde.Threshold = 0.25f;
     pde.DoGrayConversion = false;
     ImageBlender ib = new ImageBlender();
     ib.Mode = (int)BlendMode.Multiply;
     return ib.Blend(imageIn.clone(), pde.process(imageIn));
 }
コード例 #4
0
        //@Override
        public Image process(Image imageIn)
        {
            GradientMapFilter gmf = new GradientMapFilter(Gradient.BlackSepia());
            gmf.ContrastFactor = 0.15f;

            ImageBlender ib = new ImageBlender();
            ib.Mixture = 0.7f;
            ib.Mode = BlendMode.Overlay;
            imageIn = ib.Blend(imageIn.clone(), gmf.process(imageIn));

            VignetteFilter vigette = new VignetteFilter();
            vigette.Size = 0.7f;
            return vigette.process(imageIn);
        }
コード例 #5
0
 //@Override
 public Image process(Image imageIn)
 {
     ParamEdgeDetectFilter pde = new ParamEdgeDetectFilter();
     pde.K00 = 1;
     pde.K01 = 2;
     pde.K02 = 1;
     pde.Threshold = 0.25f;
     pde.DoGrayConversion = false;
     pde.DoInversion = false;
     ImageBlender ib = new ImageBlender();
     ib.Mode = (int)BlendMode.LinearLight;
     ib.Mixture = 2.5f;
     return ib.Blend(imageIn.clone(), pde.process(imageIn));
 }
コード例 #6
0
        //@Override
        public Image process(Image imageIn)
        {
            ParamEdgeDetectFilter pde = new ParamEdgeDetectFilter();

            pde.K00              = 1;
            pde.K01              = 2;
            pde.K02              = 1;
            pde.Threshold        = 0.25f;
            pde.DoGrayConversion = false;
            ImageBlender ib = new ImageBlender();

            ib.Mode = (int)BlendMode.Multiply;
            return(ib.Blend(imageIn.clone(), pde.process(imageIn)));
        }
コード例 #7
0
        //@Override
        public Image process(Image imageIn)
        {
            int r, g, b;
            int width  = imageIn.getWidth();
            int height = imageIn.getHeight();
            int ratio  = width > height ? height * 32768 / width : width * 32768 / height;

            // Calculate center, min and max
            int   cx    = width >> 1;
            int   cy    = height >> 1;
            int   max   = cx * cx + cy * cy;
            int   min   = (int)(max * (1 - Size));
            int   diff  = max - min;
            Image clone = imageIn.clone();

            for (int x = 0; x < width; x++)
            {
                for (int y = 0; y < height; y++)
                {
                    // Calculate distance to center and adapt aspect ratio
                    int dx = cx - x;
                    int dy = cy - y;
                    if (width > height)
                    {
                        dx = (dx * ratio) >> 15;
                    }
                    else
                    {
                        dy = (dy * ratio) >> 15;
                    }
                    int distSq = dx * dx + dy * dy;

                    r = (int)((((float)distSq / diff) * R));
                    g = (int)((((float)distSq / diff) * G));
                    b = (int)((((float)distSq / diff) * B));
                    r = (byte)(r > R ? R : (r < 0 ? 0 : r));
                    g = (byte)(g > G ? G : (g < 0 ? 0 : g));
                    b = (byte)(b > B ? B : (b < 0 ? 0 : b));
                    imageIn.setPixelColor(x, y, r, g, b);
                }
            }
            ImageBlender blender = new ImageBlender();

            blender.Mode = BlendMode.Additive;
            return(blender.Blend(clone, imageIn));
        }
コード例 #8
0
        //@Override
        public Image process(Image imageIn)
        {
            GradientMapFilter gmf = new GradientMapFilter(Gradient.BlackSepia());

            gmf.ContrastFactor = 0.15f;

            ImageBlender ib = new ImageBlender();

            ib.Mixture = 0.7f;
            ib.Mode    = BlendMode.Overlay;
            imageIn    = ib.Blend(imageIn.clone(), gmf.process(imageIn));

            VignetteFilter vigette = new VignetteFilter();

            vigette.Size = 0.7f;
            return(vigette.process(imageIn));
        }
コード例 #9
0
        //@Override
        public Image process(Image imageIn)
        {
            int r, g, b;
            int width = imageIn.getWidth();
            int height = imageIn.getHeight();
            int ratio = width > height ? height * 32768 / width : width * 32768 / height;

            // Calculate center, min and max
            int cx = width >> 1;
            int cy = height >> 1;
            int max = cx * cx + cy * cy;
            int min = (int)(max * (1 - Size));
            int diff = max - min;
            Image clone = imageIn.clone();
            for (int x = 0; x < width; x++)
            {
                for (int y = 0; y < height; y++)
                {
                    // Calculate distance to center and adapt aspect ratio
                    int dx = cx - x;
                    int dy = cy - y;
                    if (width > height)
                        dx = (dx * ratio) >> 15;
                    else
                        dy = (dy * ratio) >> 15;
                    int distSq = dx * dx + dy * dy;

                    r = (int)((((float)distSq / diff) * R));
                    g = (int)((((float)distSq / diff) * G));
                    b = (int)((((float)distSq / diff) * B));
                    r = (byte)(r > R ? R : (r < 0 ? 0 : r));
                    g = (byte)(g > G ? G : (g < 0 ? 0 : g));
                    b = (byte)(b > B ? B : (b < 0 ? 0 : b));
                    imageIn.setPixelColor(x, y, r, g, b);
                }
            }
            ImageBlender blender = new ImageBlender();
            blender.Mode = BlendMode.Additive;
            return blender.Blend(clone, imageIn);
        }
コード例 #10
0
        public void trainNestedAlgorithm(ContextualMemoryNestedAlgorithm nestedAlgorithm)
        {
            BlackAndWhiteConverter blackAndWhiteConverter = new BlackAndWhiteConverter(1);
            //BlackAndWhiteConverter blackAndWhiteConverter = new BlackAndWhiteConverter(63);

            List <String> fileList = new List <string>(benchmark.getTrainingFilesPathList());

            List <ContextualMemoryNestedAlgorithmLayer> layers = nestedAlgorithm.getLayers();

            for (int layerIndex = 0; layerIndex < layers.Count; layerIndex++)
            {
                ContextualMemoryNestedAlgorithmLayer layer = layers[layerIndex];
                layer.initialize();
                Console.WriteLine("Layer: " + (layerIndex + 1) + "/" + layers.Count);

                EdgeDetectionAlgorithm algorithm = layer.algorithm;

                DateTime trainingStart      = DateTime.Now;
                float    totalLoss          = 0;
                int      totalNumberOfFiles = numberOfTrainingSetPasses * fileList.Count;
                int      totalIndex         = 0;
                for (int pass = 0; pass < numberOfTrainingSetPasses; pass++)
                {
                    ListUtils.Shuffle(fileList);
                    int      index             = 1;
                    float    totalPassLoss     = 0;
                    DateTime trainingPassStart = DateTime.Now;
                    foreach (string trainingFileName in fileList)
                    {
                        DateTime start = DateTime.Now;
                        Console.WriteLine("Pass: "******"/" + numberOfTrainingSetPasses + ", " + index + "/" + fileList.Count + " Training file: " + Path.GetFileName(trainingFileName));

                        ImageDescription inputImage = ImageFileHandler.loadFromPath(trainingFileName);
                        int layerResizeFactor       = layer.resizeFactor;

                        ImageDescription computedImage = null;
                        if (layerIndex > 0)
                        {
                            List <ImageDescription> computedImages = nestedAlgorithm.computeImageForLayers(inputImage, layerIndex);
                            computedImage = computedImages[layerIndex - 1];
                        }

                        ImageDescription inputImageGroundTruth = ImageFileHandler.loadFromPath(benchmark.getTrainingFileGroundTruth(trainingFileName));
                        inputImageGroundTruth = blackAndWhiteConverter.filter(inputImageGroundTruth);

                        ImageDescription newInputImage            = null;
                        ImageDescription newInputImageGroundTruth = null;

                        ResizeFilter resizeGrayscale = new ResizeFilter(inputImage.sizeX / layerResizeFactor, inputImage.sizeY / layerResizeFactor, ImageDescriptionUtil.grayscaleChannel);
                        ResizeFilter resizeColor     = new ResizeFilter(inputImage.sizeX / layerResizeFactor, inputImage.sizeY / layerResizeFactor, ImageDescriptionUtil.colorChannels);

                        if (layerResizeFactor == 1)
                        {
                            newInputImage            = inputImage;
                            newInputImageGroundTruth = inputImageGroundTruth;
                        }
                        else
                        {
                            newInputImage            = resizeColor.filter(inputImage);
                            newInputImageGroundTruth = resizeGrayscale.filter(inputImageGroundTruth);
                        }
                        if (layerIndex > 0)
                        {
                            ImageDescription resizedComputed = resizeGrayscale.filter(computedImage);
                            newInputImage.setColorChannel(ColorChannelEnum.Layer, resizedComputed.gray);
                        }

                        float loss = algorithm.train(newInputImage, newInputImageGroundTruth);

                        totalLoss     += loss;
                        totalPassLoss += loss;
                        index++;
                        totalIndex++;

                        double timeElapsed      = (DateTime.Now - start).TotalSeconds;
                        double timeElapsedSoFar = (DateTime.Now - trainingStart).TotalSeconds;
                        double estimatedTime    = (timeElapsedSoFar / totalIndex) * (totalNumberOfFiles - totalIndex);
                        Console.WriteLine("Loss: " + loss.ToString("0.00") + " Time: " + timeElapsed.ToString("0.00") + "s Time elapsed: "
                                          + timeElapsedSoFar.ToString("0.00") + "s ETA: " + estimatedTime.ToString("0.00") + "s");
                    }
                    double tariningPassTimeElapsed = (DateTime.Now - trainingPassStart).TotalSeconds;
                    Console.WriteLine("Pass took " + tariningPassTimeElapsed.ToString("0.00") + " sec. Pass loss: " + totalPassLoss.ToString("0.00")
                                      + " Avg loss: " + (totalPassLoss / (fileList.Count)).ToString("0.00"));
                }
                double totalTimeElapsed = (DateTime.Now - trainingStart).TotalSeconds;
                Console.WriteLine("Training took " + totalTimeElapsed.ToString("0.00") + " sec. Total loss: " + totalLoss.ToString("0.00")
                                  + " Avg loss: " + (totalLoss / (totalNumberOfFiles)).ToString("0.00"));
            }

            Console.WriteLine("Training blender");

            DateTime     blenderTrainingStart      = DateTime.Now;
            float        blenderTotalLoss          = 0;
            int          blenderTotalNumberOfFiles = /* numberOfTrainingSetPasses * */ fileList.Count;
            int          blenderTotalIndex         = 0;
            ImageBlender blender = nestedAlgorithm.getImageBlender();
            //for (int pass = 0; pass < numberOfTrainingSetPasses; pass++)
            {
                ListUtils.Shuffle(fileList);
                int      index             = 1;
                float    totalPassLoss     = 0;
                DateTime trainingPassStart = DateTime.Now;
                foreach (string trainingFileName in fileList)
                {
                    DateTime start = DateTime.Now;
                    //Console.Write("Pass: "******"/" + numberOfTrainingSetPasses + ", ");
                    Console.WriteLine(index + "/" + fileList.Count + " Training file: " + Path.GetFileName(trainingFileName));

                    ImageDescription        inputImage     = ImageFileHandler.loadFromPath(trainingFileName);
                    List <ImageDescription> computedImages = nestedAlgorithm.computeImageForLayers(inputImage, layers.Count);

                    ImageDescription inputImageGroundTruth = ImageFileHandler.loadFromPath(benchmark.getTrainingFileGroundTruth(trainingFileName));
                    inputImageGroundTruth = blackAndWhiteConverter.filter(inputImageGroundTruth);

                    float blenderLoss = blender.train(computedImages, inputImageGroundTruth);

                    blenderTotalLoss += blenderLoss;
                    totalPassLoss    += blenderLoss;
                    index++;
                    blenderTotalIndex++;

                    double timeElapsed      = (DateTime.Now - start).TotalSeconds;
                    double timeElapsedSoFar = (DateTime.Now - blenderTrainingStart).TotalSeconds;
                    double estimatedTime    = (timeElapsedSoFar / blenderTotalIndex) * (blenderTotalNumberOfFiles - blenderTotalIndex);
                    Console.WriteLine("Loss: " + blenderLoss.ToString("0.00") + " Time: " + timeElapsed.ToString("0.00") + "s Time elapsed: "
                                      + timeElapsedSoFar.ToString("0.00") + "s ETA: " + estimatedTime.ToString("0.00") + "s");
                }
                //double tariningPassTimeElapsed = (DateTime.Now - trainingPassStart).TotalSeconds;
                //Console.WriteLine("Pass took " + tariningPassTimeElapsed.ToString("0.00") + " sec. Pass loss: " + totalPassLoss.ToString("0.00")
                //+ " Avg loss: " + (totalPassLoss / (fileList.Count)).ToString("0.00"));
            }
            double blenderTotalTimeElapsed = (DateTime.Now - blenderTrainingStart).TotalSeconds;

            Console.WriteLine("Training took " + blenderTotalTimeElapsed.ToString("0.00") + " sec. Total loss: " + blenderTotalLoss.ToString("0.00")
                              + " Avg loss: " + (blenderTotalLoss / (blenderTotalNumberOfFiles)).ToString("0.00"));
        }
コード例 #11
0
 public void setImageBlender(ImageBlender imageBlender)
 {
     this.imageBlender = imageBlender;
 }