反DCT的問題,程式可以執行但是結果不正確 |
尚未結案
|
news0228
一般會員 發表:1 回覆:0 積分:0 註冊:2007-11-05 發送簡訊給我 |
我參考了書上的DCT程式碼
自己寫反DCT的程式 假設輸入161結果應該要是161左右才對 但是輸出卻差了五以上 不知道問題出在哪裡 以下是我的程式碼 [code cpp] #include #include #include <math.h><br />#pragma hdrstop #include #include #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; int ImageHeight=0,ImageWidth=0; int ImageOpen=0,g_bl=0,DCT_bl=0; int TH,TW;//作為暫存原來之長寬用 int IDXH,IDXW;//作為8x8區塊之Index用 int i,j,u,v;//迴圈控制使用變數 typedef struct{ unsigned char g_arr[8][8]; float dct_arr[8][8]; unsigned char idct_arr[8][8]; }Block_64; Block_64 **YBlock; void DCT(float result[8][8], unsigned char source[8][8]) { float C[8],Cos[8][8]; float temp; int i,j,u,v; for(i=0;i<8;i ){ for(j=0;j<8;j ){ Cos[i][j]=cos((2*i 1)*j*(3.14)/16); } } C[0]=0.35355339; for(i=1;i<8;i ) C[i]=0.5; for(u=0;u<8;u ) for(v=0;v<8;v ){ temp=0.0; for(i=0;i<8;i ) for(j=0;j<8;j ) temp =Cos[i][u]*Cos[j][v]*(source[i][j]-128); temp*=C[u]*C[v]; result[u][v]=temp; } return; } void IDCT(float source[8][8],unsigned char result[8][8]) { float C[8],Cos[8][8]; float temp; int i,j,u,v; for(i=0;i<8;i ){ for(j=0;j<8;j ){ Cos[i][j]=cos((2*i 1)*j*(3.14)/16); } } C[0]=0.35355339; for(i=1;i<8;i ) C[i]=0.5; for(u=0;u<8;u ) for(v=0;v<8;v ){ temp=0.0; for(i=0;i<8;i ) for(j=0;j<8;j ) temp =C[u]*C[v]*Cos[i][u]*Cos[j][v]*(source[i][j]-128); result[u][v]=temp 128; } return; } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { void DCT(float result[8][8],unsigned char source[8][8]); for(u=0;u g_bl=0; DCT_bl=1; Label9->Caption="DCT值:"; i=0; j=0; Label7->Caption=j; Label8->Caption=i; Label7->Visible=true; Label8->Visible=true; Edit1->Text = YBlock[0][0].dct_arr[0][0]; Edit2->Text = YBlock[0][0].dct_arr[0][1]; Edit3->Text = YBlock[0][0].dct_arr[0][2]; Edit4->Text = YBlock[0][0].dct_arr[0][3]; } //--------------------------------------------------------------------------- void __fastcall TForm1::Btn_IDCTClick(TObject *Sender) { void IDCT(float source[8][8],unsigned char result[8][8]); for(u=0;u g_bl=0; DCT_bl=1; Label9->Caption="DCT值:"; i=0; j=0; Label7->Caption=j; Label8->Caption=i; Label7->Visible=true; Label8->Visible=true; Edit1->Text = YBlock[0][0].idct_arr[0][0]; Edit2->Text = YBlock[0][0].idct_arr[0][1]; Edit3->Text = YBlock[0][0].idct_arr[0][2]; Edit4->Text = YBlock[0][0].idct_arr[0][3]; [/code] 謝謝 編輯記錄
news0228 重新編輯於 2007-11-05 23:55:23, 註解 無‧
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |