public static void PrintMatrix(string name, YCrCb[,] matrix)
        {
            Console.WriteLine(name + " Y ");
            for (int i = 0; i < matrix.GetLength(0); i++)
            {
                for (int j = 0; j < matrix.GetLength(1); j++)
                {
                    Console.Write((matrix[i, j].Y).ToString().PadLeft(6, ' '));
                }
                Console.WriteLine();
            }
            Console.WriteLine();

            //Console.WriteLine(name + " Cr ");
            //for (int i = 0; i < matrix.GetLength(0); i++)
            //{
            //    for (int j = 0; j < matrix.GetLength(1); j++)
            //    {
            //        Console.Write((matrix[i, j].Cr).ToString().PadLeft(10, ' '));
            //    }
            //    Console.WriteLine();
            //}
            //Console.WriteLine();

            //Console.WriteLine(name + " Cb ");
            //for (int i = 0; i < matrix.GetLength(0); i++)
            //{
            //    for (int j = 0; j < matrix.GetLength(1); j++)
            //    {
            //        Console.Write((matrix[i, j].Cb).ToString().PadLeft(10, ' '));
            //    }
            //    Console.WriteLine();
            //}
            //Console.WriteLine();
        }
Example #2
0
 public void Supersample(YCrCb[,] matrix)
 {
     for (int i = 0; i < matrix.GetLength(0); i++)
     {
         for (int j = 0; j < matrix.GetLength(1); j++)
         {
             matrix[i, j].Y += 128;
             matrix[i, j].Cr += 128;
             matrix[i, j].Cb += 128;
         }
     }
 }
Example #3
0
        public void CalculateIDCT(YCrCb[,] matrix)
        {
            int width = matrix.GetLength(0);
            int height = matrix.GetLength(1);

            for (int x = 0; x < width; x = x + BlockSize)
            {
                for (int y = 0; y < height; y = y + BlockSize)
                {
                    calculateIDCTForBlock(matrix, x, y);
                }
            }
        }
 private int bitsPerNonZeroDCTCoefficient(YCrCb[,] matrix)
 {
     int count = 0;
     for (int i = 0; i < matrix.GetLength(0); i++)
     {
         for (int j = 0; j < matrix.GetLength(1); j++)
         {
             if (matrix[i, j].Y != 0 && matrix[i, j].Y != 1)
             {
                 count++;
             }
         }
     }
     return count;
 }
        public List<Point> Permutation(YCrCb[,] matrix)
        {
            var points = new List<Point>();

            for (int i = 0; i < matrix.GetLength(0); i++)
            {
                for (int j = 0; j < matrix.GetLength(1); j++)
                {
                    if (matrix[i, j].Y != 0 && matrix[i, j].Y != 1)
                    {
                        points.Add(new Point(i, j));
                    }
                }
            }
            return points;
        }
Example #6
0
        public static RGB[,] Parse(YCrCb[,] yCrCb)
        {
            int m = yCrCb.GetLength(0);
            int n = yCrCb.GetLength(1);
            var matrix = new RGB[m, n];

            for (int i = 0; i < m; i++)
            {
                for (int j = 0; j < n; j++)
                {
                    matrix[i, j] = Parse(yCrCb[i, j]);
                }
            }

            return matrix;
        }
        public void ApplyQuantization(YCrCb[,] matrix, int qualityFactor)
        {
            int i, j, k, l;
            int[,] qualityLuminanceMatrix = generateQualityFactorLuminanceMatrix(qualityFactor);
            int[,] qualityChrominanceMatrix = generateQualityFactorChrominanceMatrix(qualityFactor);

            for (i = 0; i < matrix.GetLength(0); i++)
            {
                k = i % 8;
                for (j = 0; j < matrix.GetLength(1); j++)
                {
                    l = j % 8;
                    matrix[i, j].Y = Math.Round(matrix[i, j].Y / qualityLuminanceMatrix[k, l]);
                    matrix[i, j].Cr = Math.Round(matrix[i, j].Cr / qualityChrominanceMatrix[k, l]);
                    matrix[i, j].Cb = Math.Round(matrix[i, j].Cb / qualityChrominanceMatrix[k, l]);
                }
            }
        }