ihciuok
一般會員
發表:1 回覆:1 積分:0 註冊:2003-12-28
發送簡訊給我
|
現正寫一程式目的在於粹取出圖形的形狀再加以比對.經過二值.灰階.邊緣偵測後.
<<欲求出其周長之後加以等分取點.經過點與點間的連線向量變化.來比對>>
其中等分取點為我設定每張圖都固定取50點.
請問各位我該如何下手?
|
JerryKuo
版主
發表:42 回覆:571 積分:322 註冊:2003-03-10
發送簡訊給我
|
ihciuok你好: 如果你能把物體的外形輪廓(shape),用一個chain(鏈)表示,那計算總個數,再除
以50,求得每個節點的距離(像素),應該很好達到你的需求。 如何用chain表示輪廓呢?首先這個輪廓要相當完美,要做成chain,應該不是大問
問,小弟有看過這方面的文章,是做影像分割(image segmentation),物件外型編
碼的,不過人家的外形(shape)是人工擷取的,所以你用邊緣偵測得到的外形,先決
條件要做得很好,才好用chain表示。..參考看看
|
ihciuok
一般會員
發表:1 回覆:1 積分:0 註冊:2003-12-28
發送簡訊給我
|
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
發送簡訊給我
|
ihciuok你好: 不要問我程式有什麼問題,我想你應該比我更暸解有什麼問題
因為程式是你寫的咩~
有大概看了一下,結構分得很清楚,只是寫法有點生硬。推薦你參考
taishyang版主的作品,第六版的影像處理,我想應該對你很有幫助
http://delphi.ktop.com.tw/topic.php?TOPIC_ID=40159 對於你所發問的主題如還有問題,請繼續發問,或另開新主題發問,
其他站友會參與討論,提出更多的解決方法。
|