• 大小: 4KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-05-27
  • 语言: 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  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  Testscript.m

评论

共有 条评论