public Bitmap returntoColor(int[,] Mat, int[,] MatOrigin, Bitmap OriginalImage)
        {
            Bitmap ColorisedImage = new Bitmap(Mat.GetLength(0), Mat.GetLength(1));

            for (int i = 0; i < Mat.GetLength(0); i++)
            {
                for (int j = 0; j < Mat.GetLength(1); j++)
                {
                    double r = 0;
                    double g = 0;
                    double b = 0;
                    Color  c = OriginalImage.GetPixel(i, j);

                    if (MatOrigin[i, j] != 0)
                    {
                        r = c.R * Mat[i, j] / MatOrigin[i, j];
                        g = c.G * Mat[i, j] / MatOrigin[i, j];
                        b = c.B * Mat[i, j] / MatOrigin[i, j];
                    }
                    else
                    {
                        r = c.R * Mat[i, j];
                        g = c.G * Mat[i, j];
                        b = c.B * Mat[i, j];
                    }

                    ImageProcessor.RangeColors(ref r, ref g, ref b);
                    ColorisedImage.SetPixel(i, j, Color.FromArgb((int)r, (int)g, (int)b));
                }
            }

            return(ColorisedImage);
        }
        public void returntoColor()
        {
            ColorisedImage = new Bitmap(OriginalImage.Width, OriginalImage.Height);

            for (int i = 0; i < OriginalImage.Width; i++)
            {
                for (int j = 0; j < OriginalImage.Height; j++)
                {
                    double r = 0;
                    double g = 0;
                    double b = 0;
                    Color  c = OriginalImage.GetPixel(i, j);

                    if (MatOrigin[i, j] != 0)
                    {
                        r = c.R * Mat[i, j] / MatOrigin[i, j];
                        g = c.G * Mat[i, j] / MatOrigin[i, j];
                        b = c.B * Mat[i, j] / MatOrigin[i, j];
                    }
                    else
                    {
                        r = c.R * Mat[i, j];
                        g = c.G * Mat[i, j];
                        b = c.B * Mat[i, j];
                    }

                    ImageProcessor.RangeColors(ref r, ref g, ref b);
                    ColorisedImage.SetPixel(i, j, Color.FromArgb((int)r, (int)g, (int)b));
                }
            }
        }
        public Bitmap updateImageContrast(int contrastValue)
        {
            contrast = contrastValue;
            Bitmap contrastedImage = ImageProcessor.CopyImage(ColorisedImage);
            double factor          = (double)(259 * (contrastValue + 255)) / (double)(255 * (259 - contrastValue));

            for (int r = 0; r < contrastedImage.Width; r++)
            {
                for (int c = 0; c < contrastedImage.Height; c++)
                {
                    double red   = contrastedImage.GetPixel(r, c).R;
                    double green = contrastedImage.GetPixel(r, c).G;
                    double blue  = contrastedImage.GetPixel(r, c).B;
                    red   = (int)(factor * (red - 128) + 128);
                    green = (int)(factor * (green - 128) + 128);
                    blue  = (int)(factor * (blue - 128) + 128);
                    ImageProcessor.RangeColors(ref red, ref green, ref blue);
                    contrastedImage.SetPixel(r, c, Color.FromArgb(contrastedImage.GetPixel(r, c).A, (int)red, (int)green, (int)blue));
                }
            }

            PreviewImage contrastedColoredImage = new PreviewImage(contrastedImage, true);
            PreviewImage contrastedGreyImage    = new PreviewImage(contrastedImage, false);

            if (isColorised)
            {
                Mat = contrastedColoredImage.Mat;
                GetViewedImage();
                previewStages.Add(new PreviewState(stages, null, OriginalImage, ViewedImage, ColorisedImage, GrayscaleImage, CopyMat(), isColorised, brightness, contrast, saturation));
            }
            else
            {
                Mat = contrastedGreyImage.Mat;
                GetViewedImage();
                previewStages.Add(new PreviewState(stages, null, OriginalImage, ViewedImage, ColorisedImage, GrayscaleImage, CopyMat(), isColorised, brightness, contrast, saturation));
            }

            return(contrastedImage);
        }