2007年7月26日 星期四

DCT Code (參考學姊,略為修改)

void DCT(int DCTW,int DCTH)
{
  for(u = 0;u < v =" 0;v" dbtemp1 =" 0;" dbtemp2 =" 0;" dbtemp3 =" 0;" u ="="" cu =" (double)1/"> 0)
        Cu = 1;
      if(v == 0)
        Cv = (double)1/ sqrt(2);
      else if(v > 0)
        Cv = 1;
      for(i = 0;i < 8;i++)
      {
        for(j = 0;j < 8;j++)
        {
          dbTemp1 += (Im1Y[DCTH+i][DCTW + j]-128) * cos((2*i+1) * u * M_PI/16) * cos((2*j+1) * v * M_PI/16);
          dbTemp2 += (Im1Cb[DCTH+i][DCTW + j]-128) * cos((2*i+1) * u * M_PI/16) * cos((2*j+1) * v * M_PI/16);
          dbTemp3 += (Im1Cr[DCTH+i][DCTW + j]-128) * cos((2*i+1) * u * M_PI/16) * cos((2*j+1) * v * M_PI/16);
        }
      }
//陣列還沒改變需要更改
      Im1DCTY[DCTH+u][DCTW+v] = (Cu * Cv * dbTemp1)/(double)4;
      Im1DCTCb[DCTH+u][DCTW+v] = (Cu * Cv * dbTemp2)/(double)4;
      Im1DCTCr[DCTH+u][DCTW+v] = (Cu * Cv * dbTemp3)/(double)4;

      Im1QuaY[DCTH+u][DCTW+v]= Im1DCTY[DCTH+u][DCTW+v]/YQT[u][v];
      Im1QuaCb[DCTH+u][DCTW+v]=Im1DCTCb[DCTH+u][DCTW+v]/CbCrQT[u][v];
      Im1QuaCr[DCTH+u][DCTW+v]=Im1DCTCr[DCTH+u][DCTW+v]/CbCrQT[u][v];

    }
  }
  i = DCTW;
  j = DCTH;
}

沒有留言: