проблема фильтра собеля

У меня есть два ядра для фильтра Собеля, но проблема в том, что горизонтальные и вертикальные линии нечетко определяются, не все линии определяются

    case "Sobel Gradient Filter (vertical)":
        kernel = new float[,]
        {
        { -1, 0, 1 },
        { -2, 0, 2 },
        { -1, 0, 1 }
        };
        break;

    case "Sobel Gradient Filter (horizontal)":
        kernel = new float[,]
        {
        { 1, 2, 1 },
        { 0, 0, 0 },
        { -1, -2, -1 }
        };
        break;
}

return ApplyConvolution(_image, kernel);

ApplyConvolution:

public Bitmap ApplyConvolution(Bitmap _image, float[,] _kernel)
{
    int kernelSize = _kernel.GetLength(0);
    int edge = kernelSize / 2;
    Bitmap result = new Bitmap(_image.Width, _image.Height);

    for (int y = edge; y < _image.Height - edge; y++)
    {
        for (int x = edge; x < _image.Width - edge; x++)
        {
            float pixelValue = 0.0f;
            for (int ky = -edge; ky <= edge; ky++)
            {
                for (int kx = -edge; kx <= edge; kx++)
                {
                    int px = x + kx;
                    int py = y + ky;
                    Color pixelColor = _image.GetPixel(px, py);
                    float gray = pixelColor.R * 0.3f + pixelColor.G * 0.59f + pixelColor.B * 0.11f;
                    pixelValue += gray * _kernel[ky + edge, kx + edge];
                }
            }

            pixelValue = Math.Min(255, Math.Max(0, pixelValue));
            result.SetPixel(x, y, Color.FromArgb((int)pixelValue, (int)pixelValue, (int)pixelValue));
        }
    }
    return result;
}

Ответы (0 шт):