• 大小: 3KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-05-29
  • 语言: Matlab
  • 标签: 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  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\Testscript.m

     文件         61  2010-05-27 19:20  55593365contour_following\程序说明.txt

     目录          0  2010-05-27 18:50  55593365contour_following

----------- ---------  ---------- -----  ----

               185642                    9


评论

共有 条评论

相关资源