MATLAB 图像边界跟踪

前几篇文章中讲的都是对于离散点的操作,对于离散点的处理方法比较少,后来想到将离散点做出的曲线图保存成图像,对图像进行处理比较方便。在matlab图像处理工具箱中,有两个函数可以用来进行边界跟踪,其中一个是bwtraceboundary,另一个是bwboundaries。我们首先看一下bwtraceboundary 函数的常见调用方法:
B = bwtraceboundary(BW, p,fstep)
B = bwtraceboundary (BW, P,fstep, conn)
B = bwtraceboundary(BW, p, fstep, conn, N, dir)
其中,BW是二值图像,非0值构成了目标,0值构成了背景; p是一个二维向量,p中的元素是指开始搜寻边界点的行号和列号; fstep 是初始的搜索方向,其值可以为'N",即图像上面的元素,若值为'NE'则表示图像右上方的元素; conn刻画了跟踪边界的连续性,其值可以为4或者8; N是指边界的最大像素数目,默认值为inf; dir 是跟踪边界的方向,其值可以为'clockwise'或者counterclockwise';B是返回的边界像素的行号和列号。关于搜索方向的设定就不在这里加以赘述,在help中可以查到。

下面的例子首先读取一幅二值图像,从图像的左上方开始搜寻图像的第一个非0像素,边界的像素个数为50,然后在原图上显示边界。

利用bwtraceboundary函数跟踪边界,代码实现如下:

BW=imread('BW.jpg');                           %读取二值图像
imshow(BW,[]);                                 %显示二值图像
s=size(BW);                                    %图像矩阵的行和列
for row=2:55:s(1)
    for col=1:s(2)
        if BW(row,col),
            break;
        end
    end
    contour = bwtraceboundary(BW,[row,col],'W',8,50,...
        'counterclockwise');                                   %检测是否为边界
    if(~isempty(contour))
        hold on;
        plot(contour(:,2),contour(:,1),'g','LineWidth',2);     %画出边界
        hold on;
        plot(col,row,'gx','LineWidth',2);                      %画出边界起点
    else
        hold on;plot(col,row,'rx','LineWidth',2);
    end
end

另外一种方法将在下一篇博客中进行讲解。

你可能感兴趣的:(MATLAB 图像边界跟踪)