Esempio n. 1
0
        public void GreyFilter()
        {
            int counter = 0;

            Pixels = Pixels
                     .Select(x => x
                             .GroupBy(y => counter++ / SizesOfImage[2])
                             .Select(y => y
                                     .Select(z => (byte)(0.3 * y.First() + 0.59 * y.Skip(1).First() + 0.11 * y.Skip(2).First())))
                             .SelectMany(y => y)
                             .ToArray())
                     .ToArray();
        }
Esempio n. 2
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();
        }