matlab图像处理:边界跟踪

设一幅二值图像中,只有一个白色区域,试给出求该区域外围轮廓线的方法(要求按顺时针的顺序给出各点的坐标,即行/列号)

上面是题目的要求,提取图像的外边界轮廓和内边界轮廓,相对比较简单,但是困难的是这个按照顺时针或者逆时针把这个坐标输出,可能许老师就是想让我们用他讲解的ppt的方法,这里赞一波许向阳老师,确实讲解的很透彻!!!
在这里插入图片描述
在这里插入图片描述下面是实现的代码

%边界跟踪并实现顺时针输出
clear;
clc;
img = imread('hb.png');
% 对图像进行二值化操作
img = rgb2gray(img);
thresh = graythresh(img);
B = im2bw(img,thresh);
[M,N] = size(img);
mark_img = zeros(M,N);
% 采用八领域作为边界条件
offset_8 = [-1,0;-1,1;0,1;1,1;1,0;1,-1;0,-1;-1,-1];
 match_list = [6,7,8,1,2,3,4,5];
% 下面找到第一个边界点
[a,b] = find(B==1);
start_point = [a(1),b(1)]
current_point = start_point;
dir = 1;
result = [start_point];
mark = 1
while (max(current_point ~= start_point))||(mark)
    temp_point = current_point + offset_8(dir,:)
%     通过两个判断条件,来判断当前点是不是边界点
    if (B(temp_point(1),temp_point(2))==1) && (sum(sum(B(temp_point(1)-1:temp_point(1)+1,temp_point(2)-1:temp_point(2)+1)))~=9)
        dir = match_list(dir);
        current_point = temp_point;
        result = [result;current_point];
        mark = 0;
    else
        dir = dir+1;
        if dir == 9
            dir = 1;
        end
    end
end
[new_m,new_n] = size(result);
for i = 1:new_m
    mark_img(result(i,1),result(i,2)) = 1;
end
figure,imshow(img);
figure,imshow(mark_img);
for i=1:length(result)
    disp(result(i,:))
end

取得的效果:
原图
在这里插入图片描述
提取的边界图
在这里插入图片描述
因为图有点大,所以看起来好像有点断断续续的样子

  • 5
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值