图像边界跟踪算法程序

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Matlab程序.光栅扫描跟踪程序

I=imread(' circles.png ');

[m,n]=size(I); %计算图像的大小

imshow(I);

R=I(1,1); %图像第一个像素点的值

I0=zeros(m+2,n+2)+R; %图像周围增加一个与原图像第一个像素值相同的像素I0(2:(m+1),2:(n+1))=I;

x0=0;y0=0;

fsp=0; %是否找到起始点

for i=1:m

for j=1:n

if (I0(i,j)~=R)

x0=i; %记录起始点的纵坐标i

y0=j; %记录起始点的横坐标j

fsp=1;

break;

end

end

if fsp==1

break;

end

end

row=x0;

col=y0;

A=[]; %存储边界点坐标的矩阵

B=zeros(m,n); %边界跟踪的图像矩阵

ended=0;direction=4; %由起始点的左边开始查找

while(ended==0)

found_next=0;

b=[row,col];

A=[A;b];

B(row,col)=255;

while(found_next==0)

switch mod(direction,8)

case 0

if (I0(row, col+1)~=R)

row=row; %记录当前坐标

col=col+1;

direction=5; %下一点由方向5开始查找

found_next=1; %找到边界点

end;

case 1

if (I0(row-1, col+1)~=R)

row=row-1; %记录当前坐标

col=col+1;

direction=6; %下一点由方向6开始查找found_next=1; %找到边界点

end;

case 2

if (I0(row-1, col)~=R)

row=row-1; %记录当前坐标

col=col;

direction=7; %下一点由方向7开始查找found_next=1; %找到边界点

end;

case 3

if (I0(row-1, col-1)~=R)

row=row-1; %记录当前坐标

col=col-1;

direction=0; %下一点由方向0开始查找found_next=1; %找到边界点

end;

case 4

if (I0(row, col-1)~=R)

row=row; %记录当前坐标

col=col-1;

direction=1; %下一点由方向1开始查找found_next=1; %找到边界点

end;

case 5

if (I0(row+1, col-1)~=R)

row=row+1; %记录当前坐标

col=col-1;

direction=2; %下一点由方向2开始查找found_next=1; %找到边界点

end;

case 6

if (I0(row+1, col)~=R)

row=row+1; %记录当前坐标

col=col;

direction=3; %下一点由方向3开始查找found_next=1; %找到边界点

end;

case 7

if (I0(row+1, col+1)~=R)

row=row+1; %记录当前坐标

col=col+1;

direction=4; %下一点由方向4开始查找

found_next=1; %找到边界点

end

end

if (found_next==0)

direction=direction+1; %未找到边界点,继续在下一方向查找

end

end

if(and((x0==row),(y0==col)))

ended=1; %是否与起始点相同

end

end

imshow(B); %输出跟踪结果

%图像中心的查找

[k,l]=size(A);

sum_i=0; %记录边界点纵坐标相加的和

sum_j=0; %记录边界点横坐标相加的和

for i=1:k

sum_i=sum_i+A(i,1);

sum_j=sum_j+A(i,2);

end

i_point=sum_i/k; %图像中心的纵坐标

j_point=sum_j/k; %图像中心的横坐标

相关文档
最新文档