0
下面是代碼:這個2D DCT代碼是如何工作的?
void dct(const tga_image *tga, double data[8][8],
const int xpos, const int ypos)
{
int i,j;
double in[8], out[8], rows[8][8];
/* transform rows */
for (j=0; j<8; j++)
{
for (i=0; i<8; i++)
in[i] = (double) pixel(tga, xpos+i, ypos+j);
dct_1d(in, out, 8);
for (i=0; i<8; i++) rows[j][i] = out[i];
}
/* transform columns */
for (j=0; j<8; j++)
{
for (i=0; i<8; i++)
in[i] = rows[i][j];
dct_1d(in, out, 8);
for (i=0; i<8; i++) data[i][j] = out[i];
}
}
我只有1個問題找到listing2.c拍攝,我們填寫的行,行[J] [I],但隨後讀出來out rows [i] [j]。根據2D DCT公式,我們轉置DCT矩陣而不是實際數據。爲什麼實際數據正在轉換?
我補充一下:
通過變量
i
,並在第一for
塊j
簡單交換,同樣的代碼可以如下這將使物理意義,因爲你想(見註釋)被改寫如果你必須做大量的DCT,這是非常低效的代碼。 – user3344003是的,據我所知在實踐中會使用一些快速的DCT算法,但是如果在硬件中使用類似於FPGA的DCT,這種方法可能會很好 – quantum231
你個人推薦什麼? – quantum231