8x8 DCT до 256 x 256 оригинальное изображение - PullRequest
0 голосов
/ 06 ноября 2019
 double temp; 
//transpose
for (int u = 0; u < 8; u++)
    for (int x = 0; x < 8; x++)
    {
        if (x == u)
            DCT_T[x][u] = DCT[u][x];
        else
        {
            temp = DCT[u][x];
            DCT_T[x][u] = temp;
        }
    }
double** DCT_temp = new double*[m_nHeight];
for (int i = 0; i < m_nHeight; i++)
    DCT_temp[i] = new double[m_nWidth];

for (int y = 0; y < 32; y++)
{
    for (int x = 0; x < 32; x++)
    {
        for (int i = 0; i < 8; i++)
        {
            for (int j = 0; j < 8; j++)
            {
                temp = 0.0;
                for (int k = 0; k < 8; k++) //original : 256 x 256 matrix , DCT : 8x8 matrix, DCT_temp, result : 256x256 matrix
                {
                    temp += DCT[i][k] * original[y * 8 + k][x * 8 + j];
                }
                DCT_temp[y*8+i][x*8+j] = temp;
            }
        }
    }
}

for (int y = 0; y < 32; y++)
{
    for (int x = 0; x < 32; x++)
    {
        for (int i = 0; i < 8; i++)
        {
            for (int j = 0; j < 8; j++)
            {
                temp = 0.0;
                for (int k = 0; k < 8; k++)
                {
                    temp += DCT_temp[y * 8 + i][x * 8 + k] * DCT_T[k][j];
                }
                result[y * 8 + i][x * 8 + j] = temp;
            }
        }
    }
}

Я хочу умножить матрицу 256x256 (матрица origianl) на матрицу 8x8. (1-мерный DCT). Всего будет 32x32 раза (таким образом, y: от 0 до 32, x: от 0 до 32), но правильный результат не получен. Есть ли проблема в моем коде?

...