線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2346
推到 Plurk!
推到 Facebook!

請問如何實現離散餘弦轉換

尚未結案
jim006
一般會員


發表:22
回覆:25
積分:9
註冊:2004-01-14

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-04-24 20:17:02 IP:218.162.xxx.xxx 未訂閱
在之前小弟就有在版上找到了有關小波轉換的資料其中也有包含程式碼,但可能是小弟的功力還不夠,還無法看懂網友熱心所附的程式碼,所以我想自己去寫看看,當中也出現了一些問題,希望知道的人可以給小弟我一些建議...Tks 在撰寫程式中,我所遇到的問題是,>>>>>>>>>>>>>> src="http://delphi.ktop.com.tw/loadfile.php?TOPICID=15318546&CC=342594"> 發表人 - jim006 於 2004/04/24 21:19:48
johnjohn
一般會員


發表:6
回覆:59
積分:13
註冊:2004-04-20

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-04-25 14:49:27 IP:210.244.xxx.xxx 未訂閱
Hi jim006 你的 >>
plihui
初階會員


發表:88
回覆:96
積分:41
註冊:2003-07-03

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-04-25 15:49:49 IP:218.168.xxx.xxx 未訂閱
johnjohn大大: 我可以問一下: i=0~? j=0~? ?填多少? 因為我也是個初學者...有遇到過這問題 結果放棄... 想說有人教...多少學一點
arisaka_matsuri
高階會員


發表:25
回覆:205
積分:231
註冊:2003-10-19

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-04-25 17:46:26 IP:218.166.xxx.xxx 未訂閱
jim006 你好: 以下是根據你所附的公式寫出來的DCT演算法,變數我儘量對應。基本上,DCT轉換好像只適用於正方形區域,因此一般都是將大圖切割成8*8或16*ㄶ的區塊後再各自轉換(像是JPEG的壓縮就是用8*8,N=8)    
// 傳入:(正方形)區塊大小 N,區塊資料陣列(一維)的指標 f
// 傳出:寫入指標 D 的陣列(一維)    #define PI 3.1415926535897932384626433832795    void DCT(int N, Byte *f, Byte *D)
{
  int x, y; // 指示空間域陣列(f)的位置
  int i, j; // 指示頻率域陣列(D)的位置
  double Ci, Cj;      // 對應公式中的係數
  double coefficient; // 加總後欲乘上的係數
  double sum;
  double M = 2 * N;   // 先計算 2*N (cos() 中會用到)      for(j = 0; j < N; j  )
  {
    for(i = 0; i < N; i  )
    {
      // 計算加總後欲乘上的係數
      Ci = (i == 0) ? 1 / sqrt(2) : 1;
      Cj = (j == 0) ? 1 / sqrt(2) : 1;
      coefficient = Ci * Cj / (sqrt(2) * N);          // 計算 DCT
      sum = 0.0;
      for(y = 0; y < N; y  )
        for(x = 0; x < N; x  )
          sum  = f[y*N x] * cos((2*x 1) * i * PI / M) * cos((2*y 1) * j * PI / M);
      D[j*N i] = coefficient * sum;
    }
  }
}
參考看看吧~ 發表人 - arisaka_matsuri 於 2004/04/25 17:48:58
johnjohn
一般會員


發表:6
回覆:59
積分:13
註冊:2004-04-20

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-04-25 18:31:07 IP:210.244.xxx.xxx 未訂閱
To plihui 嗯...事實上,由於頻率域的domain是未知的,因此,你可以如arisaka_matsuri所說的,令i,j為正整數分別由0~N,然而,如果你想要在頻率域中作進一步的分析,你可以試著改變你的頻率域,例如你如果想要分析影像中的低頻部份,即可令i,j為0.5的倍數,分別由0~N/2,再將結果以N x N的影像輸出 >>SPATIAL INFORMATION IS COOOOL<<
jim006
一般會員


發表:22
回覆:25
積分:9
註冊:2004-01-14

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-04-25 20:02:52 IP:61.30.xxx.xxx 未訂閱
很感謝各位給小弟一些建議,小弟會試著try看看的,等寫好後將會上傳到板上供大家參考,而在這之前如果還有什麼建議的高手們,也煩請您賜教,可供小弟能多方面吸收以利於程式上的撰寫 ...tks
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-04-26 19:16:55 IP:140.135.xxx.xxx 未訂閱
大家好:   DCT的程式碼可以參考下面連結   http://delphi.ktop.com.tw/topic.php?TOPIC_ID=33309 MilesWamg前輩的作品【發表】影像處理轉換篇
引言: 一灰階圖,(Lena.bmp 256*256),以下五種轉換執行結果、轉換後圖形、能量分佈、總誤差、PSNR與SNR。含DFT(Discrete Fourier Transform運算)運算 、Discrete Hartly Transform 運算、Discrete Consin Transform 運算 、Walsh運算與Hadaman運算。以Bolrad C 實作,其功能如下。 1 . 開啟檔案;載入一bmp圖檔。 2. 儲存檔案將輸出或輸入圖區的圖形純程bmp檔。 3. 轉換方式選擇;有五種方式提供圖形轉換。 4.轉換方式選擇:可選擇轉換與轉換加反轉換,結果輸出於”輸出結果” 。 5.灰階化/載入:將輸入之圖形載入記憶體並將彩色圖形灰階化。 6.執行:執行轉換功能,score bar為轉換後保留元素N*N範圍。(8*8中留下N*N) 7.Error: 計算:總誤差,PSNR,SNR。 8.proof:計算轉換矩陣與其轉置矩陣之乘積是否為單位矩陣。 9.plus:轉換結果(不含反向運算)將小於0大於255之值濾除。
順心
系統時間:2024-05-10 10:50:42
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!