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

影像邊緣距離及角度的運算

 
n890377
一般會員


發表:17
回覆:16
積分:21
註冊:2006-07-13

發送簡訊給我
#1 引用回覆 回覆 發表時間:2006-10-29 16:04:22 IP:163.22.xxx.xxx 未訂閱
我的問題:1.h[i][2]跑出來應該是一大堆date,但是結果只有一個數字..
2.角度寫法好像也有誤..我找不到問題..
想麻煩各位大大幫我看一下以下演算法,我的程式有沒有錯...謝謝!!!
演算法:
計算重心點到每個手部輪廓點的距離跟角度,以剛才求出的手部重心為圓心,以圓去掃描整張影像,半徑由0
開始逐漸增加,當圓通過到手部輪廓點時,則記錄此點的半徑及位
置。當圓的大小超過手部範圍則停止掃描,如此一來,我們便記錄了
所有手部輪廓點的座標及每個手部輪廓點到手部重心的距離
邊緣化程式:
int GX,GY;
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];
GX=((p[7] p[8] p[9])-(p[1] p[2] p[3]))/4;
if (GX<0)
GX=(-1)*GX;
{
int GY;
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];
GY=((p[1] p[4] p[7])-(p[3] p[6] p[9]))/4;
if (GY<0)
GY=(-1)*GY;
return (GY);
}
//重心:
for (j=0; jHeight; j )
{
ptr_s = (Byte *)Image1->Picture->Bitmap->ScanLine[j];
for (i=0; iWidth; i )
{
g_s = ptr_s[i*3 2];
g_s1= ptr_s[i*3 1];
g_s2= ptr_s[i*3];
if(g_s==255&&g_s1==255&&g_s2==255)
{
sum=sum 1;
X=X j;
Y=Y i;

}
if(sum>0)
{
sx=X/sum;
sy=Y/sum;
}
}
}
//重心到邊緣距離跟角度
int radius,edge,h,hand;
int edge_x,edge_y;
short int h[360][3]={0};
//h[角度][0]=X座標
//h[角度][1]=Y座標
//h[角度][2]=邊緣到重心的距離

bool Gx[320][240];
bool Gy[320][240];
if(sx>0)
{
for (r=30;radius<200;r )
{
ptr_s = (Byte *)Image1->Picture->Bitmap->ScanLine[r];
edge=0;
for(int i = 0 ; i < 360 ; i )
{
edge_x = (int)(r*cos((double)i*PI/180.0) ); //角度= (double)i*PI/180.0)
edge_y = (int)(r*sin((double)i*PI/180.0) );

if( Gx[sy- edge_y][sx edge_x] Gy[sy- edge_y][sx edge_x] == 255) //Gx&&Gy為水平跟垂直方向的邊緣
{
edge ;
}
}
if(edge==0)
{
hand=r;
break;
}
}
for (r=5;radius<=hand 3;r )
{
ptr_s = (Byte *)Image1->Picture->Bitmap->ScanLine[r];
for(int i = 0 ; i < 360 ; i )
{
edge_x = (int)(r*cos((double)i*PI/180.0) );
edge_y = (int)(r*sin((double)i*PI/180.0) );

if(Gx[centerYY- edge_y][centerXX edge_x] Gy[centerYY- edge_y][centerXX edge_x]== 255)
{

h[i][0] = sx edge_x ;
h[i][1] = sy - edge_y ;
h[i][2] = (int)(sqrt((sx-edge_x)*(sx-edge_x) (sy-edge_y)*(sy-edge_y)));//邊緣到重心的距離
}
}
------
.
系統時間:2024-05-03 21:10:45
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!