private static void FinalizeFrame(Tomogram tom)
        {
            int numberOfBackgroundClasses = tom.DataClasses.Where(n => n != 0).Count();

            float[] classKey = new float[numberOfBackgroundClasses];
            for (int c = 0; c < classKey.Length; c++)
            {
                float v = (float)RandomNormal.Next(tom.Random, 85, 15);
                classKey[c] = v * tom.MRCScaler;
            }

            for (int y = 0, i = 0; y < tom.Height; y++)
            {
                for (int x = 0; x < tom.Width; x++, i++)
                {
                    int classNumber = tom.DataClasses[i];
                    if (classNumber > 0 && classNumber <= tom.BackgroundDensity)
                    {
                        tom.Data[i] = classKey[classNumber];
                    }
                }
            }

            GaussianBlur blur = GaussianBlur.BuildBlur(2.0f, 4);

            tom.Data = blur.BlurData(tom.Data, tom.Width, tom.Height);

            for (int y = 0, i = 0; y < tom.Height; y++)
            {
                for (int x = 0; x < tom.Width; x++, i++)
                {
                    int classNumber = tom.DataClasses[i];
                    if (classNumber == -1)
                    {
                        float v = tom.Random.Next(50, 60);
                        tom.Data[i] = v * tom.MRCScaler;
                    }
                }
            }

            tom.Data = blur.BlurData(tom.Data, tom.Width, tom.Height);
        }