diff --git a/src/ImageProcessor/ImageFactory.cs b/src/ImageProcessor/ImageFactory.cs
index b21f6f986..496906c0a 100644
--- a/src/ImageProcessor/ImageFactory.cs
+++ b/src/ImageProcessor/ImageFactory.cs
@@ -441,11 +441,23 @@ namespace ImageProcessor
return this;
}
- public ImageFactory DetectEdges(IEdgeFilter filter)
+ ///
+ /// Detects the edges in the current image.
+ ///
+ ///
+ /// The to detect edges with.
+ ///
+ ///
+ /// Whether to convert the image to greyscale first - Defaults to true.
+ ///
+ ///
+ /// The current instance of the class.
+ ///
+ public ImageFactory DetectEdges(IEdgeFilter filter, bool greyscale = true)
{
if (this.ShouldProcess)
{
- DetectEdges detectEdges = new DetectEdges { DynamicParameter = filter };
+ DetectEdges detectEdges = new DetectEdges { DynamicParameter = new Tuple(filter, greyscale) };
this.CurrentImageFormat.ApplyProcessor(detectEdges.ProcessImage, this);
}
diff --git a/src/ImageProcessor/ImageProcessor.csproj b/src/ImageProcessor/ImageProcessor.csproj
index faa73bd1b..4bb47105a 100644
--- a/src/ImageProcessor/ImageProcessor.csproj
+++ b/src/ImageProcessor/ImageProcessor.csproj
@@ -78,6 +78,10 @@
+
+
+
+
Code
diff --git a/src/ImageProcessor/Imaging/Convolution.cs b/src/ImageProcessor/Imaging/Convolution.cs
index 22d66bad8..8e9495637 100644
--- a/src/ImageProcessor/Imaging/Convolution.cs
+++ b/src/ImageProcessor/Imaging/Convolution.cs
@@ -26,7 +26,7 @@ namespace ImageProcessor.Imaging
private readonly double standardDeviation = 1.4;
///
- /// Whether to use use dynamic divider for edges.
+ /// Whether to use dynamic divider for edges.
///
private bool useDynamicDividerForEdges = true;
diff --git a/src/ImageProcessor/Imaging/EdgeDetection/ConvolutionFilter.cs b/src/ImageProcessor/Imaging/EdgeDetection/ConvolutionFilter.cs
index 2307df335..5db8316db 100644
--- a/src/ImageProcessor/Imaging/EdgeDetection/ConvolutionFilter.cs
+++ b/src/ImageProcessor/Imaging/EdgeDetection/ConvolutionFilter.cs
@@ -1,4 +1,13 @@
-
+// --------------------------------------------------------------------------------------------------------------------
+//
+// Copyright (c) James South.
+// Licensed under the Apache License, Version 2.0.
+//
+//
+// The convolution filter for applying gradient operators to detect edges within an image.
+//
+// --------------------------------------------------------------------------------------------------------------------
+
namespace ImageProcessor.Imaging.EdgeDetection
{
using System;
@@ -6,61 +15,137 @@ namespace ImageProcessor.Imaging.EdgeDetection
using System.Drawing.Imaging;
using ImageProcessor.Common.Extensions;
-
+ using ImageProcessor.Imaging.Filters;
+
///
- /// http://pastebin.com/xHHD3pXi
+ /// The convolution filter for applying gradient operators to detect edges within an image.
///
public class ConvolutionFilter
{
+ ///
+ /// The edge filter.
+ ///
private readonly IEdgeFilter edgeFilter;
- public ConvolutionFilter(IEdgeFilter edgeFilter)
+ ///
+ /// Whether to produce a greyscale output.
+ ///
+ private readonly bool greyscale;
+
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ ///
+ /// The to apply.
+ ///
+ ///
+ /// Whether to produce a greyscale output.
+ ///
+ public ConvolutionFilter(IEdgeFilter edgeFilter, bool greyscale)
{
this.edgeFilter = edgeFilter;
+ this.greyscale = greyscale;
}
+ ///
+ /// Processes the given bitmap to apply the current instances .
+ ///
+ /// The image to process.
+ /// A processed bitmap.
public Bitmap ProcessFilter(Bitmap source)
{
- double[,] horizontalFilter = this.edgeFilter.HorizontalMatrix;
- double[,] verticallFilter = this.edgeFilter.VerticalMatrix;
-
int width = source.Width;
int height = source.Height;
- int maxWidth = width - 1;
- int maxHeight = height - 1;
Bitmap destination = new Bitmap(width, height, PixelFormat.Format32bppArgb);
- using (FastBitmap sourceBitmap = new FastBitmap(source))
+ Bitmap input = new Bitmap(width, height, PixelFormat.Format32bppArgb);
+
+ using (Graphics graphics = Graphics.FromImage(input))
{
- using (FastBitmap destinationBitmap = new FastBitmap(destination))
+ Rectangle rectangle = new Rectangle(0, 0, width, height);
+ if (this.greyscale)
{
- for (int y = 1; y < maxHeight; y++)
+ // If it's greyscale apply a colormatix to the image.
+ using (ImageAttributes attributes = new ImageAttributes())
{
- for (int x = 1; x < maxWidth; x++)
- {
- double newX = 0;
- double newY = 0;
+ attributes.SetColorMatrix(ColorMatrixes.GreyScale);
+ graphics.DrawImage(source, rectangle, 0, 0, width, height, GraphicsUnit.Pixel, attributes);
+ }
+ }
+ else
+ {
+ // Fixes an issue with transparency not converting properly.
+ graphics.Clear(Color.Transparent);
+ graphics.DrawImage(source, rectangle);
+ }
+ }
+
+ try
+ {
+ double[,] horizontalFilter = this.edgeFilter.HorizontalGradientOperator;
+ double[,] verticallFilter = this.edgeFilter.VerticalGradientOperator;
+
+ int filterXOffset = (horizontalFilter.GetLength(1) - 1) / 2;
+ int filterYOffset = (horizontalFilter.GetLength(0) - 1) / 2;
+ int maxWidth = width - filterXOffset;
+ int maxHeight = height - filterYOffset;
- for (int hw = -1; hw < 2; hw++)
+ using (FastBitmap sourceBitmap = new FastBitmap(input))
+ {
+ using (FastBitmap destinationBitmap = new FastBitmap(destination))
+ {
+ // Loop through the pixels.
+ for (int y = filterYOffset; y < maxHeight; y++)
+ {
+ for (int x = filterXOffset; x < maxWidth; x++)
{
- for (int wi = -1; wi < 2; wi++)
+ double rX = 0;
+ double rY = 0;
+ double gX = 0;
+ double gY = 0;
+ double bX = 0;
+ double bY = 0;
+
+ // Apply each matrix multiplier to the color components for each pixel.
+ for (int fy = -1; fy < filterYOffset; fy++)
{
- double component = sourceBitmap.GetPixel(x + wi, y + hw).B;
- newX += horizontalFilter[hw + 1, wi + 1] * component;
- newY += verticallFilter[hw + 1, wi + 1] * component;
+ for (int fx = -1; fx < filterXOffset; fx++)
+ {
+ Color currentColor = sourceBitmap.GetPixel(x + fx, y + fy);
+ double r = currentColor.R;
+ double g = currentColor.G;
+ double b = currentColor.B;
+
+ rX += horizontalFilter[fy + 1, fx + 1] * r;
+ rY += verticallFilter[fy + 1, fx + 1] * r;
+
+ gX += horizontalFilter[fy + 1, fx + 1] * g;
+ gY += verticallFilter[fy + 1, fx + 1] * g;
+
+ bX += horizontalFilter[fy + 1, fx + 1] * b;
+ bY += verticallFilter[fy + 1, fx + 1] * b;
+ }
}
- }
- byte value = Math.Sqrt((newX * newX) + (newY * newY)).ToByte();
- Color tempcolor = Color.FromArgb(value, value, value);
- destinationBitmap.SetPixel(x, y, tempcolor);
+ // Apply the equation and sanitize.
+ byte red = Math.Sqrt((rX * rX) + (rY * rY)).ToByte();
+ byte green = Math.Sqrt((gX * gX) + (gY * gY)).ToByte();
+ byte blue = Math.Sqrt((bX * bX) + (bY * bY)).ToByte();
+
+ Color newColor = Color.FromArgb(red, green, blue);
+ destinationBitmap.SetPixel(x, y, newColor);
+ }
}
}
}
}
+ finally
+ {
+ // We created a new image. Cleanup.
+ input.Dispose();
+ }
return destination;
-
}
}
}
diff --git a/src/ImageProcessor/Imaging/EdgeDetection/CostellaEdgeFilter.cs b/src/ImageProcessor/Imaging/EdgeDetection/CostellaEdgeFilter.cs
new file mode 100644
index 000000000..96f8034ef
--- /dev/null
+++ b/src/ImageProcessor/Imaging/EdgeDetection/CostellaEdgeFilter.cs
@@ -0,0 +1,68 @@
+// --------------------------------------------------------------------------------------------------------------------
+//
+// Copyright (c) James South.
+// Licensed under the Apache License, Version 2.0.
+//
+//
+// The Costella operator filter.
+//
+//
+// --------------------------------------------------------------------------------------------------------------------
+
+namespace ImageProcessor.Imaging.EdgeDetection
+{
+ ///
+ /// The Costella operator filter.
+ ///
+ ///
+ public class CostellaEdgeFilter : IEdgeFilter
+ {
+ ///
+ /// Gets the horizontal gradient operator.
+ ///
+ public double[,] HorizontalGradientOperator
+ {
+ get
+ {
+ return new double[,]
+ { { -1, -1, -1, -1, -1, },
+ { -1, -1, -1, -1, -1, },
+ { -1, -1, 24, -1, -1, },
+ { -1, -1, -1, -1, -1, },
+ { -1, -1, -1, -1, -1 }, };
+ return new double[,]
+ {
+ { -1, -3, 0, 3, 1 },
+ { -1, -3, 0, 3, 1 },
+ { -1, -3, 0, 3, 1 },
+ { -1, -3, 0, 3, 1 },
+ { -1, -3, 0, 3, 1 }
+ };
+ }
+ }
+
+ ///
+ /// Gets the vertical gradient operator.
+ ///
+ public double[,] VerticalGradientOperator
+ {
+ get
+ {
+ return new double[,]
+ { { -1, -1, -1, -1, -1, },
+ { -1, -1, -1, -1, -1, },
+ { -1, -1, 24, -1, -1, },
+ { -1, -1, -1, -1, -1, },
+ { -1, -1, -1, -1, -1 }, };
+ return new double[,]
+ {
+ { 1, 1, 1, 1, 1 },
+ { 3, 3, 3, 3, 3 },
+ { 0, 0, 0, 0, 0 },
+ { -3, -3, -3, -3, -3 },
+ { -1, -1, -1, -1, -1 }
+ };
+ }
+ }
+ }
+}
diff --git a/src/ImageProcessor/Imaging/EdgeDetection/IEdgeFilter.cs b/src/ImageProcessor/Imaging/EdgeDetection/IEdgeFilter.cs
index bf30c7cf9..4ddee1b46 100644
--- a/src/ImageProcessor/Imaging/EdgeDetection/IEdgeFilter.cs
+++ b/src/ImageProcessor/Imaging/EdgeDetection/IEdgeFilter.cs
@@ -1,9 +1,28 @@
-namespace ImageProcessor.Imaging.EdgeDetection
+// --------------------------------------------------------------------------------------------------------------------
+//
+// Copyright (c) James South.
+// Licensed under the Apache License, Version 2.0.
+//
+//
+// Describes properties for creating edge detection filters.
+//
+// --------------------------------------------------------------------------------------------------------------------
+
+namespace ImageProcessor.Imaging.EdgeDetection
{
+ ///
+ /// Describes properties for creating edge detection filters.
+ ///
public interface IEdgeFilter
{
- double[,] HorizontalMatrix { get; }
+ ///
+ /// Gets the horizontal gradient operator.
+ ///
+ double[,] HorizontalGradientOperator { get; }
- double[,] VerticalMatrix { get; }
+ ///
+ /// Gets the vertical gradient operator.
+ ///
+ double[,] VerticalGradientOperator { get; }
}
}
diff --git a/src/ImageProcessor/Imaging/EdgeDetection/PrewittEdgeFilter.cs b/src/ImageProcessor/Imaging/EdgeDetection/PrewittEdgeFilter.cs
new file mode 100644
index 000000000..da6650208
--- /dev/null
+++ b/src/ImageProcessor/Imaging/EdgeDetection/PrewittEdgeFilter.cs
@@ -0,0 +1,52 @@
+// --------------------------------------------------------------------------------------------------------------------
+//
+// Copyright (c) James South.
+// Licensed under the Apache License, Version 2.0.
+//
+//
+// The Prewitt operator filter.
+//
+//
+// --------------------------------------------------------------------------------------------------------------------
+
+namespace ImageProcessor.Imaging.EdgeDetection
+{
+ ///
+ /// The Prewitt operator filter.
+ ///
+ ///
+ public class PrewittEdgeFilter : IEdgeFilter
+ {
+ ///
+ /// Gets the horizontal gradient operator.
+ ///
+ public double[,] HorizontalGradientOperator
+ {
+ get
+ {
+ return new double[,]
+ {
+ { -1, 0, 1 },
+ { -1, 0, 1 },
+ { -1, 0, 1 }
+ };
+ }
+ }
+
+ ///
+ /// Gets the vertical gradient operator.
+ ///
+ public double[,] VerticalGradientOperator
+ {
+ get
+ {
+ return new double[,]
+ {
+ { 1, 1, 1 },
+ { 0, 0, 0 },
+ { -1, -1, -1 }
+ };
+ }
+ }
+ }
+}
diff --git a/src/ImageProcessor/Imaging/EdgeDetection/RobertsCrossEdgeFilter.cs b/src/ImageProcessor/Imaging/EdgeDetection/RobertsCrossEdgeFilter.cs
new file mode 100644
index 000000000..b05b5836d
--- /dev/null
+++ b/src/ImageProcessor/Imaging/EdgeDetection/RobertsCrossEdgeFilter.cs
@@ -0,0 +1,50 @@
+// --------------------------------------------------------------------------------------------------------------------
+//
+// Copyright (c) James South.
+// Licensed under the Apache License, Version 2.0.
+//
+//
+// The Roberts Cross operator filter.
+//
+//
+// --------------------------------------------------------------------------------------------------------------------
+
+namespace ImageProcessor.Imaging.EdgeDetection
+{
+ ///
+ /// The Roberts Cross operator filter.
+ ///
+ ///
+ public class RobertsCrossEdgeFilter : IEdgeFilter
+ {
+ ///
+ /// Gets the horizontal gradient operator.
+ ///
+ public double[,] HorizontalGradientOperator
+ {
+ get
+ {
+ return new double[,]
+ {
+ { 1, 0 },
+ { 0, -1 }
+ };
+ }
+ }
+
+ ///
+ /// Gets the vertical gradient operator.
+ ///
+ public double[,] VerticalGradientOperator
+ {
+ get
+ {
+ return new double[,]
+ {
+ { 0, 1 },
+ { -1, 0 }
+ };
+ }
+ }
+ }
+}
diff --git a/src/ImageProcessor/Imaging/EdgeDetection/ScharrEdgeFilter.cs b/src/ImageProcessor/Imaging/EdgeDetection/ScharrEdgeFilter.cs
new file mode 100644
index 000000000..89645f54f
--- /dev/null
+++ b/src/ImageProcessor/Imaging/EdgeDetection/ScharrEdgeFilter.cs
@@ -0,0 +1,52 @@
+// --------------------------------------------------------------------------------------------------------------------
+//
+// Copyright (c) James South.
+// Licensed under the Apache License, Version 2.0.
+//
+//
+// The Scharr operator filter.
+//
+//
+// --------------------------------------------------------------------------------------------------------------------
+
+namespace ImageProcessor.Imaging.EdgeDetection
+{
+ ///
+ /// The Scharr operator filter.
+ ///
+ ///
+ public class ScharrEdgeFilter : IEdgeFilter
+ {
+ ///
+ /// Gets the horizontal gradient operator.
+ ///
+ public double[,] HorizontalGradientOperator
+ {
+ get
+ {
+ return new double[,]
+ {
+ { -3, 0, 3 },
+ { -10, 0, 10 },
+ { -3, 0, 3 }
+ };
+ }
+ }
+
+ ///
+ /// Gets the vertical gradient operator.
+ ///
+ public double[,] VerticalGradientOperator
+ {
+ get
+ {
+ return new double[,]
+ {
+ { 3, 10, 3 },
+ { 0, 0, 0 },
+ { -3, -10, -3 }
+ };
+ }
+ }
+ }
+}
diff --git a/src/ImageProcessor/Imaging/EdgeDetection/SobelEdgeFilter.cs b/src/ImageProcessor/Imaging/EdgeDetection/SobelEdgeFilter.cs
index ac71d1caa..6fa59a8fb 100644
--- a/src/ImageProcessor/Imaging/EdgeDetection/SobelEdgeFilter.cs
+++ b/src/ImageProcessor/Imaging/EdgeDetection/SobelEdgeFilter.cs
@@ -1,26 +1,51 @@
-namespace ImageProcessor.Imaging.EdgeDetection
+// --------------------------------------------------------------------------------------------------------------------
+//
+// Copyright (c) James South.
+// Licensed under the Apache License, Version 2.0.
+//
+//
+// The Sobel operator filter.
+//
+//
+// --------------------------------------------------------------------------------------------------------------------
+
+namespace ImageProcessor.Imaging.EdgeDetection
{
+ ///
+ /// The Sobel operator filter.
+ ///
+ ///
public class SobelEdgeFilter : IEdgeFilter
{
- public double[,] HorizontalMatrix
+ ///
+ /// Gets the horizontal gradient operator.
+ ///
+ public double[,] HorizontalGradientOperator
{
get
{
- return new double[,]
- { { -1, 0, 1, },
- { -2, 0, 2, },
- { -1, 0, 1, }, };
+ return new double[,]
+ {
+ { -1, 0, 1 },
+ { -2, 0, 2 },
+ { -1, 0, 1 }
+ };
}
}
- public double[,] VerticalMatrix
+ ///
+ /// Gets the vertical gradient operator.
+ ///
+ public double[,] VerticalGradientOperator
{
get
{
- return new double[,]
- { { 1, 2, 1, },
- { 0, 0, 0, },
- { -1, -2, -1, }, };
+ return new double[,]
+ {
+ { 1, 2, 1 },
+ { 0, 0, 0 },
+ { -1, -2, -1 }
+ };
}
}
}
diff --git a/src/ImageProcessor/Imaging/FastBitmap.cs b/src/ImageProcessor/Imaging/FastBitmap.cs
index 97af88356..db8d80643 100644
--- a/src/ImageProcessor/Imaging/FastBitmap.cs
+++ b/src/ImageProcessor/Imaging/FastBitmap.cs
@@ -156,12 +156,12 @@ namespace ImageProcessor.Imaging
/// The at the given pixel.
public Color GetPixel(int x, int y)
{
- if ((x < 0) || (x >= this.width))
+ if ((x < 0) || (x > this.width))
{
throw new ArgumentOutOfRangeException("x", "Value cannot be less than zero or greater than the bitmap width.");
}
- if ((y < 0) || (y >= this.height))
+ if ((y < 0) || (y > this.height))
{
throw new ArgumentOutOfRangeException("y", "Value cannot be less than zero or greater than the bitmap height.");
}
diff --git a/src/ImageProcessor/Processors/DetectEdges.cs b/src/ImageProcessor/Processors/DetectEdges.cs
index a368d6f9a..9df1e5184 100644
--- a/src/ImageProcessor/Processors/DetectEdges.cs
+++ b/src/ImageProcessor/Processors/DetectEdges.cs
@@ -1,16 +1,25 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
+// --------------------------------------------------------------------------------------------------------------------
+//
+// Copyright (c) James South.
+// Licensed under the Apache License, Version 2.0.
+//
+//
+// Produces an image with the detected edges highlighted.
+//
+// --------------------------------------------------------------------------------------------------------------------
namespace ImageProcessor.Processors
{
+ using System;
+ using System.Collections.Generic;
using System.Drawing;
using ImageProcessor.Common.Exceptions;
using ImageProcessor.Imaging.EdgeDetection;
+ ///
+ /// Produces an image with the detected edges highlighted.
+ ///
public class DetectEdges : IGraphicsProcessor
{
///
@@ -53,24 +62,27 @@ namespace ImageProcessor.Processors
{
Bitmap newImage = null;
Image image = factory.Image;
- IEdgeFilter filter = this.DynamicParameter;
- try
- {
- ConvolutionFilter convolutionFilter = new ConvolutionFilter(filter);
+ Tuple parameters = this.DynamicParameter;
+ IEdgeFilter filter = parameters.Item1;
+ bool greyscale = parameters.Item2;
+
+ //try
+ //{
+ ConvolutionFilter convolutionFilter = new ConvolutionFilter(filter, greyscale);
newImage = convolutionFilter.ProcessFilter((Bitmap)image);
image.Dispose();
image = newImage;
- }
- catch (Exception ex)
- {
- if (newImage != null)
- {
- newImage.Dispose();
- }
+ //}
+ //catch (Exception ex)
+ //{
+ // if (newImage != null)
+ // {
+ // newImage.Dispose();
+ // }
- throw new ImageProcessingException("Error processing image with " + this.GetType().Name, ex);
- }
+ // throw new ImageProcessingException("Error processing image with " + this.GetType().Name, ex);
+ //}
return image;
}
diff --git a/src/ImageProcessor/Settings.StyleCop b/src/ImageProcessor/Settings.StyleCop
index 085067600..9e50dcc98 100644
--- a/src/ImageProcessor/Settings.StyleCop
+++ b/src/ImageProcessor/Settings.StyleCop
@@ -8,6 +8,8 @@
gps
mmmm
orig
+ Scharr
+ Sobel
specifier
ss
subfile
diff --git a/src/ImageProcessorConsole/Program.cs b/src/ImageProcessorConsole/Program.cs
index 4adeb1238..16a821272 100644
--- a/src/ImageProcessorConsole/Program.cs
+++ b/src/ImageProcessorConsole/Program.cs
@@ -46,7 +46,7 @@ namespace ImageProcessorConsole
di.Create();
}
- IEnumerable files = GetFilesByExtensions(di, ".jpg");
+ IEnumerable files = GetFilesByExtensions(di, ".png");
//IEnumerable files = GetFilesByExtensions(di, ".gif", ".webp", ".bmp", ".jpg", ".png", ".tif");
foreach (FileInfo fileInfo in files)
@@ -77,7 +77,7 @@ namespace ImageProcessorConsole
//.Constrain(size)
//.ReplaceColor(Color.FromArgb(255, 1, 107, 165), Color.FromArgb(255, 1, 165, 13), 80)
.Resize(layer)
- .DetectEdges(new SobelEdgeFilter())
+ .DetectEdges(new CostellaEdgeFilter(), false)
//.Filter(MatrixFilters.Comic)
//.Filter(MatrixFilters.HiSatch)
//.Pixelate(8)
diff --git a/src/ImageProcessorConsole/images/input/Bikesgray.png.REMOVED.git-id b/src/ImageProcessorConsole/images/input/Bikesgray.png.REMOVED.git-id
new file mode 100644
index 000000000..defbf8e5e
--- /dev/null
+++ b/src/ImageProcessorConsole/images/input/Bikesgray.png.REMOVED.git-id
@@ -0,0 +1 @@
+93b93eade2c7697a0a8fe9363d493a8a59de245a
\ No newline at end of file
diff --git a/src/ImageProcessorConsole/images/input/Valve_original_(1).PNG.REMOVED.git-id b/src/ImageProcessorConsole/images/input/Valve_original_(1).PNG.REMOVED.git-id
new file mode 100644
index 000000000..6659a180b
--- /dev/null
+++ b/src/ImageProcessorConsole/images/input/Valve_original_(1).PNG.REMOVED.git-id
@@ -0,0 +1 @@
+bdff6764fd5c4e3054ba7d8c43cc8c29be0e6f5e
\ No newline at end of file
diff --git a/src/ImageProcessorConsole/images/input/circle2.png b/src/ImageProcessorConsole/images/input/circle2.png
new file mode 100644
index 000000000..8637ac54b
--- /dev/null
+++ b/src/ImageProcessorConsole/images/input/circle2.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:2dd59c277b646f15b0223c028ddfb0fa7d5edcb2609882e2c6841e5b2714cd67
+size 3182
diff --git a/src/ImageProcessorConsole/images/output/Bikesgray.png b/src/ImageProcessorConsole/images/output/Bikesgray.png
new file mode 100644
index 000000000..31e18fbd4
--- /dev/null
+++ b/src/ImageProcessorConsole/images/output/Bikesgray.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:7eb6df312d356346d0d7f5d55c657a4a3a08f11d293c93f56447137a49190d0f
+size 17319
diff --git a/src/ImageProcessorConsole/images/output/Valve_original_(1).PNG b/src/ImageProcessorConsole/images/output/Valve_original_(1).PNG
new file mode 100644
index 000000000..fb30d23e9
--- /dev/null
+++ b/src/ImageProcessorConsole/images/output/Valve_original_(1).PNG
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:8d74259c087adb38c335a3162c56f1c3ae344e098f2471d79d702d80a95907a3
+size 4066
diff --git a/src/ImageProcessorConsole/images/output/circle.png b/src/ImageProcessorConsole/images/output/circle.png
new file mode 100644
index 000000000..53b70b1c3
--- /dev/null
+++ b/src/ImageProcessorConsole/images/output/circle.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:343794bc824674c81cd8ba90acd3bb690d43c84d363e3375e8ee42207867f977
+size 7011
diff --git a/src/ImageProcessorConsole/images/output/circle2.png b/src/ImageProcessorConsole/images/output/circle2.png
new file mode 100644
index 000000000..9359c3136
--- /dev/null
+++ b/src/ImageProcessorConsole/images/output/circle2.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:662cd66659e03b0ca18e62d2e9bdc69e62e082fad9a0316348db031f67092497
+size 4407
diff --git a/src/ImageProcessorConsole/images/output/monster.png.REMOVED.git-id b/src/ImageProcessorConsole/images/output/monster.png.REMOVED.git-id
new file mode 100644
index 000000000..91da330d3
--- /dev/null
+++ b/src/ImageProcessorConsole/images/output/monster.png.REMOVED.git-id
@@ -0,0 +1 @@
+ef1fdff21802713450cf2f81321c0605962ec6f5
\ No newline at end of file
diff --git a/src/ImageProcessorConsole/images/output/night-bridge.png.REMOVED.git-id b/src/ImageProcessorConsole/images/output/night-bridge.png.REMOVED.git-id
new file mode 100644
index 000000000..60d52025b
--- /dev/null
+++ b/src/ImageProcessorConsole/images/output/night-bridge.png.REMOVED.git-id
@@ -0,0 +1 @@
+fad7e5225f13c9d35d9e877c93e2bb44da7404c0
\ No newline at end of file