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), но правильный результат не получен. Есть ли проблема в моем коде?