public Bitmap Binarization(BitImage bmp)
        {
            var result = new Bitmap(bmp.Width, bmp.Height);

            for (var x = 0; x < result.Width; x++)
            {
                for (var y = 0; y < result.Height; y++)
                {
                    var color = bmp.PixelArray[x, y];

                    result.SetPixel(x, y, color <= 120 ? Color.Black : Color.White);
                }
            }
            return result;
        }
        public Bitmap Binarization(BitImage bmp)
        {
            var result = new Bitmap(bmp.Width, bmp.Height);

            for (var i = 0; i < bmp.Width; i++)
            {
                for (var j = 0; j < bmp.Height; j++)
                {
                    var pixel = bmp.PixelArray[i, j];
                    var pixelIntensity = SurroundedValue(i, j, bmp);

                    result.SetPixel(i, j, pixel > pixelIntensity - 5 ? Color.White : Color.Black);
                }
            }

            return result;
        }
        private byte SurroundedValue(int x, int y, BitImage bmp)
        {
            const int radius = 20;

            var left = (x - radius < 0) ? 0 : x - radius;
            var top = (y - radius < 0) ? 0 : y - radius;

            var right = (x + radius < bmp.Width) ? x + radius : bmp.Width - 1;
            var bottom = (y + radius < bmp.Height) ? y + radius : bmp.Height - 1;

            var summaryIntensity = 0;
            var counter = 0;

            for (var i = left; i <= right; i++)
            {
                for (var j = top; j <= bottom; j++)
                {
                    summaryIntensity += bmp.PixelArray[i, j];
                    counter++;
                }
            }
            return (byte)(summaryIntensity / counter);
        }