public static int[] Smoothen(int[] edgePoints, int size = 10)
{
if (size > edgePoints.Length)
{
throw new ArgumentException("Smoothing size is too large for image");
}
Queue<int> queue = new Queue<int>(size);
int[] smooth = new int[edgePoints.Length];
int sum = 0;
for (int ii = 0; ii < edgePoints.Length; ii++)
{
if (edgePoints[ii] == IgnorePoint) continue;
if (queue.Count != size)
{
queue.Enqueue(edgePoints[ii]);
sum += edgePoints[ii];
}
else
{
int discarded = queue.Dequeue();
sum -= discarded;
sum += edgePoints[ii];
queue.Enqueue(edgePoints[ii]);
}
smooth[ii] = (int) (sum/(double) queue.Count);
}
return smooth;
}