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

如何求不規則形周長?

尚未結案
ihciuok
一般會員


發表:1
回覆:1
積分:0
註冊:2003-12-28

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-12-29 08:36:27 IP:61.230.xxx.xxx 未訂閱
現正寫一程式目的在於粹取出圖形的形狀再加以比對.經過二值.灰階.邊緣偵測後. <<欲求出其周長之後加以等分取點.經過點與點間的連線向量變化.來比對>> 其中等分取點為我設定每張圖都固定取50點. 請問各位我該如何下手?
JerryKuo
版主


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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-12-29 18:00:58 IP:61.230.xxx.xxx 未訂閱
ihciuok你好: 如果你能把物體的外形輪廓(shape),用一個chain(鏈)表示,那計算總個數,再除 以50,求得每個節點的距離(像素),應該很好達到你的需求。 如何用chain表示輪廓呢?首先這個輪廓要相當完美,要做成chain,應該不是大問 問,小弟有看過這方面的文章,是做影像分割(image segmentation),物件外型編 碼的,不過人家的外形(shape)是人工擷取的,所以你用邊緣偵測得到的外形,先決 條件要做得很好,才好用chain表示。..參考看看
ihciuok
一般會員


發表:1
回覆:1
積分:0
註冊:2003-12-28

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-12-31 13:57:00 IP:61.230.xxx.xxx 未訂閱
JerryKuo你好    很感謝你在短時間內就給我回覆 至於chain的用法我就卡在我現在找出的邊並非很精細的邊 所以似乎無法運用到 請問可以麻煩幫我看一下我的程式還有哪裡可以修正的嗎?    另外請問我有什麼辦法可以把存入矩陣的資料另外完整秀出數據來?    
void __fastcall TForm1::Button1Click(TObject *Sender)
{
int i,j;
if(OpenPictureDialog1->Execute())
        Image1->Picture->LoadFromFile(OpenPictureDialog1->FileName);
//動態新增記憶體image
image=new int *[Image1->Picture->Width];
gray=new int *[Image1->Picture->Width];
binary=new int *[Image1->Picture->Width];
edge=new int *[Image1->Picture->Width];
for(i=0;iPicture->Width;i  )  {
  image[i]=new int[Image1->Picture->Height];
  gray[i]=new int[Image1->Picture->Height];
  binary[i]=new int[Image1->Picture->Height];
  edge[i]=new int[Image1->Picture->Height];
        }
 width=Image1->Picture->Width;          //圖的寬
 height=Image1->Picture->Height;        //    高     //將圖當存入矩陣
for(i=0;iCanvas->Pixels[i][j];    }
//---------------------------------------------------------------------------    void __fastcall TForm1::Button2Click(TObject *Sender)
{
int i,j;
double R,G,B;
//處理灰階
for(i=0;i>8;    // G 色
                B=(image[i][j]&0x00ff0000)>>16;   // B 色
                gray[i][j]=(int)( (R G B)/3.0 );
                        }    //秀出灰階的圖
for(i=0;iCanvas->Pixels[i][j]=(TColor)( (gray[i][j]<<16)  (gray[i][j]<<8)   (gray[i][j]) );    }
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
int i,j;
//二元化處理
for(i=0;i128)
                  binary[i][j]=255;
          else
                  binary[i][j]=0;    //秀出二元化的圖
for(i=0;iCanvas->Pixels[i][j]=(TColor)( (binary[i][j]<<16)  (binary[i][j]<<8)   (binary[i][j]) );    }
//---------------------------------------------------------------------------
void __fastcall TForm1::Button4Click(TObject *Sender)
{
int i,j,i1,j1;
int count1,count2,sum1,sum2,sum3;
for(i=0;i=0 && j1>=0 && i1=0 && j1>=0 && i1 abs(sum2) ) ? sum3 = abs(sum1) : sum3 = abs(sum2) ;
 if(sum3 > 255 ) sum3 = 255 ;
           sum3=255-sum3;
   edge[i][j] = sum3;             }    //秀出邊的圖
for(i=0;iCanvas->Pixels[i][j]=(TColor)( (edge[i][j]<<16)  (edge[i][j]<<8)   (edge[i][j]) );    }
發表人 - jerrykuo 於 2003/12/31 14:31:59
JerryKuo
版主


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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-12-31 14:50:54 IP:61.230.xxx.xxx 未訂閱
ihciuok你好:    不要問我程式有什麼問題,我想你應該比我更暸解有什麼問題 因為程式是你寫的咩~ 有大概看了一下,結構分得很清楚,只是寫法有點生硬。推薦你參考 taishyang版主的作品,第六版的影像處理,我想應該對你很有幫助
http://delphi.ktop.com.tw/topic.php?TOPIC_ID=40159
對於你所發問的主題如還有問題,請繼續發問,或另開新主題發問, 其他站友會參與討論,提出更多的解決方法。
系統時間:2024-05-13 20:50:45
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!