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

請問如何加速此FDCT程式運算速度

尚未結案
canrain
一般會員


發表:5
回覆:5
積分:2
註冊:2004-08-27

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-05-19 22:05:50 IP:220.132.xxx.xxx 未訂閱
所謂FDCT即快速離散餘弦轉換 其公式如下: 而小弟所寫的程式如下:
  int N=256;
  double C[256][256];
  double Ct[256][256];
  int i,j;
     for(j=0; jWidth;
  int b1=(Image1->Height);
  int h=(a1/2)-128;
  int g=(b1/2)-128;
  float sum=0;
  for(short i=0; iCanvas->Pixels[i+h][k+g]);
          temp[i][j]+=a*Ct[k][j];
             }
      }      for(short i=0; i
最後結果是將轉換後之數值矩陣取絕對值累加
不過因為公式計算繁多
導致計算緩慢
請問各位前輩
該怎樣修改才能加快運算速度呢?
謝謝         
        
taishyang
站務副站長


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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-05-19 22:23:52 IP:218.168.xxx.xxx 未訂閱
您好:
用ScanLine來代替Canvas->Pixels速度會提昇很多
使用方式站上已有相當多的文章與程式碼供您參考< >
    順心< >
        
canrain
一般會員


發表:5
回覆:5
積分:2
註冊:2004-08-27

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-05-19 23:46:04 IP:220.132.xxx.xxx 未訂閱
小弟稍微做了修改後 但是運算結果卻與原先有些許不同 請問是哪裡錯誤了呢? 程式碼如下
  for(short i=0; i Byte *point_row = (BYTE*)Image1->Picture->Bitmap->ScanLine[i h];
    for(short j=0; jCanvas->Pixels[i h][k g]);
            Byte *row = point_row   (3*k 3*g);
          temp[i][j] =row[2]*Ct[k][j];
             }
      }
  }
taishyang
站務副站長


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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-05-20 00:03:54 IP:218.168.xxx.xxx 未訂閱
我沒有仔細看您的程式碼,但不曉得您是否有注意到PixelFormat?
canrain
一般會員


發表:5
回覆:5
積分:2
註冊:2004-08-27

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-05-20 00:08:55 IP:220.132.xxx.xxx 未訂閱
引言: 我沒有仔細看您的程式碼,但不曉得您是否有注意到PixelFormat? < face="Verdana, Arial, Helvetica"> 你好 應該有的 Image1->Picture->Bitmap->PixelFormat = pf24bit; 剛剛好像沒貼到,不好意思 因為是矩陣相乘,所以讓我覺得很混亂 不知道這樣寫法哪裡有錯呢? 謝謝 發表人 - canrain 於 2005/05/20 00:09:35 發表人 - canrain 於 2005/05/20 00:11:26
taishyang
站務副站長


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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-05-20 09:16:43 IP:210.68.xxx.xxx 未訂閱
您好:
ScanLine是對應到列(橫為列直為行)的範圍
而point_row便可取得該列上每行的像素值,您好像寫反了
順心
canrain
一般會員


發表:5
回覆:5
積分:2
註冊:2004-08-27

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-05-20 13:31:51 IP:140.127.xxx.xxx 未訂閱
引言: 您好:
ScanLine是對應到列(橫為列直為行)的範圍
而point_row便可取得該列上每行的像素值,您好像寫反了
順心 < face="Verdana, Arial, Helvetica"> 您好: 我大概知道錯誤在哪邊了 ScanLine是對應到列的範圍 那請問有沒有函式或什麼參數能對應行的範圍呢? 或是怎麼做能取影像指定行的像素值呢? 因為程式內是用列的座標取行的像素值 所以卡很久,想不出來 謝謝
系統時間:2024-06-02 1:44:31
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!