边界跟踪实现DIY
1、简单来讲bwtraceboundary函数使用
通过顺序找出边缘点来跟踪边界的。若图象是二值图象或图象中不同区域具有不同的象素值,但每个区域内的象素值是相同的,则如下算法可完成基于4连通或8连通区域的轮廓跟踪。
也就是说,bwtraceboundary-二进制图像中的跟踪对象,该MATLAB函数以二进制图像BW跟踪对象的轮廓。
函数使用方法如下:
B = bwtraceboundary(BW,P,fstep)
B = bwtraceboundary(BW,P,fstep,conn)
B = bwtraceboundary(BW,P,fstep,conn,m,dir)
另请参阅 bwboundaries, bwperim
B = bwtraceboundary(BW,P,fstep)跟踪二进制图像BW中对象的轮廓。 非零像素属于对象,零值像素构成背景。 P指定对象边界上要开始跟踪的点的行和列坐标。 fstep指定连接到P的下一个对象像素的初始搜索方向。B保留该区域的边界像素的行和列坐标。
B = bwtraceboundary(BW,P,fstep,conn)跟踪边界,其中conn指定所需的连接性。
B = bwtraceboundary(BW,P,fstep,conn,m,dir)指定m(要提取的最大边界像素数)和dir(跟踪边界的方向)。 默认情况下,bwtraceboundary标识边界上的所有像素。
源码如下方案:
clear all;clc;close all;
I=imread('W:\PY\PY\temmm\mnsdf (7).jpg'); %读取当前路径下的图片
figure
imshow(I);
title('原始图像');
I1=rgb2gray(I); %将彩色图像转化灰度图像
threshold=graythresh(I1);%计算将灰度图像转化为二值图像所需的门限
BW=im2bw(I1, threshold);%将灰度图像转化为二值图像
figure
imshow(BW);
title('二值图像');
dim=size(BW);
col=round(dim(2)/2)-90; %计算起始点列坐标
row=find(BW(:,col),1);%计算起始点行坐标
connectivity=8;
num_points=180;
contour=bwtraceboundary(BW,[row,col],'N',connectivity,num_points);
%提取边界
figure
imshow(I1);
hold on;
plot(contour(:,2),contour(:,1), 'g','LineWidth' ,2);
title('边界跟踪图像');
效果如图:
换张图,效果如下: