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

2D Discrete Cosine Transform 餘弦轉換

尚未結案
bee0258
一般會員


發表:1
回覆:0
積分:0
註冊:2006-11-08

發送簡訊給我
#1 引用回覆 回覆 發表時間:2006-11-08 18:38:32 IP:61.229.xxx.xxx 未訂閱
請問一下餘弦轉換的問題
現在我要讀進一張已經轉換過的圖 256x256
他的轉換過程式:原圖 -> DCT -> Quantization Table -> 每個點 100
我用的公式是

以下是我的程式碼

origin->Picture->LoadFromFile(OpenPictureDialog1->FileName);
Image1->Picture = origin->Picture;
int Q[8][8]={{16,11,10,16,24,40,51,61},
{12,12,14,19,26,58,60,55},
{14,13,16,24,40,57,69,56},
{14,17,22,29,51,87,80,62},
{18,22,37,56,68,109,103,77},
{24,35,55,64,81,104,113,92},
{49,64,78,87,103,121,120,101},
{72,92,95,98,112,100,103,99}};
double r,N=8.0,temp,out=0;
const float Pi=3.1415926f;
int aa=-1,bb=-1;
float COS[256][256];
for (int x = 0 ; x < origin->Height ; x ){
for (int u = 0 ; u<256 ; u ){
COS[x][u] = cos( ((2.0*x 1)*u*Pi) / (2.0*N) );
}
}
for (int i = 0 ; i < origin->Height ; i ){
if(i%8==0) aa ;
for (int j = 0 ; j < origin->Width ; j ){
if(j%8==0) bb ;
for(int a=0 ; a<8 ; a ){
for(int b=0 ; b<8 ; b ){
r = (GetRValue(origin->Canvas->Pixels[b 8*bb][a 8*aa]));
r = r-100;
r = r*Q[a][b];
if(a==0) temp = sqrt(1.0/N);
else temp = sqrt(2.0/N);
if(b==0) temp *= sqrt(1.0/N);
else temp *= sqrt(2.0/N);
r = temp*r*COS[j][b 8*bb]*COS[i][a 8*aa];
out = r;
}
}
if(out>=255.5) out=255;
else if(out<=0) out=0;
else out = RoundTo(out,0);
Image1->Canvas->Pixels[j][i]=(TColor)RGB(out,out,out);
out=0;
}
bb=-1;
}

一直不太清楚宣告的大小應該怎樣比較好?
還有我上面程式轉出來的原圖會是有問題的
不知道是哪裡有錯誤,還請指教
謝謝各位
順便附上編碼過後的圖:http://bee0258.myweb.hinet.net/jpeg.bmp
系統時間:2024-05-08 18:23:08
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!