26 lines
751 B
C#
26 lines
751 B
C#
namespace NodePipeline.Application.ImageProcessing;
|
|
|
|
public static class Convolution
|
|
{
|
|
public static void Apply(ImageBuffer src, ImageBuffer dst, float[] kernel)
|
|
{
|
|
var w = src.Width;
|
|
var h = src.Height;
|
|
var radius = kernel.Length / 2;
|
|
|
|
for (var y = 0; y < h; y++)
|
|
for (var x = 0; x < w; x++)
|
|
for (var c = 0; c < 3; c++)
|
|
{
|
|
float acc = 0;
|
|
for (var k = -radius; k <= radius; k++)
|
|
{
|
|
var px = Math.Clamp(x + k, 0, w - 1);
|
|
var idx = (y * w + px) * 3 + c;
|
|
acc += src.Pixels[idx] * kernel[k + radius];
|
|
}
|
|
|
|
dst.Pixels[(y * w + x) * 3 + c] = (byte)Math.Clamp(acc, 0, 255);
|
|
}
|
|
}
|
|
} |