资源简介
matlab 边界跟踪程序,图像要求为二值图像,输出为边界的点的坐标。
代码片段和文件信息
function C = contour_following(BW)
% CONTOUR_FOLLOWING takes a binary array and returns the sorted row and
% column coordinates of contour pixels.
%
% C = CONTOUR_FOLLOWING(BW) takes BW as an input. BW is a binary array
% containing the image of an object (‘1‘: foreground ‘0‘: background). It
% returns a circular list (N x 2 C(1:)=C(end:)) of the
% (rowcolumn)-coordinates of the object‘s contour in the order of
% appearence (This function was inspired from the freeman contour coding
% algorithm).
%
% Note:
% - if the object is less than 3 pixels CONTOUR_FOLLOWING sends back [0 0].
% - the algorithm is quite robust: the object can have holes and can also
% be only one pixel thick in some parts (in this case some coordinates
% pair will appear two times: they are counted “way and back“).
[mn]=size(BW); % getting the image height and width
Itemp=zeros(m+2n+2); % we create a ‘0‘ frame around the image to avoid border problems
Itemp(2:(m+1)2:(n+1))=BW;
BW=Itemp;
BW = BW - imerode(BW[0 1 0 ; 1 1 1 ; 0 1 0]); % gets the contour by substracting the erosion to the image
BW = bwmorph(BW‘thin‘Inf); % to be sure to have strictly 8-connected contour
if (sum(sum(BW))<3) % we consider that less than 3 pixels cannot make a contour
C=[0 0];
return;
end;
[rowcol]=find(BW1); % takes the first encountered ‘1‘ pixel as the starting point of the contour
MAJ=[6 6 0 0 2 2 4 4]; % variable initialization
C=[0 0 ; 0 0];
k=0;
ended=0;
direction=4;
while(ended==0)
k=k+1;
found_next=0;
while(found_next==0)
switch mod(direction8)
case 0
if (BW(row col+1)==1)
row=row;
col=col+1;
C(k:)=[row col];
found_next=1;
end;
case 1;
if (BW(row+1 col+1)==1)
row=row+1;
col=col+1;
C(k:)=[row col];
found_next=1;
end;
case 2;
if (BW(row+1 col)==1)
row=row+1;
col=col;
C(k:)=[row col];
found_next=1;
end;
case 3;
if (BW(row+1 col-1)==1)
row=row+1;
col=col-1;
C(k:)=[row col];
found_next=1;
end;
case 4;
if (BW(row col-1)==1)
row=row;
col=col-1;
C(k:)=[row col];
found_next=1;
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 4208 2007-05-21 11:51 contour_following.m
文件 36054 2007-05-10 13:36 test1.bmp
文件 36054 2007-05-10 13:37 test2.bmp
文件 36054 2007-05-10 13:37 test3.bmp
文件 36054 2007-05-10 13:37 test4.bmp
文件 36054 2007-05-10 13:38 test5.bmp
文件 1103 2007-05-10 13:39 Testsc
- 上一篇:DCT域数字图像加去水印的MATLAB代码
- 下一篇:掌纹识别PCA
评论
共有 条评论