public Bitmap GetBitmap(Pixel[,] pixelMap)
        {
            Bitmap bmp = new Bitmap(pixelMap.GetUpperBound(1) + 1, pixelMap.GetUpperBound(0) + 1);

            for (int i = 0; i < pixelMap.GetUpperBound(0) + 1; i++)
            {
                for (int j = 0; j < pixelMap.GetUpperBound(1) + 1; j++)
                {
                    bmp.SetPixel(j, i, Color.FromArgb(pixelMap[i, j].R, pixelMap[i, j].G, pixelMap[i, j].B));
                }
            }
            return(bmp);
        }
 public Pixel[,] Negative(Pixel[,] pixelMap)
 {
     for (int i = 0; i < pixelMap.GetUpperBound(0) + 1; i++)
     {
         for (int j = 0; j < pixelMap.GetUpperBound(1) + 1; j++)
         {
             pixelMap[i, j].R = (byte)(255 - pixelMap[i, j].R);
             pixelMap[i, j].G = (byte)(255 - pixelMap[i, j].G);
             pixelMap[i, j].B = (byte)(255 - pixelMap[i, j].B);
         }
     }
     return(pixelMap);
 }
 public Pixel[,] GammaCorrection(Pixel[,] pixelMap, float gamma)
 {
     for (int i = 0; i < pixelMap.GetUpperBound(0) + 1; i++)
     {
         for (int j = 0; j < pixelMap.GetUpperBound(1) + 1; j++)
         {
             pixelMap[i, j].R = (byte)(Math.Pow((float)pixelMap[i, j].R / 255, gamma) * 255);
             pixelMap[i, j].G = (byte)(Math.Pow((float)pixelMap[i, j].G / 255, gamma) * 255);
             pixelMap[i, j].B = (byte)(Math.Pow((float)pixelMap[i, j].B / 255, gamma) * 255);
         }
     }
     return(pixelMap);
 }
Ejemplo n.º 4
0
        private static void Fill(Pixel[,] buffer, Pixel pixel)
        {
            var width  = buffer.GetUpperBound(0);
            var height = buffer.GetUpperBound(1);

            for (int x = 0; x < width; x++)
            {
                for (int y = 0; y < height; y++)
                {
                    buffer[x, y] = pixel;
                }
            }
        }
 public Pixel[,] Sepia(Pixel[,] pixelMap, int depth)
 {
     for (int i = 0; i < pixelMap.GetUpperBound(0) + 1; i++)
     {
         for (int j = 0; j < pixelMap.GetUpperBound(1) + 1; j++)
         {
             var av = (pixelMap[i, j].R + pixelMap[i, j].G + pixelMap[i, j].B) / 3;
             pixelMap[i, j].R = (byte)(av + 2 * depth > 255 ? 255 : av + 2 * depth);
             pixelMap[i, j].G = (byte)(av + depth > 255 ? 255 : av + depth);
             pixelMap[i, j].B = (byte)av;
         }
     }
     return(pixelMap);
 }
 public Pixel[,] Grey(Pixel[,] pixelMap)
 {
     for (int i = 0; i < pixelMap.GetUpperBound(0) + 1; i++)
     {
         for (int j = 0; j < pixelMap.GetUpperBound(1) + 1; j++)
         {
             var av = (pixelMap[i, j].R + pixelMap[i, j].G + pixelMap[i, j].B) / 3;
             pixelMap[i, j].R = (byte)av;
             pixelMap[i, j].G = (byte)av;
             pixelMap[i, j].B = (byte)av;
         }
     }
     return(pixelMap);
 }
        public Pixel[,] IdealFilter(Pixel[,] pixelMap)
        {
            var max = GetMaxLevel(pixelMap);

            for (int i = 0; i < pixelMap.GetUpperBound(0) + 1; i++)
            {
                for (int j = 0; j < pixelMap.GetUpperBound(1) + 1; j++)
                {
                    pixelMap[i, j].R = (byte)(pixelMap[i, j].R * 255 / max.R);
                    pixelMap[i, j].G = (byte)(pixelMap[i, j].G * 255 / max.G);
                    pixelMap[i, j].B = (byte)(pixelMap[i, j].B * 255 / max.B);
                }
            }
            return(pixelMap);
        }
        //Автоконтраст
        public Pixel[,] AutoLevels(Pixel[,] pixelMap)
        {
            var max = GetMaxLevel(pixelMap);
            var min = GetMinLevel(pixelMap);

            for (int i = 0; i < pixelMap.GetUpperBound(0) + 1; i++)
            {
                for (int j = 0; j < pixelMap.GetUpperBound(1) + 1; j++)
                {
                    pixelMap[i, j].R = (byte)((pixelMap[i, j].R - min.R) * (255 / (max.R - min.R)));
                    pixelMap[i, j].G = (byte)((pixelMap[i, j].G - min.G) * (255 / (max.G - min.G)));
                    pixelMap[i, j].B = (byte)((pixelMap[i, j].B - min.B) * (255 / (max.B - min.B)));
                }
            }
            return(pixelMap);
        }
        public Pixel[,] GreyWorld(Pixel[,] pixelMap)
        {
            byte av      = 0;
            var  AvLevel = GetAverageLevel(pixelMap, out av);

            for (int i = 0; i < pixelMap.GetUpperBound(0) + 1; i++)
            {
                for (int j = 0; j < pixelMap.GetUpperBound(1) + 1; j++)
                {
                    pixelMap[i, j].R = (byte)(pixelMap[i, j].R * av / AvLevel.R);
                    pixelMap[i, j].G = (byte)(pixelMap[i, j].G * av / AvLevel.G);
                    pixelMap[i, j].B = (byte)(pixelMap[i, j].B * av / AvLevel.B);
                }
            }
            return(pixelMap);
        }
        public Pixel[,] Noise(Pixel[,] pixelMap, int depth)
        {
            long R, G, B;

            for (int i = 0; i < pixelMap.GetUpperBound(0) + 1; i++)
            {
                for (int j = 0; j < pixelMap.GetUpperBound(1) + 1; j++)
                {
                    Random rnd  = new Random();
                    var    rand = Convert.ToInt32(Math.Floor((rnd.NextDouble() - 1) * depth));
                    R = pixelMap[i, j].R + rand;
                    G = pixelMap[i, j].G + rand;
                    B = pixelMap[i, j].B + rand;
                    if (R > 255)
                    {
                        R = 255;
                    }
                    if (G > 255)
                    {
                        G = 255;
                    }
                    if (B > 255)
                    {
                        B = 255;
                    }
                    if (R < 0)
                    {
                        R = 0;
                    }
                    if (G < 0)
                    {
                        G = 0;
                    }
                    if (B < 0)
                    {
                        B = 0;
                    }
                    pixelMap[i, j].R = (byte)R;
                    pixelMap[i, j].G = (byte)G;
                    pixelMap[i, j].B = (byte)B;
                }
            }
            return(pixelMap);
        }
        public Pixel GetAverageLevel(Pixel[,] pixelMap, out byte av)
        {
            long R = 0, G = 0, B = 0;

            for (int i = 0; i < pixelMap.GetUpperBound(0) + 1; i++)
            {
                for (int j = 0; j < pixelMap.GetUpperBound(1) + 1; j++)
                {
                    R += pixelMap[i, j].R;
                    G += pixelMap[i, j].G;
                    B += pixelMap[i, j].B;
                }
            }
            R  = R / pixelMap.Length;
            G  = G / pixelMap.Length;
            B  = B / pixelMap.Length;
            av = (byte)((R + G + B) / 3);
            return(new Pixel((byte)R, (byte)G, (byte)B));
        }
Ejemplo n.º 12
0
        public static bool CheckNeigbours(Pixel[,] pixels, int x, int y)
        {
            int width = pixels.GetUpperBound(0) + 1, height = pixels.Length / width;

            if (x < width && y < height && x >= 0 && y >= 0 && !IsWhiteColor(pixels[x, y].Color) && !pixels[x, y].IsChecked)
            {
                return(true);
            }

            return(false);
        }
        public Pixel GetMinLevel(Pixel[,] pixelMap)
        {
            byte R = 255, G = 255, B = 255;

            for (int i = 0; i < pixelMap.GetUpperBound(0) + 1; i++)
            {
                for (int j = 0; j < pixelMap.GetUpperBound(1) + 1; j++)
                {
                    if (pixelMap[i, j].R < R)
                    {
                        R = pixelMap[i, j].R;
                    }
                    if (pixelMap[i, j].G < G)
                    {
                        G = pixelMap[i, j].G;
                    }
                    if (pixelMap[i, j].B < B)
                    {
                        B = pixelMap[i, j].B;
                    }
                }
            }
            return(new Pixel(R, G, B));
        }
        public Pixel GetMaxLevel(Pixel[,] pixelMap)
        {
            byte R = 0, G = 0, B = 0;

            for (int i = 0; i < pixelMap.GetUpperBound(0) + 1; i++)
            {
                for (int j = 0; j < pixelMap.GetUpperBound(1) + 1; j++)
                {
                    if (pixelMap[i, j].R > R)
                    {
                        R = pixelMap[i, j].R;
                    }
                    if (pixelMap[i, j].G > G)
                    {
                        G = pixelMap[i, j].G;
                    }
                    if (pixelMap[i, j].B > B)
                    {
                        B = pixelMap[i, j].B;
                    }
                }
            }
            return(new Pixel(R, G, B));
        }
        public Pixel[,] BoxFilter(Pixel[,] pixelMap, float[,] mask)
        {
            float denom = 0;
            float R = 0, G = 0, B = 0;
            var   maskY = mask.GetUpperBound(0) + 1;
            var   maskX = mask.GetUpperBound(1) + 1;

            for (int i = 0; i < maskY; i++)
            {
                for (int j = 0; j < maskX; j++)
                {
                    denom += mask[i, j];
                }
            }
            var sizeY = pixelMap.GetUpperBound(0) + 1;
            var sizeX = pixelMap.GetUpperBound(1) + 1;

            Pixel[,] newMap = new Pixel[sizeY, sizeX];
            for (int i = 0; i < pixelMap.GetUpperBound(0) + 1; i++)
            {
                for (int j = 0; j < pixelMap.GetUpperBound(1) + 1; j++)
                {
                    newMap[i, j] = pixelMap[i, j];
                }
            }
            if (denom == 0)
            {
                denom = 1;
            }

            for (int i = maskY / 2; i < pixelMap.GetUpperBound(0) + 1 - maskY / 2; i++)
            {
                for (int j = maskX / 2; j < pixelMap.GetUpperBound(1) + 1 - maskX / 2; j++)
                {
                    R = 0; G = 0; B = 0;
                    for (int l = 0; l < maskY; l++)
                    {
                        for (int m = 0; m < maskX; m++)
                        {
                            R += pixelMap[i + l - maskY / 2, j + m - maskX / 2].R * mask[l, m];
                            G += pixelMap[i + l - maskY / 2, j + m - maskX / 2].G * mask[l, m];
                            B += pixelMap[i + l - maskY / 2, j + m - maskX / 2].B * mask[l, m];
                        }
                    }
                    R = R / denom; G = G / denom; B = B / denom;
                    if (R > 255)
                    {
                        R = 255;
                    }
                    if (G > 255)
                    {
                        G = 255;
                    }
                    if (B > 255)
                    {
                        B = 255;
                    }
                    if (R < 0)
                    {
                        R = 0;
                    }
                    if (G < 0)
                    {
                        G = 0;
                    }
                    if (B < 0)
                    {
                        B = 0;
                    }
                    newMap[i, j] = new Pixel((byte)R, (byte)G, (byte)B);
                }
            }
            return(newMap);
        }