Ejemplo n.º 1
0
 public void MiddleFilter()
 {
     for (int i = 1; i < SizesOfImage[1] - 1; i++)
     {
         for (int j = SizesOfImage[2]; j < SizesOfImage[0] - SizesOfImage[2]; j += SizesOfImage[2])
         {
             int    counter = 0;
             byte[] buffer  = Pixels
                              .Skip(i - 1)
                              .Take(3)
                              .Select(x => x
                                      .Skip(j - SizesOfImage[2])
                                      .Take(3 * SizesOfImage[2]))
                              .SelectMany(x => x)
                              .ToArray()
                              .GroupBy(x => counter++ % SizesOfImage[2])
                              .Select(x => x
                                      .OrderBy(y => y))
                              .SelectMany(x => x)
                              .ToArray();
             for (int k = 0; k < 3; k++)
             {
                 Pixels[i][j + k] = buffer.Skip(4 + 9 * k).First();
             }
         }
     }
 }
Ejemplo n.º 2
0
 public void GaussFilter()
 {
     double[] gaussFilter = { 0.307801, 0.384396, 0.307801 };
     for (int i = 1; i < SizesOfImage[1] - 1; i++)
     {
         for (int j = SizesOfImage[2]; j < SizesOfImage[0] - SizesOfImage[2]; j += SizesOfImage[2])
         {
             int    counter        = 0;
             int    anotherCounter = 0;
             byte[] buffer         = Pixels
                                     .Skip(i - 1)
                                     .Take(3)
                                     .Select(x => x
                                             .Skip(j - SizesOfImage[2])
                                             .Take(3 * SizesOfImage[2]))
                                     .SelectMany(x => x)
                                     .ToArray()
                                     .GroupBy(x => anotherCounter++ % SizesOfImage[2])
                                     .Select(x => x
                                             .Select(y => y * gaussFilter[(counter / 3) % 3] * gaussFilter[counter++ % 3]))
                                     .Select(x => x
                                             .Select(y => (byte)x.Sum())
                                             .ToArray())
                                     .SelectMany(x => x)
                                     .ToArray();
             for (int k = 0; k < 3; k++)
             {
                 Pixels[i][j + k] = buffer.Skip(9 * k).First();
             }
         }
     }
 }
Ejemplo n.º 3
0
        public void SobelAxisFilter(int flag) // 1 - xAxis, 0 - yAxis
        {
            GreyFilter();
            const int limit = 73;

            byte[][] bufferPixels = new byte[SizesOfImage[1]][]
                                    .Select(x => new byte[SizesOfImage[0]])
                                    .ToArray();
            int[] sobelFilter = { -1, 2 * (flag - 1), -1 + 2 * flag, -2 * flag, 0, 2 * flag, 1 - 2 * flag, 2 - 2 * flag, 1 }; // {-1, 0, 1, -2, 0, 2, -1, 0, 1} for flag == 1, {-1, -2, -1, 0, 0, 0, 1, 2, 1} for == 0
            for (int i = 1; i < SizesOfImage[1] - 1; i++)
            {
                for (int j = SizesOfImage[2]; j < SizesOfImage[0] - SizesOfImage[2]; j++)
                {
                    int    counter = 0;
                    byte[] buffer  = Pixels
                                     .Skip(i - 1)
                                     .Take(3)
                                     .Select(x => x
                                             .Skip(j - SizesOfImage[2])
                                             .Take(3 * SizesOfImage[2]))
                                     .SelectMany(x => x)
                                     .ToArray()
                                     .Where((x, y) => y % 3 == 0)
                                     .ToArray();
                    bufferPixels[i][j / SizesOfImage[2]] = (byte)(255 * Convert.ToInt32(Math.Abs(buffer.Select(x => x * sobelFilter[counter++ % 9]).Sum()) > limit)); // 255 for > limit and 0 for <=
                }
            }
            int k = 0;
            int l = 0;

            Pixels = Pixels
                     .Select(x => x
                             .Select(y => bufferPixels[k++ / SizesOfImage[0]][(l++ % SizesOfImage[0]) / SizesOfImage[2]])
                             .ToArray())
                     .ToArray();
        }