Initial commit
This commit is contained in:
@@ -0,0 +1,58 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using System.Windows;
|
||||
using System.Windows.Media.Imaging;
|
||||
|
||||
namespace DSPS_Lab3;
|
||||
|
||||
public static class Ex
|
||||
{
|
||||
public static float[,] GenerateSpatialKernel(int size, float sigma)
|
||||
{
|
||||
var kernel = new float[size, size];
|
||||
float sum = 0;
|
||||
var half = size / 2;
|
||||
|
||||
// Use <= half to ensure the full kernel is covered
|
||||
for (var y = -half; y <= half; y++)
|
||||
{
|
||||
for (var x = -half; x <= half; x++)
|
||||
{
|
||||
// Optional: Bounds check for odd/even sizes
|
||||
if (y + half >= size || x + half >= size) continue;
|
||||
|
||||
var val = (float)Math.Exp(-(x * x + y * y) / (2 * sigma * sigma));
|
||||
kernel[y + half, x + half] = val;
|
||||
sum += val;
|
||||
}
|
||||
}
|
||||
|
||||
for (var y = 0; y < size; y++)
|
||||
for (var x = 0; x < size; x++)
|
||||
kernel[y, x] /= sum;
|
||||
|
||||
return kernel;
|
||||
}
|
||||
|
||||
public static float[,] PadAndShiftKernel(float[,] smallKernel, int imgWidth, int imgHeight)
|
||||
{
|
||||
var fullKernel = new float[imgHeight, imgWidth];
|
||||
int kHeight = smallKernel.GetLength(0);
|
||||
int kWidth = smallKernel.GetLength(1);
|
||||
int radY = kHeight / 2;
|
||||
int radX = kWidth / 2;
|
||||
|
||||
for (int y = 0; y < kHeight; y++)
|
||||
{
|
||||
for (int x = 0; x < kWidth; x++)
|
||||
{
|
||||
// Circular shift: maps kernel center to (0,0)
|
||||
int targetY = (y - radY + imgHeight) % imgHeight;
|
||||
int targetX = (x - radX + imgWidth) % imgWidth;
|
||||
fullKernel[targetY, targetX] = smallKernel[y, x];
|
||||
}
|
||||
}
|
||||
return fullKernel;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user