全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1426
推到 Plurk!
推到 Facebook!

反DCT的問題,程式可以執行但是結果不正確

尚未結案
news0228
一般會員


發表:1
回覆:0
積分:0
註冊:2007-11-05

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-11-05 23:51:37 IP:218.171.xxx.xxx 訂閱
我參考了書上的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;
unsigned char **ImageMatrix;
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 for(v=0;v DCT(YBlock[u][v].dct_arr,YBlock[u][v].g_arr);
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 for(v=0;v IDCT(YBlock[u][v].dct_arr,YBlock[u][v].idct_arr);
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, 註解 無‧
系統時間:2024-05-05 8:31:54
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!