проблема фильтра собеля
У меня есть два ядра для фильтра Собеля, но проблема в том, что горизонтальные и вертикальные линии нечетко определяются, не все линии определяются
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;
}