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

對於JerryKuo的作品的影像處理部份,想請教一下,謝謝!

尚未結案
pipii44
一般會員


發表:9
回覆:10
積分:3
註冊:2004-02-13

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-02-01 14:07:30 IP:163.25.xxx.xxx 未訂閱
對於JerryKuo的作品的影像處理部份 有些疑問,在做LPF的地方,程式碼如下 我的疑問是在標示註解的地方!!
int p1[640][480];
int __fastcall TForm1::Filter(int i,int j)
{
 int LPF;
 int p[10];
 p[1]=p1[i-1][j-1];
 p[2]=p1[i][j-1];
 p[3]=p1[i 1][j-1];
 p[4]=p1[i-1][j];
 p[5]=p1[i][j];
 p[6]=p1[i 1][j];
 p[7]=p1[i-1][j 1];
 p[8]=p1[i][j 1];
 p[9]=p1[i 1][j 1];     LPF=(p[1] p[2] p[3] p[4] p[5] p[6] p[7] p[8] p[9])/9;
 return (LPF);
}
void __fastcall TForm1::Button5Click(TObject *Sender)
{
 if (Image1->Picture->Bitmap->Empty==true)
 ShowMessage("請載入圖檔!!");
 Graphics::TBitmap *Bmp = new Graphics::TBitmap();
 Byte *ptr;
 Bmp->Assign(Image1->Picture->Bitmap );     for (int i=0;iHeight;i   )
   {
    ptr=(Byte*)Bmp->ScanLine[i];
  for (int j=0;jWidth; j   )
    {
     p1[j][i]=ptr[j*3];

//為什麼只對籃色做lpf啊?還是都可以?任自己定義?        }
   }     for (int i=0;iHeight;i   )
   {
    ptr=(Byte*)Bmp->ScanLine[i];
  for (int j=0;jWidth; j   )
    {
     ptr[j*3]=Filter(j,i);    //為什麼你的i,和j都要倒來倒去,看到頭都昏了,還是說這是,要做Convolution的效果,我不太懂,請多指教,還有,當你i,j都等於0時,不會有超出p1陣列大小的可能嗎?請多指教         ptr[j*3 1]=Filter(j,i);
     ptr[j*3 2]=Filter(j,i);
    }
   }
 Image2->Picture->Assign(Bmp);
 delete Bmp;
}
順便一提,你的程式淺顯易懂^^(Y) 謝謝.....
JerryKuo
版主


發表:42
回覆:571
積分:322
註冊:2003-03-10

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-02-01 15:00:20 IP:220.135.xxx.xxx 未訂閱
引言: 對於JerryKuo的作品的影像處理部份 有些疑問,在做LPF的地方,程式碼如下 我的疑問是在標示註解的地方!!
    void __fastcall TForm1::Button5Click(TObject *Sender)
{
 if (Image1->Picture->Bitmap->Empty==true)
 ShowMessage("請載入圖檔!!");
 Graphics::TBitmap *Bmp = new Graphics::TBitmap();
 Byte *ptr;
 Bmp->Assign(Image1->Picture->Bitmap );     for (int i=0;iHeight;i   )
   {
    ptr=(Byte*)Bmp->ScanLine[i];
  for (int j=0;jWidth; j   )
    {
     p1[j][i]=ptr[j*3];

//為什麼只對籃色做lpf啊?還是都可以?任自己定義?        }
   }    其實我不知道你說的是哪一個程式@@,單純用猜的
為什麼只做藍色,是因為影像是灰階的,RGB是一樣
所以做一色就好囉。     for (int i=0;iHeight;i   )
   {
    ptr=(Byte*)Bmp->ScanLine[i];
  for (int j=0;jWidth; j   )
    {
     ptr[j*3]=Filter(j,i);    //為什麼你的i,和j都要倒來倒去,看到頭都昏了,還是說這是,要做Convolution
的效果,我不太懂,請多指教,還有,當你i,j都等於0時,不會有超出p1陣列大小的
可能嗎?請多指教    i,和j都要倒來倒去,應該是個人的毛病吧@@,我會講求讀取記憶體的方式,
這個節省很多運算的速度,雖然現在cpu很好,沒差這一點速度。應該跟
convolution沒關係。    i,j等於0的時候,一定會有超出陣列大小的問題。不過使用Bitmap物件讀取
index超出範圍,好像沒有關係..至於讀到什麼值,我就沒有去研究啦。不過
在做LPF時,邊界地方的處理方式有很多方法,看個人的需求,略過或是自動用
相鄰點補滿超出的範圍都可以。
系統時間:2024-05-17 9:57:45
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!