private void Noise(BitmapModel inputPointer, BitmapModel outputPointer, int sigma) { var random = Randoms.Create(DateTime.Now.Millisecond + Thread.CurrentThread.ManagedThreadId, RandomType.FastestDouble); for (var i = 0; i < inputPointer.Length; i++) { var a = random.NextDouble(); var b = random.NextDouble(); var noise = (float)(sigma * Math.Sqrt(-2.0 * Math.Log(a)) * Math.Cos(2.0 * Math.PI * b)); outputPointer.Data[i] = inputPointer.Data[i] + noise; } }
public (SKBitmap, FilteringStatsModel) MakeNoisy(SKBitmap input, int sigma) { var inputChannels = BitmapModel.Create(input); var noisyChannels = BitmapModel.Create(inputChannels.Width, inputChannels.Height, inputChannels.ColorType, inputChannels.AlphaType); var watch = Stopwatch.StartNew(); this.Noise(inputChannels, noisyChannels, sigma); watch.Stop(); var noisy = noisyChannels.ToBitmap(); var stats = BitmapHelpers.CalculateStats(input, noisy, watch.ElapsedMilliseconds); return(noisy, stats); }