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

請問傳一矩陣系數

尚未結案
kmp
一般會員


發表:17
回覆:51
積分:13
註冊:2004-07-24

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-09-25 23:14:43 IP:140.127.xxx.xxx 未訂閱
hi~各位大人: 您們好, 我有一矩陣的系數因為不同,寫好幾個 class="code"> template void filt_so_x(TYPE_1 *f,int w,int h,TYPE_2 *g ) { for( int j=1 ; j< h ; j ) { for( int i=1 ; i void filt_so_y(TYPE_1 *f,int w,int h,TYPE_2 *g ) { for( int j=1 ; j< h ; j ) { for( int i=1 ; i Best Regard kmp == 因沒有什程式經驗請多包含 ==
richtop
資深會員


發表:122
回覆:646
積分:468
註冊:2003-06-10

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-09-26 01:11:55 IP:211.76.xxx.xxx 未訂閱
kmp 您好:    又見面了! 底下寫了一個程式供您參考一下! 有兩點說明: href="http://delphi.ktop.com.tw/topic.php?TOPIC_ID=48292">http://delphi.ktop.com.tw/topic.php?TOPIC_ID=48292
//---------------------------------------------------------------------------
const float SOBEL_X_3x3[] ={-1,0,1,-2,0,2,-1,0,1}; // 建議改成float,以包含非整數情況
const float SOBEL_Y_3x3[] ={-1,-2,-1,0,0,0,1,2,1};    const int dx[] = { -1, 0, 1,
                   -1, 0, 1,
                   -1, 0, 1 };
const int dy[] = { -1,-1,-1,
                    0, 0, 0,
                    1, 1, 1 };    template 
void filtering(TYPE_1 *image, int w, int h, const float *filter, TYPE_2 *img)
{
   for ( int r=1 ; r255 ) value = 255;
              img[r*w c] = value;
          }
     }
}    void fillImage(int* image, int w, int h)
{ Byte * ptr;
  int index, idx;
  index = 0;
  for (int r=0; rImage1->Picture->Bitmap->ScanLine[r];
       idx=0;
       for (int c=0; cPicture->Width;
  h = Image1->Picture->Height;
  Image1->Picture->Bitmap->PixelFormat = pf24bit;
  image = new int[h*w];
  img   = new int[h*w];
  index = 0;
  for (int r=0; rPicture->Bitmap->ScanLine[r];
       idx=0;
       for (int c=0; cRefresh();      delete [] image;
  delete [] img;
}
//---------------------------------------------------------------------------
RichTop 敬上 =====***** 把數學當工具,可以解決問題;將數學變能力,能夠發現並解決問題! =====#####
kmp
一般會員


發表:17
回覆:51
積分:13
註冊:2004-07-24

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-09-26 10:54:02 IP:140.127.xxx.xxx 未訂閱
hi~richtop:             您好,又見面了< > 高興及感謝您的教導< > 有關"邊緣處理",我的確沒作,我剛看一下我同學施捨給我他的function, 是用
//以下code是同學的
  int wp = wm - 1; //我不懂,不過如果以mask為3X3pading用wp=1,
  int hp = hm - 1;
 int *fp = new int [(w wp)*(h hp)]; //我的意思是這用(w 1)*(h 1) 
  //padding (f, w, h, fp, wm, hm);
  padding_ray (f, w, h, fp, w wp, h hp);
其中fp是您程式中的value.
引言:
const int dx[] = { -1, 0, 1,
                   -1, 0, 1,
                   -1, 0, 1 };
const int dy[] = { -1,-1,-1,
                    0, 0, 0,
                    1, 1, 1 };請問為什要設定此?    template 
void filtering(TYPE_1 *image, int w, int h, const float
 *filter, TYPE_2 *img)
{
   for ( int r=1 ; r255 ) value = 255;
              img[r*w c] = value;
          }
     }
}    因為我的電腦不曉得是刪除什檔案看單獨看bmp檔有問題
所以我暫時沒有執行您的code,請問您文中說"Image1中放入一個bmp圖檔。"
是這樣的意思嗎?想請教一下,您這是拿彩色圖檔取RGB某一分量,換句話說,同時
也做了彩色變灰階嗎?
Best Regard kmp 發表人 - kmp 於 2004/09/26 11:08:15 發表人 - kmp 於 2004/09/26 11:50:50
richtop
資深會員


發表:122
回覆:646
積分:468
註冊:2003-06-10

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-09-26 12:08:09 IP:211.76.xxx.xxx 未訂閱
kmp 您好:    增加下述程式碼,方便您的測試:
#include < JPEG.hpp > // 要記得include
void __fastcall toGray(TImage *image)
{ int w, h, r, g, b, gray, index;
  Byte *ptr;      w = image->Picture->Width;
  h = image->Picture->Height;
  image->Picture->Bitmap->PixelFormat = pf24bit;
  for (int row=0; rowPicture->Bitmap->ScanLine[row];
       index = 0;
       for (int col=0; colExecute() )
    { Image1->Picture->LoadFromFile(OpenDialog1->FileName);
      Image1->Top = 5;
      Image1->Left = 5;
      Graphics::TBitmap *bmp = new Graphics::TBitmap();
      bmp->Width  = Image1->Picture->Width;
      bmp->Height = Image1->Picture->Height;
      bmp->Canvas->Draw(0,0,Image1->Picture->Graphic);
      Image1->Picture->Bitmap->Assign(bmp);
      Image1->Refresh();
      delete bmp;
    }
}
由於filter是3x3的矩陣,我因為要用for-loop作相乘與相加,所以把相對的位置分別存入dx[],dy[]中,這樣就不必寫出九個相乘項。 至於有沒有轉成灰階,答案是沒有。因為要順便測試一下功能是否正常,所以我寫了這個測試程式。其實也想到您恐怕沒有相關的資料,但又沒有完整說明清楚,使得您不易了解程式的意義,不好意思! 上述是轉灰階與讀取bmp與jpg,並一律轉成bmp格式的函式,因為在使用ScanLine時必須是bitmap格式。 您且試試! RichTop 敬上 =====***** 把數學當工具,可以解決問題;將數學變能力,能夠發現並解決問題! =====#####
kmp
一般會員


發表:17
回覆:51
積分:13
註冊:2004-07-24

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-09-28 14:58:54 IP:211.74.xxx.xxx 未訂閱
hi~richtop:            您好,感謝您的講解 <>< face="Verdana, Arial, Helvetica">引言: 增加下述程式碼,方便您的測試:
#include < JPEG.hpp > // 要記得include
我剛一跑程式出現這樣error message在這行:
[C   Error] Unit1.cpp(5): E2209 Unable to open include file ' JPEG.hpp ' 請問是我那裡有需要修改?
由於filter是3x3的矩陣,我因為要用for-loop作相乘與相加,所以把相對的位置分別存入dx[],dy[]中,這樣就不必寫出九個相乘項。 至於有沒有轉成灰階,答案是沒有。因為要順便測試一下功能是否正常,所以我寫了這個測試程式。其實也想到您恐怕沒有相關的資料,但又沒有完整說明清楚,使得您不易了解程式的意義,不好意思! 大人每次都這麼客氣,雖然我覺好像自己變小孩子< >,但總覺 勞煩大人,心裡過意不去,...請包含與指點< > 上述是轉灰階與讀取bmp與jpg,並一律轉成bmp格式的函式,因為在使用 我之所以會問這是不是有用彩色轉灰階,是因我有讀到:
 
            ptr[idx 2] = image[index  ];  // 取紅色分量
            ptr[idx 1] = 0;
            ptr[idx  ] = 0;
            idx  = 3;
原諒我的不足,我以為ptr = (Byte*) Form1->Image1->Picture->Bitmap->ScanLine[r]; idx=0; 這裡ptr這指標已指向RGB三個分量,所以這裡我們只取其一分量,為灰階, 我不太懂,請指教
< face="Verdana, Arial, Helvetica"> Brst Regard kmp
richtop
資深會員


發表:122
回覆:646
積分:468
註冊:2003-06-10

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-09-28 18:20:36 IP:211.76.xxx.xxx 未訂閱
kmp 您好: 謝謝您!也祝您中秋節愉快! 關於上述所提問題我的回答如下: 1.您只要將JPEG.hpp前後的空格移除即可,當時是怕被當成HTML的tag,所以刻意留個空格。 2.至於灰階的部分過程是這樣的,因為您問題中使用的是二維陣列,我一時間沒有這樣的二維陣列資料,所以偷懶隨便找了一張圖檔,由於只想測試執行結果是否正確,所以僅取其中一個顏色分量出來放入二維陣列中進行測試,這就是造成您疑惑的原因所在。 RichTop 敬上 =====***** 把數學當工具,可以解決問題;將數學變能力,能夠發現並解決問題! =====#####
kmp
一般會員


發表:17
回覆:51
積分:13
註冊:2004-07-24

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-11-30 13:12:57 IP:140.127.xxx.xxx 未訂閱
引言: kmp 您好: 謝謝您!也祝您中秋節愉快! 時光飛逝,已從中秋節到聖誕節,...開學後有寫小程式,但重點在 一大堆paper,報告,...茫茫,忙,所以最近很少上來這練功好地方, 很少來請教大人,如richtop,實誠晚輩的損失,.< >.]< >. 請多指教
Best Regard kmp
系統時間:2024-11-22 5:58:11
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!