利用MATLAB获取图像轮廓bwperim

一、利用bwperim来查找二值图像的边缘。

BW2 = bwperim(BW1)
BW2 = bwperim(BW1,conn)
BW2 = bwperim(BW1,conn)表示从输入图像BW1中返回只包括对象边缘像素点的图像。

conn的定义值如下:

对二维

4    4邻域

8    8邻域

对三维

6    6邻域

18  18邻域

26  26邻域

例子:

%读取原图    

im = imread( filepath );                  

imshow(im);    

title('原图');                           

    

% 转二值图像    

bw = im2bw( im );                           

    
%轮廓提取       

contour = bwperim(bw);                      

figure    

imshow(contour);    

title('轮廓')  

bwperim局限性在于它不仅提取外轮廓, 对图形区域内部的孔洞所围成的内部边缘也提取出来。像如下图:

如果想只得到外形轮廓,则需要先进行填洞操作,后进行膨胀操作,去除孔、洞。填洞为imfill。

示例代码:

I = imread('1.jpg');
BW = im2bw(I,0.4);
BW2 = bwperim(BW,8);
%显示图像
subplot(1,2,1);imshow(I);title('original iamge');
subplot(1,2,2);imshow(BW2);title('bwperim');
%填充、膨胀处理
IBW = ~BW;
F1 = imfill(IBW,'holes');
SE = ones(3); %图像被结构元素SE膨胀
F2 = imdilate(F1,SE,'same');%膨胀操作
BW3 = bwperim(F2);
%显示图像:
subplot(1,2,1);imshow(I);title('original iamge');
subplot(1,2,2);imshow(BW3);title('operated bwperim'); 

二、借助edge()函数进行边缘检测

算子可以选择canny,soble等等。具体代码如下:

%读取原图    

im = imread( filepath );                  

imshow(im);    

title('原图');                           

    

% 转二值图像    

bw = im2bw( im );                           

% 边界检测    

contour = edge(bw ,'canny');    

figure    

imshow(contour);    

title('边界')  

其他算子的使用和效果可参见文章:http://www.doc88.com/p-243656000728.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值