Files
SuperVPN/output/Libraries/AForge.Math/AForge/Math/Gaussian.cs
2025-10-09 09:57:24 +09:00

82 lines
1.4 KiB
C#

using System;
namespace AForge.Math;
public class Gaussian
{
private double sigma = 1.0;
private double sqrSigma = 1.0;
public double Sigma
{
get
{
return sigma;
}
set
{
sigma = System.Math.Max(1E-08, value);
sqrSigma = sigma * sigma;
}
}
public Gaussian()
{
}
public Gaussian(double sigma)
{
Sigma = sigma;
}
public double Function(double x)
{
return System.Math.Exp(x * x / (-2.0 * sqrSigma)) / (System.Math.Sqrt(System.Math.PI * 2.0) * sigma);
}
public double Function2D(double x, double y)
{
return System.Math.Exp((x * x + y * y) / (-2.0 * sqrSigma)) / (System.Math.PI * 2.0 * sqrSigma);
}
public double[] Kernel(int size)
{
if (size % 2 == 0 || size < 3 || size > 101)
{
throw new ArgumentException("Wrong kernal size.");
}
int num = size / 2;
double[] array = new double[size];
int num2 = -num;
for (int i = 0; i < size; i++)
{
array[i] = Function(num2);
num2++;
}
return array;
}
public double[,] Kernel2D(int size)
{
if (size % 2 == 0 || size < 3 || size > 101)
{
throw new ArgumentException("Wrong kernal size.");
}
int num = size / 2;
double[,] array = new double[size, size];
int num2 = -num;
for (int i = 0; i < size; i++)
{
int num3 = -num;
for (int j = 0; j < size; j++)
{
array[i, j] = Function2D(num3, num2);
num3++;
}
num2++;
}
return array;
}
}