# 影像内定向 ( 框标点的定位 ) - PowerPoint PPT Presentation

1 / 20

I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.

- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

### 影像内定向(框标点的定位)

[一]、定位算子、特征定位的意义

1

1

1

1

1

1

1

1

1

1

1

1

1

Wong-Ttrinder圆点定位算子

[二]、 Wong-Ttrinder圆点定位算子

• Wong和Wei-Hsin利用二值图像重心对圆点进行定位。

• 首先利用阈值T=(最小灰度值+平均灰度值)/2将窗口中的影像二值化为gij(i=0,1,…,n-1;j=0,1,…,m -1)

• 然后计算目标重心坐标(x，y)与圆度r

1

1

1

1

1

1

1

1

1

1

1

1

1

Wong-Ttrinder圆点定位算子

[二]、 Wong-Ttrinder圆点定位算子

x=m10/m00

m10 =5+18+35+24+9=91

y=m01/m00

m00 =13

m01 =2+9+20+15+6=52

x=91/13=7.0

y=52/13=4.0

1

1

1

1

1

1

1

1

1

1

1

1

1

Wong-Ttrinder圆点定位算子

[二]、 Wong-Ttrinder圆点定位算子

r=Mx/My

1

1

1

1

1

1

1

1

1

1

1

1

1

Wong-Ttrinder圆点定位算子

[二]、 Wong-Ttrinder圆点定位算子

M20 =4+3+0+3+4=14

M02 =4+3+0+3+4=14

M11 =1-1-1+1=0

Mx=14+0=14

My=14-0=14

r=1.0

r=Mx/My

Wong-Ttrinder圆点定位算子

[二]、 Wong-Ttrinder圆点定位算子

Trinder发现,该算子受二值化影响,误差可达0.5像素,因此他利用原始灰度Wij为权

1

1

1

1

1

1

1

1

### 圆点定位算子编程实现

int i,j;

LPBYTE lpSrc;

float x,y;

float Mx,My;

long m10=0,m01=0,m00=0;

long huidu=0,pingjun=0;

int yuzhi=0;

float M20,M02,M11,yuandu;

M20=0.0;M02=0.0;M11=0.0;

//定义变量及其初始化

### 圆点定位算子编程实现

• BYTE *temp=newBYTE[(Width+L_Width)*Height];

• memcpy(temp,image,(Width+L_Width)*Height);

### 圆点定位算子编程实现

for(j=0;j<Height;j++)

{

for(i=0;i<(Width+L_Width);i++)

{

lpSrc=(LPBYTE)image+(Width+L_Width)*(Height-1-j)+i;

if( huidu<(*(lpSrc)))

huidu=*(lpSrc);//最大灰度

pingjun+=(*lpSrc);//灰度和

}//取得最大灰度和灰度和

}

pingjun=pingjun/((Width+L_Width)*Height);//平均灰度

yuzhi=(pingjun+huidu)/2；//取最大灰度和平均灰度的平均为阈值

### 圆点定位算子编程实现

for(j=0;j<Height;j++)

{

for(i=0;i<(Width+L_Width);i++)

{

lpSrc=(LPBYTE)image+(Width+L_Width)*(Height-1-j)+i;

if(*lpSrc>yuzhi)//计算该灰度是否大于阈值

*lpSrc=1;

else

*lpSrc=0;

}

}//图像0，1二值化

### 圆点定位算子编程实现

for(j=0;j<Height;j++)

for(i=0;i<(Width+L_Width);i++)

{

lpSrc=(LPBYTE)image+(Width+L_Width)*(Height-1-j)+i;

m10+=(*lpSrc)*i;

m00+=(*lpSrc);

m01+=(*lpSrc)*j;//计算m10,m00,m01;

}

### 圆点定位算子编程实现

x=m10/(m00*1.0);

y=m01/(m00*1.0);//计算定位点的x,y坐标

x=m10/m00

y=m01/m00

### 圆点定位算子编程实现

for(j=0;j<Height;j++)

{

for(i=0;i<(Width+L_Width);i++)

{

lpSrc=(LPBYTE)image+(Width+L_Width)*(Height-1-j)+i;

M20+=(i-x)*(i-x)*(*lpSrc);

M02+=(j-y)*(j-y)*(*lpSrc);

M11+=(i-x)*(j-y)*(*lpSrc);//计算M20，M02，M11

}

}

### 圆点定位算子编程实现

Mx=(M20+M02)/2+sqrt(((M20-M02)/2)*((M20M02)/2)+M11*M11);

My=(M20+M02)/2-sqrt(((M20-M02)/2)*((M20-M02)/2)+M11*M11);

yuandu=Mx/My; //计算Mx，My，圆度r

### 圆点定位算子编程实现

//完成在中间画十字的动作

CPoint m_pt1;//定义点

m_pt1=0;//初始化点

m_pt1.x=x;

m_pt1.y=y;

m_pt1.x=(int)(m_pt1.x+0.5);

m_pt1.y=(int)(m_pt1.y+0.5);//四舍五入

### 圆点定位算子编程实现

//要弹出对话框显示x,y,及圆度（yuandu）

CString ss1,ss2,ss3,ss;

ss1.Format("%f",x);

ss2.Format("%f",y);//因为函数MessageBox()要求输出的 类型必须是字符型，调用Format()函数进行转换

ss3.Format("%f",yuandu);

ss="x="+ss1;

ss+="y=";

ss+=ss2;

ss+="yuandu=";

ss+=ss3;

MessageBox(ss);//弹出消息

### 圆点定位算子编程实现

memcpy(image,temp,(Width+L_Width)*Height);

／／还原原图像

Invalidate();／／使窗口无效，图像刷新，新的标记就显示到上面了

Thank You!