matlab获取图像的轮廓

输入一个二值图像,输出图像的轮廓。

function [bmap] = seg2bmap(seg,width,height)
% [bmap] = seg2bmap(seg)
%
% From a segmentation, compute a binary boundary map with 1 pixel wide
% boundaries.  The boundary pixels are offset by 1/2 pixel towards the
% origin from the actual segment boundary.
%
% INPUTS
%   seg     Segments labeled from 1..k.
%   [width]     Width of desired bmap, <= size(seg,2)
%   [height]    Height of desired bmap, <= size(seg,1)
%
% OUTPUTS
%   bmap        Binary boundary map.
%
% David Martin <dmartin@eecs.berkeley.edu>
% January 2003

if nargin<3,
  [height,width] = size(seg);
end
[h,w] = size(seg);

% check width and height
ar1 = width / height;
ar2 = w / h;
if width>w | height>h | abs(ar1-ar2)>0.01,
  error(sprintf('Can''t convert %dx%d seg to %dx%d bmap.',w,h,width,height));
end

e = zeros(size(seg));
s = zeros(size(seg));
se = zeros(size(seg));

e(:,1:end-1) = seg(:,2:end);
s(1:end-1,:) = seg(2:end,:);
se(1:end-1,1:end-1) = seg(2:end,2:end);

b = (seg~=e | seg~=s | seg~=se);
b(end,:) = (seg(end,:)~=e(end,:));
b(:,end) = (seg(:,end)~=s(:,end));
b(end,end) = 0;

if w==width & h==height,

  bmap = b;

else

  bmap = zeros(height,width);
  for x = 1:w,
    for y = 1:h,
      if b(y,x),
        j = 1+floor((y-1)*height/h);
        i = 1+floor((x-1)*width/w);
        bmap(j,i) = 1;
      end
    end
  end

end

调用示例:

fg_boundary = seg2bmap(foreground_mask);

输入:
这里写图片描述
输出:
这里写图片描述

  • 0
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值