void idct(int colors[8][8], const double data[8][8]) { int u,v,x,y; /* iDCT */ for (y=0; y<8; y++) { for (x=0; x<8; x++) { double z = 0.0; for (v=0; v<8; v++) for (u=0; u<8; u++) { double S, q; double Cu, Cv; COEFFS(Cu,Cv,u,v); S = data[v][u]; q = Cu * Cv * S * cos((double)(2*x+1) * (double)u * PI/16.0) * cos((double)(2*y+1) * (double)v * PI/16.0); z += q; } z /= 4.0; if (z > 255.0) z = 255.0; if (z < 0) z = 0.0; colors[x][y] = (unsigned char) z; } } }
void idct(tga_image *tga, double data[8][8], const int xpos, const int ypos) { int u,v,x,y; /* iDCT */ for (y=0; y<8; y++) for (x=0; x<8; x++) { double z = 0.0; for (v=0; v<8; v++) for (u=0; u<8; u++) { double S, q; double Cu, Cv; COEFFS(Cu,Cv,u,v); S = data[v][u]; q = Cu * Cv * S * cos((double)(2*x+1) * (double)u * PI/16.0) * cos((double)(2*y+1) * (double)v * PI/16.0); z += q; } z /= 4.0; if (z > 255.0) z = 255.0; if (z < 0) z = 0.0; pixel(tga, x+xpos, y+ypos) = (uint8_t) z; } }
arma::mat compute_dct(arma::mat& inp) { arma::mat out(8,8); for(int v = 0; v < 8; v++) { for(int u = 0; u < 8; u++) { double Cu, Cv, z = 0.0; COEFFS(Cu,Cv,u,v); for(int y = 0; y < 8; y++) { for(int x = 0; x < 8; x++) { double s, q; s = inp.at(x,y); q = s * cos((double)(2*x+1) * (double)u * M_PI/16.0) * cos((double)(2*y+1) * (double)v * M_PI/16.0); z += q; }} out.at(u,v) = 0.25 * Cu * Cv * z; }} return out; }