资源简介
图像分割时,经常需要实现对边界的跟踪,从而实现对区域的提取。边界跟踪算法输入时一幅二值图像(即边界图像),实现对边界的定位,从而在得到边界的基础上提取相应区域。输出是边界坐标。
代码片段和文件信息
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 2010-05-27 19:16 55593365contour_following\contour_following.m
文件 36054 2007-05-10 13:36 55593365contour_following\test1.bmp
文件 36054 2007-05-10 13:37 55593365contour_following\test2.bmp
文件 36054 2007-05-10 13:37 55593365contour_following\test3.bmp
文件 36054 2007-05-10 13:37 55593365contour_following\test4.bmp
文件 36054 2007-05-10 13:38 55593365contour_following\test5.bmp
文件 1103 2007-05-10 13:39 55593365contour_following\Testsc
文件 61 2010-05-27 19:20 55593365contour_following\程序说明.txt
目录 0 2010-05-27 18:50 55593365contour_following
----------- --------- ---------- ----- ----
185642 9
- 上一篇:MATLAB GUI函数查询
- 下一篇:神经网络PID控制程序
评论
共有 条评论