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

求影像邊緣!!!...

答題得分者是:geniustom
wd7142
一般會員


發表:18
回覆:19
積分:7
註冊:2004-01-13

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-03-28 01:03:47 IP:218.160.xxx.xxx 未訂閱
不好意思,我想請問一下,我是使用threshold做垂直邊緣  {-1,0, 1}  {-2, 0, 2}  {-1, 0, 1}   偵側,可是我出來灰階圖的pixel值卻不對,所以想請各位能幫我看看程式 的方面有那些錯誤,謝謝!!  
            unsigned char clr[256][256];
        unsigned char p1,p2,p3,p4,p5,p6,p7,p8,p9;        for(int y=1; y<255; y  )
      for(int x=1; x<255; x  )
{          p1 = GetRValue(Image1->Canvas->Pixels[x-1][y-1]);
      p2 = GetRValue(Image1->Canvas->Pixels[x][y-1]);
      p3 = GetRValue(Image1->Canvas->Pixels[x 1][y-1]);
      p4 = GetRValue(Image1->Canvas->Pixels[x-1][y]);
      p5 = GetRValue(Image1->Canvas->Pixels[x][y]);
      p6 = GetRValue(Image1->Canvas->Pixels[x 1][y]);
      p7 = GetRValue(Image1->Canvas->Pixels[x-1][y 1]);
      p8 = GetRValue(Image1->Canvas->Pixels[x][y 1]);
      p9 = GetRValue(Image1->Canvas->Pixels[x 1][y 1]);           clr[x][y]=((-1)*p1 (1)*p3 (-2)*p4 (2)*p6 (-1)*p7 (1)*p9);
}
  for (int y=0; y<256;y  )
{
  for (int x=0; x<256; x  )
{
     if(abs(clr[x][y]>=100))
         Image2->Canvas->Pixels[x][y]=TColor(RGB(0,0,0));
      else
         Image2->Canvas->Pixels[x][y]=TColor(RGB(255,255,255));
}
}
  Application->ProcessMessages();
}
 
geniustom
版主


發表:100
回覆:303
積分:260
註冊:2003-01-03

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-03-28 16:53:32 IP:163.26.xxx.xxx 未訂閱
建議使用一個INTEGER的型態來存..例如  
 
int a[256][256];
.
.
同前
a[x][y]=((-1)*p1 (1)*p3 (-2)*p4 (2)*p6 (-1)*p7 (1)*p9);
if (a[x][y]<0){
   clr[x][y]=0;
}else if (a[x][y]>255){
   clr[x][y]=255;
}else{
   clr[x][y]=a[x][y];
}
因為INT才可存負值.. 不要用ABS..因為經過SOBEL運算..出來的結果有可能是正值..也可能是負值 您用ABS會把負值很大的變成正值很大..會照成反效果.. 再來就是若大於255..尼的程式會溢位..變成無法預知的值.. 供參考.. 發表人 - geniustom 於 2004/03/28 17:58:01
wd7142
一般會員


發表:18
回覆:19
積分:7
註冊:2004-01-13

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-03-28 19:31:30 IP:218.160.xxx.xxx 未訂閱
引言: 建議使用一個INTEGER的型態來存..例如
 
int a[256][256];
.
.
同前
a[x][y]=((-1)*p1 (1)*p3 (-2)*p4 (2)*p6 (-1)*p7 (1)*p9);
if (a[x][y]<0){
   clr[x][y]=0;
}else if (a[x][y]>255){
   clr[x][y]=255;
}else{
   clr[x][y]=a[x][y];
}
因為INT才可存負值.. 不要用ABS..因為經過SOBEL運算..出來的結果有可能是正值..也可能是負值 您用ABS會把負值很大的變成正值很大..會照成反效果.. 再來就是若大於255..尼的程式會溢位..變成無法預知的值.. 供參考.. 發表人 - geniustom 於 2004/03/28 17:58:01
真是多謝指教了,正如你所說的,int才可以存負值,問題已解決!!! 真是太謝謝你了~~~~^^
系統時間:2024-05-10 4:05:28
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!