//@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); }
//@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); }
//@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)); }
//@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); }
//@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)); }
//@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))); }
//@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)); }
//@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)); }
//@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); }
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")); }
public void setImageBlender(ImageBlender imageBlender) { this.imageBlender = imageBlender; }